Решение на Втора задача от Даниела Иванова

Обратно към всички решения

Към профила на Даниела Иванова

Резултати

  • 6 точки от тестове
  • 1 отнета точка
  • 5 точки общо
  • 20 успешни тест(а)
  • 0 неуспешни тест(а)

Код

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

Лог от изпълнението

....................

Finished in 0.01854 seconds
20 examples, 0 failures

История (1 версия и 1 коментар)

Даниела обнови решението на 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]