Мария обнови решението на 18.10.2015 22:57 (преди над 9 години)
+def move(snake, direction)
+ new_snake = snake.clone
+ new_snake.shift
+ new_snake << [new_snake.last,direction].transpose.map {|a| a.inject(:+)}
+ new_snake
+end
+
+def grow(snake, direction)
+ new_snake = snake.clone
+ new_snake <<[new_snake.last,direction].transpose.map {|a| a.inject(:+)}
+ new_snake
+end
+
+def new_food(food, snake, dimensions)
+ new_width = [*0 .. (dimensions[:width] - 1)]
+ new_height = [*0 .. (dimensions[:height] - 1)]
+ space = new_width.product(new_height).collect { |x, y| [x, y] }
+ full = food | snake
+ blank_space = space - full
+ blank_space.shift
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_step = [snake.last, direction].transpose.map { |a| a.inject(:+) }
+ (snake.include? next_step) or (next_step[0] ==
+ dimensions[:width]) or (next_step[1] == dimensions[:height])
+end
+
+def danger?(snake, direction, dimensions)
+ obstacle_ahead?(snake, direction, dimensions) or obstacle_ahead?(snake,
+ ([direction, direction].transpose.map { |a| a.inject(:+)} ), dimensions)
+end