Божидар обнови решението на 17.10.2015 22:40 (преди над 9 години)
+def generate_board(dimensions)
+ (0..dimensions[:width] - 1).to_a.product((0..dimensions[:height] - 1).to_a)
+end
+
+def generate_next_step(snake, direction)
+ [snake[-1][0] + direction[0], snake[-1][1] + direction[1]]
+end
+
+def grow(snake, direction)
+ snake + [generate_next_step(snake, direction)]
+end
+
+def move(snake, direction)
+ grow(snake, direction)[1..-1]
+end
+
+def new_food(food, snake, dimensions)
+ available = generate_board(dimensions) - food - snake
+
+ available[rand(0..available.count - 1)]
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_step = generate_next_step(snake, direction)
+ board = generate_board(dimensions)
+
+ not (board.include?(next_step) and !snake.include?(next_step))
+end
+
+def danger?(snake, direction, dimensions)
+ one_step = obstacle_ahead?(snake, direction, dimensions)
+ two_steps = obstacle_ahead?(move(snake, direction), direction, dimensions)
+
+ one_step or two_steps
+end