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

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

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

Резултати

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

Код

def position_in_front_of_snake(snake,direction)
position = snake[-1].zip(direction).each{
|element| element[0]+=element[1]
}
position.transpose[0]
end
def x_border?(point,dimensions)
not (0..dimensions[:width]-1).member?(point[0])
end
def y_border?(point,dimensions)
not (0..dimensions[:height]-1).member?(point[1])
end
def is_border?(point, dimensions)
if x_border?(point,dimensions) or y_border?(point,dimensions)
return true
else
return false
end
end
def move(snake, direction)
(snake | [position_in_front_of_snake(snake, direction)])[1..snake.length]
end
def grow(snake, direction)
(snake | [position_in_front_of_snake(snake, direction)])
end
def new_food(food, snake, dimensions)
taken_position = food | snake
new_food_position = [rand(dimensions[:width]),rand(dimensions[:height])]
if taken_position.include?(new_food_position)
new_food(food, snake, dimensions)
else
new_food_position
end
end
def obstacle_ahead?(snake, direction, dimensions)
next_position = position_in_front_of_snake(snake, direction)
if snake.include?(next_position) or is_border?(next_position,dimensions)
return true
else
return false
end
end
def danger?(snake, direction, dimensions)
if obstacle_ahead?(snake, direction, dimensions)
return true
elsif obstacle_ahead?(move(snake,direction), direction, dimensions)
return true
else
return false
end
end

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

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

Failures:

  1) #move moves snake up/right/left/down
     Failure/Error: expect(move(snake, [0, -1])).to eq([[2, 3], [2, 4], [2, 5], [2, 4]])
       
       expected: [[2, 3], [2, 4], [2, 5], [2, 4]]
            got: [[2, 3], [2, 4], [2, 5]]
       
       (compared using ==)
     # /tmp/d20151026-15631-1ohdcx/spec.rb:8: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) #grow grows snake up/right/left/down
     Failure/Error: expect(grow(snake, [0, -1])).to eq([[2, 2], [2, 3], [2, 4], [2, 5], [2, 4]])
       
       expected: [[2, 2], [2, 3], [2, 4], [2, 5], [2, 4]]
            got: [[2, 2], [2, 3], [2, 4], [2, 5]]
       
       (compared using ==)
     # /tmp/d20151026-15631-1ohdcx/spec.rb:29: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.01522 seconds
20 examples, 2 failures

Failed examples:

rspec /tmp/d20151026-15631-1ohdcx/spec.rb:4 # #move moves snake up/right/left/down
rspec /tmp/d20151026-15631-1ohdcx/spec.rb:25 # #grow grows snake up/right/left/down

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

Пламен обнови решението на 17.10.2015 17:01 (преди над 9 години)

+def position_in_front_of_snake(snake,direction)
+ position = snake[-1].zip(direction).each{
+ |element| element[0]+=element[1]
+ }
+ position.transpose[0]
+end
+
+def x_border?(point,dimensions)
+ not (0..dimensions[:width]-1).member?(point[0])
+end
+
+def y_border?(point,dimensions)
+ not (0..dimensions[:height]-1).member?(point[1])
+end
+
+def is_border?(point, dimensions)
+ if x_border?(point,dimensions) or y_border?(point,dimensions)
+ return true
+ else
+ return false
+ end
+end
+
+def move(snake, direction)
+ (snake | [position_in_front_of_snake(snake, direction)])[1..snake.length]
+end
+
+def grow(snake, direction)
+ (snake | [position_in_front_of_snake(snake, direction)])
+end
+
+def new_food(food, snake, dimensions)
+ taken_position = food | snake
+ new_food_position = [rand(dimensions[:width]),rand(dimensions[:height])]
+ if taken_position.include?(new_food_position)
+ new_food(food, snake, dimensions)
+ else
+ new_food_position
+ end
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_position = position_in_front_of_snake(snake, direction)
+ if snake.include?(next_position) or is_border?(next_position,dimensions)
+ return true
+ else
+ return false
+ end
+end
+
+def danger?(snake, direction, dimensions)
+ if obstacle_ahead?(snake, direction, dimensions)
+ return true
+ elsif obstacle_ahead?(move(snake,direction), direction, dimensions)
+ return true
+ else
+ return false
+ end
+end