Даниела обнови решението на 18.10.2015 13:11 (преди над 9 години)
+def sum_arrays(first_array, second_array)
+ first_array.map.each_with_index { |item, index| item + second_array[index] }
+end
+
+def table(dimensions)
+ table_width = Array.new(dimensions[:width]) { |index| index }
+ table_height = Array.new(dimensions[:height]) { |index| index }
+ table_width.product(table_height)
+end
+
+def move(snake, direction)
+ new_snake = snake + [sum_arrays(snake.last, direction)]
+ new_snake[1..-1]
+end
+
+def grow(snake, direction)
+ snake + [sum_arrays(snake.last, direction)]
+end
+
+def new_food(food, snake, dimensions)
+ free_spaces = table(dimensions) - food - snake
+ free_spaces.sample
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ new_position = sum_arrays(snake.last, direction)
+ free_spaces = table(dimensions) - snake
+ !free_spaces.include?(new_position)
+end
+
+def danger?(snake, direction, dimensions)
+ next_turn_danger = obstacle_ahead?(snake, direction, dimensions)
+ position_in_two_moves = sum_arrays(direction, direction)
+ second_turn_danger = obstacle_ahead?(snake, position_in_two_moves, dimensions)
+ next_turn_danger or second_turn_danger
+end
- Индентирай с два space-a.
-
Range#to_a
е по-разбираемо от подобна употреба на конструктора наArray
. - Погледни
Enumerable#drop
. - Опитвай се да измисляш малко по-добри имена. Задавай си въпросът "Какво значи тази стойност в домейна на решавания проблем?". Това таблица ли е или игрална дъска? Не слагай типовете на стойностите в имената. По-близо е до имплементацията и ще трябва да ги сменяш ако промениш и класа.
-
sum_arrays
като цяло е много сложно за това, което искаше да постигнеш.[x1 + y1, x2 + y2]