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

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

Към профила на Мила Русева

Резултати

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

Код

def move(snake, direction)
snake_new = snake[1..-1]
grow(snake_new, direction)
end
def grow(snake, direction)
snake_new = snake.dup
head = new_head(snake, direction)
snake_new.push(head)
end
def new_head(snake, direction)
old_head = snake[-1]
[old_head[0] + direction[0], old_head[1] + direction[1]]
end
def new_food(food, snake, dimensions)
field = new_field(dimensions)
while snake.include?(field) or food.include?(field) do
field = new_field(dimensions)
end
field
end
def new_field(dimensions)
xs = rand(dimensions[:width])
ys = rand(dimensions[:height])
[xs, ys]
end
def obstacle_ahead?(snake, direction, dimensions)
head = new_head(snake, direction)
snake.include?(head) or wall?(head, dimensions)
end
def wall?(head, dimensions)
return true if head[0] < 0
return true if head[0] >= dimensions[:width]
return true if head[1] < 0
return true if head[1] >= dimensions[:height]
return false
end
def danger?(snake, direction, dimensions)
return true if obstacle_ahead?(snake, direction, dimensions)
next_turn = move(snake, direction)
obstacle_ahead?(next_turn, direction, dimensions)
end

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

.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-1xrrd0a/solution.rb:14:in `new_head'
     # /tmp/d20151026-15631-1xrrd0a/solution.rb:8:in `grow'
     # /tmp/d20151026-15631-1xrrd0a/solution.rb:3:in `move'
     # /tmp/d20151026-15631-1xrrd0a/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)>'

Finished in 0.0144 seconds
20 examples, 1 failure

Failed examples:

rspec /tmp/d20151026-15631-1xrrd0a/spec.rb:11 # #move moves one-position-sized snake

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

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

+def move(snake, direction)
+ snake_new = snake[1..-1]
+ grow(snake_new, direction)
+end
+
+def grow(snake, direction)
+ snake_new = snake.dup
+ head = new_head(snake, direction)
+ snake_new.push(head)
+end
+
+def new_head(snake, direction)
+ old_head = snake[-1]
+ [old_head[0] + direction[0], old_head[1] + direction[1]]
+end
+
+def new_food(food, snake, dimensions)
+ field = new_field(dimensions)
+ while snake.include?(field) or food.include?(field) do
+ field = new_field(dimensions)
+ end
+ field
+end
+
+def new_field(dimensions)
+ xs = rand(dimensions[:width])
+ ys = rand(dimensions[:height])
+ [xs, ys]
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ head = new_head(snake, direction)
+ snake.include?(head) or wall?(head, dimensions)
+end
+
+def wall?(head, dimensions)
+ return true if head[0] < 0
+ return true if head[0] >= dimensions[:width]
+ return true if head[1] < 0
+ return true if head[1] >= dimensions[:height]
+ return false
+end
+
+def danger?(snake, direction, dimensions)
+ return true if obstacle_ahead?(snake, direction, dimensions)
+ next_turn = move(snake, direction)
+ obstacle_ahead?(next_turn, direction, dimensions)
+end
+
+