Решение на Втора задача от Никола Терзиев

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

Към профила на Никола Терзиев

Резултати

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

Код

def move(snake, directions)
new_snake = snake.clone
new_snake.shift
grow(new_snake, directions)
end
def grow(snake, directions)
new_snake = snake.clone
new_head = [new_snake[-1][0] + directions[0],
new_snake[-1][1] + directions[1]]
new_snake.push(new_head)
new_snake
end
def new_food(food, snake, dimensions)
obstacles = food + snake
x_coordinates = (0..dimensions[:width] - 1).to_a
y_coordinates = (0..dimensions[:width] - 1).to_a
whole_board = x_coordinates.product(y_coordinates)
free_board = whole_board - obstacles
free_board.sample
end
def obstacle_ahead?(snake, direction, dimensions)
next_position = [snake[-1][0] + direction[0],snake[-1][1] + direction[1]]
if snake.include?(next_position) or
(next_position[0] < 0 or next_position[0] >= dimensions[:width]) or
(next_position[1] < 0 or next_position[1] >= dimensions[:height])
true
else
false
end
end
def danger?(snake, direction, dimensions)
obstacle_ahead?(snake, direction, dimensions) and
obstacle_ahead?(move(snake, direction), direction, dimensions)
end

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

.F...............F..

Failures:

  1) #move moves one-position-sized snake
     Failure/Error: expect(move([[2, 2]], [-1, 0])).to eq([[1, 2]])
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /tmp/d20151026-15631-190br5d/solution.rb:9:in `grow'
     # /tmp/d20151026-15631-190br5d/solution.rb:4:in `move'
     # /tmp/d20151026-15631-190br5d/spec.rb:12: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) #danger? returns true if obstacle in two turns
     Failure/Error: expect(danger?([[6, 6], [7, 6], [8, 6]], [1, 0], dimensions)).to eq true
       
       expected: true
            got: false
       
       (compared using ==)
     # /tmp/d20151026-15631-190br5d/spec.rb:113: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.01485 seconds
20 examples, 2 failures

Failed examples:

rspec /tmp/d20151026-15631-190br5d/spec.rb:11 # #move moves one-position-sized snake
rspec /tmp/d20151026-15631-190br5d/spec.rb:112 # #danger? returns true if obstacle in two turns

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

Никола обнови решението на 19.10.2015 13:10 (преди над 9 години)

+def move(snake, directions)
+ new_snake = snake.clone
+ new_snake.shift
+ grow(new_snake, directions)
+end
+
+def grow(snake, directions)
+ new_snake = snake.clone
+ new_head = [new_snake[-1][0] + directions[0],
+ new_snake[-1][1] + directions[1]]
+ new_snake.push(new_head)
+ new_snake
+end
+
+def new_food(food, snake, dimensions)
+ obstacles = food + snake
+ x_coordinates = (0..dimensions[:width] - 1).to_a
+ y_coordinates = (0..dimensions[:width] - 1).to_a
+ whole_board = x_coordinates.product(y_coordinates)
+ free_board = whole_board - obstacles
+ free_board.sample
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_position = [snake[-1][0] + direction[0],snake[-1][1] + direction[1]]
+ if snake.include?(next_position) or
+ (next_position[0] < 0 or next_position[0] >= dimensions[:width]) or
+ (next_position[1] < 0 or next_position[1] >= dimensions[:height])
+ true
+ else
+ false
+ end
+end
+
+def danger?(snake, direction, dimensions)
+ obstacle_ahead?(snake, direction, dimensions) and
+ obstacle_ahead?(move(snake, direction), direction, dimensions)
+end