Решение на Втора задача от Денис Михайлов

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

Към профила на Денис Михайлов

Резултати

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

Код

def grow(snake, direction)
moved_snake = snake.dup
moved_snake << new_head(snake, direction)
end
def move(snake, direction)
moved_snake = grow(snake, direction)
moved_snake.shift
moved_snake
end
def new_food(food, snake, dimensions)
impossible_cells = food + snake
new_food = random_cell(dimensions)
new_food = random_cell(dimensions) while impossible_cells.include?(new_food)
new_food
end
def random_cell(dimensions)
x = rand(0..(dimensions[:width] - 1))
y = rand(0..(dimensions[:height] - 1))
[x, y]
end
def new_head(snake, direction)
snake[-1].zip(direction).map { |x, y| x + y }
end
def obstacle_ahead?(snake, direction, dimensions)
new_head = new_head(snake, direction)
is_in_snake = snake.include?(new_head)
blocked_horizontally = (new_head[0] == 0 or new_head[0] == dimensions[:width])
blocked_vertically = (new_head[1] == 0 or new_head[1] == dimensions[:height])
is_in_snake or blocked_horizontally or blocked_vertically
end
def danger?(snake, direction, dimensions)
if obstacle_ahead?(snake, direction, dimensions) then
true
else
next_snake = move(snake, direction)
obstacle_ahead?(next_snake, direction, dimensions)
end
end

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

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

Finished in 0.01593 seconds
20 examples, 0 failures

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

Денис обнови решението на 19.10.2015 00:58 (преди над 9 години)

+def grow(snake, direction)
+ moved_snake = snake.dup
+ moved_snake << new_head(snake, direction)
+end
+
+def move(snake, direction)
+ moved_snake = grow(snake, direction)
+ moved_snake.shift
+ moved_snake
+end
+
+def new_food(food, snake, dimensions)
+ impossible_cells = food + snake
+ new_food = random_cell(dimensions)
+ new_food = random_cell(dimensions) while impossible_cells.include?(new_food)
+ new_food
+end
+
+def random_cell(dimensions)
+ x = rand(0..(dimensions[:width] - 1))
+ y = rand(0..(dimensions[:height] - 1))
+ [x, y]
+end
+
+def new_head(snake, direction)
+ snake[-1].zip(direction).map { |x, y| x + y }
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ new_head = new_head(snake, direction)
+ is_in_snake = snake.include?(new_head)
+ blocked_horizontally = (new_head[0] == 0 or new_head[0] == dimensions[:width])
+ blocked_vertically = (new_head[1] == 0 or new_head[1] == dimensions[:height])
+ is_in_snake or blocked_horizontally or blocked_vertically
+end
+
+def danger?(snake, direction, dimensions)
+ if obstacle_ahead?(snake, direction, dimensions) then
+ true
+ else
+ next_snake = move(snake, direction)
+ obstacle_ahead?(next_snake, direction, dimensions)
+ end
+end