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

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

Към профила на Ивелина Христова

Резултати

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

Код

def move(snake, direction)
new_position_x = snake.last[0] + direction[0]
new_position_y = snake.last[1] + direction[1]
new_position = [new_position_x, new_position_y]
moved_snake = snake.last(snake.length - 1)
moved_snake.push(new_position)
moved_snake
end
def grow(snake, direction)
new_position_x = snake.last[0] + direction[0]
new_position_y = snake.last[1] + direction[1]
new_position = [new_position_x, new_position_y]
moved_snake = snake.clone
moved_snake.push(new_position)
moved_snake
end
def new_food(food, snake, dimensions)
positions_x = Array(0..(dimensions[:width] - 1))
positions_y = Array(0..(dimensions[:height] - 1))
positions_on_field = positions_x.product(positions_y)
used_positions = food.concat(snake)
available_positions = positions_on_field - used_positions
available_positions.sample
end
def obstacle_ahead?(snake, direction, dimensions)
new_position_x = snake.last[0] + direction[0]
new_position_y = snake.last[1] + direction[1]
if new_position_x < 0 || new_position_x >= dimensions[:width]
return true
end
if new_position_y < 0 || new_position_y >= dimensions[:height]
return true
end
return false
end
def danger?(snake, direction, dimensions)
is_danger = obstacle_ahead?(snake, direction, dimensions)
moved_snake = move(snake, direction)
is_danger = is_danger || obstacle_ahead?(moved_snake, direction, dimensions)
is_danger
end

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

...........FF.......

Failures:

  1) #new_food does not mutate the given arguments
     Failure/Error: expect { new_food(food, snake, dimensions) }.not_to change { food }
       result should not have changed, but did change from [[0, 0], [0, 2], [2, 0], [0, 1], [1, 1], [2, 1], [2, 2]] to [[0, 0], [0, 2], [2, 0], [0, 1], [1, 1], [2, 1], [2, 2], [0, 1], [1, 1], [2, 1], [2, 2]]
     # /tmp/d20151026-15631-52a7q0/spec.rb:74:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  2) #obstacle_ahead? returns true if snake body ahead
     Failure/Error: expect(
       
       expected: true
            got: false
       
       (compared using ==)
     # /tmp/d20151026-15631-52a7q0/spec.rb:83:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.01473 seconds
20 examples, 2 failures

Failed examples:

rspec /tmp/d20151026-15631-52a7q0/spec.rb:72 # #new_food does not mutate the given arguments
rspec /tmp/d20151026-15631-52a7q0/spec.rb:82 # #obstacle_ahead? returns true if snake body ahead

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

Ивелина обнови решението на 19.10.2015 08:45 (преди над 9 години)

+def move(snake, direction)
+ new_position_x = snake.last[0] + direction[0]
+ new_position_y = snake.last[1] + direction[1]
+ new_position = [new_position_x, new_position_y]
+ moved_snake = snake.last(snake.length - 1)
+ moved_snake.push(new_position)
+ moved_snake
+end
+
+def grow(snake, direction)
+ new_position_x = snake.last[0] + direction[0]
+ new_position_y = snake.last[1] + direction[1]
+ new_position = [new_position_x, new_position_y]
+ moved_snake = snake.clone
+ moved_snake.push(new_position)
+ moved_snake
+end
+
+def new_food(food, snake, dimensions)
+ positions_x = Array(0..(dimensions[:width] - 1))
+ positions_y = Array(0..(dimensions[:height] - 1))
+ positions_on_field = positions_x.product(positions_y)
+ used_positions = food.concat(snake)
+ available_positions = positions_on_field - used_positions
+ available_positions.sample
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ new_position_x = snake.last[0] + direction[0]
+ new_position_y = snake.last[1] + direction[1]
+ if new_position_x < 0 || new_position_x >= dimensions[:width]
+ return true
+ end
+ if new_position_y < 0 || new_position_y >= dimensions[:height]
+ return true
+ end
+ return false
+end
+
+def danger?(snake, direction, dimensions)
+ is_danger = obstacle_ahead?(snake, direction, dimensions)
+ moved_snake = move(snake, direction)
+ is_danger = is_danger || obstacle_ahead?(moved_snake, direction, dimensions)
+ is_danger
+end