Александър обнови решението на 14.10.2015 06:19 (преди над 9 години)
+def head_after_move(snake, direction)
+ [snake.last[0] + direction[0], snake.last[1] + direction[1]]
+end
+
+def random_position(dimensions)
+ [rand(0...dimensions[:width]), rand(0...dimensions[:height])]
+end
+
+def move(snake, direction)
+ grow(snake, direction).drop(1)
+end
+
+def grow(snake, direction)
+ snake + [head_after_move(snake, direction)]
+end
+
+def new_food(food, snake, dimensions)
+ new_food = random_position(dimensions)
+ taken = food + snake
+
+ new_food = random_position(dimensions) while (taken.include?(new_food))
+
+ new_food
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ xs_ahead, ys_ahead = head_after_move(snake, direction)
+
+ vertical_wall_ahead = (xs_ahead == -1 or xs_ahead == dimensions[:width])
+ horizontal_wall_ahead = (ys_ahead == -1 or ys_ahead == dimensions[:height])
+ snake_ahead = snake.include?([xs_ahead, ys_ahead])
+
+ vertical_wall_ahead or horizontal_wall_ahead or snake_ahead
+end
+
+def danger?(snake, direction, dimensions)
+ dies_in_one = obstacle_ahead?(snake, direction, dimensions)
+ dies_in_two = obstacle_ahead?(move(snake, direction), direction, dimensions)
+ dies_in_one or dies_in_two
+end