Решение на Втора задача от Емилия Банчева

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

Към профила на Емилия Банчева

Резултати

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

Код

def move(snake, direction)
new_snake = snake.dup
new_snake.delete_at(0)
width = new_snake.last[0] + direction[0]
height = new_snake.last[1] + direction[1]
new_snake[snake.length - 1] = [width, height]
new_snake
end
def grow(snake, direction)
new_snake = snake.dup
width = new_snake.last[0] + direction[0]
height = new_snake.last[1] + direction[1]
new_snake[snake.length] = [width, height]
new_snake
end
def unavailable(food, snake) #!!!!!!!!!!!!!!!
not_available = snake.dup
for i in 0..(food.length - 1)
not_available[snake.length + i] = food[i]
end
not_available
end
def new_food(food, snake, dimensions)
not_available = unavailable(food, snake)
potential_position = [rand(dimensions[:width]), rand(dimensions[:height])]
i = 0
while i < not_available.length and not_available[i] == potential_position do
potential_position = [rand(10), rand(10)]
i = i + 1
end
potential_position
end
def obstacle_ahead?(snake, direction, dimensions)
position = [snake.last[0] + direction[0], snake.last[1] + direction[1]]
if snake.bsearch {|x| x == position} != nil
true
elsif position[0] >= dimensions[:width] or position[1] >= dimensions[:height]
true
else
false
end
end
def danger?(snake, direction, dimensions)
width = snake.last[0] + ( 2 * direction[0] )
height = snake.last[1] + ( 2 * direction[1] )
obstacle = obstacle_ahead?(snake, direction, dimensions)
if obstacle == false
new_snake = move(snake, direction)
obstacle_ahead?(new_snake, direction, dimensions)
else
true
end
end

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

.F......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-1em1ofj/solution.rb:4:in `move'
     # /tmp/d20151026-15631-1em1ofj/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) #new_food does not generate food outside of borders (height)
     Failure/Error: expect(next_food[1]).to be_between(0, dimensions[:height].pred)
       expected between?(0, 2) to return true, got false
     # /tmp/d20151026-15631-1em1ofj/spec.rb:61: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)>'

  3) #obstacle_ahead? returns true if snake body ahead
     Failure/Error: expect(
       
       expected: true
            got: false
       
       (compared using ==)
     # /tmp/d20151026-15631-1em1ofj/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.01493 seconds
20 examples, 3 failures

Failed examples:

rspec /tmp/d20151026-15631-1em1ofj/spec.rb:11 # #move moves one-position-sized snake
rspec /tmp/d20151026-15631-1em1ofj/spec.rb:60 # #new_food does not generate food outside of borders (height)
rspec /tmp/d20151026-15631-1em1ofj/spec.rb:82 # #obstacle_ahead? returns true if snake body ahead

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

Емилия обнови решението на 18.10.2015 15:54 (преди над 9 години)

+def move(snake, direction)
+ new_snake = snake.dup
+ new_snake.delete_at(0)
+ width = new_snake.last[0] + direction[0]
+ height = new_snake.last[1] + direction[1]
+ new_snake[snake.length - 1] = [width, height]
+ new_snake
+end
+
+def grow(snake, direction)
+ new_snake = snake.dup
+ width = new_snake.last[0] + direction[0]
+ height = new_snake.last[1] + direction[1]
+ new_snake[snake.length] = [width, height]
+ new_snake
+end
+
+def unavailable(food, snake) #!!!!!!!!!!!!!!!
+ not_available = snake.dup
+ for i in 0..(food.length - 1)
+ not_available[snake.length + i] = food[i]
+ end
+ not_available
+end
+
+def new_food(food, snake, dimensions)
+ not_available = unavailable(food, snake)
+ potential_position = [rand(10), rand(10)]
+ while i < not_available.length and not_available[i] == potential_position do
+ potential_position = [rand(10), rand(10)]
+ end
+ potential_position
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ position = [snake.last[0] + direction[0], snake.last[1] + direction[1]]
+ if snake.bsearch {|x| x == position} != nil
+ true
+ elsif position[0] >= dimensions[:width] or position[1] >= dimensions[:height]
+ true
+ else
+ false
+ end
+end
+
+def danger?(snake, direction, dimensions)
+ width = snake.last[0] + ( 2 * direction[0] )
+ height = snake.last[1] + ( 2 * direction[1] )
+ obstacle = obstacle_ahead?(snake, direction, dimensions)
+ if obstacle == false
+ new_snake = move(snake, direction)
+ obstacle_ahead?(new_snake, direction, dimensions)
+ else
+ true
+ end
+end

Емилия обнови решението на 18.10.2015 16:02 (преди над 9 години)

def move(snake, direction)
new_snake = snake.dup
new_snake.delete_at(0)
width = new_snake.last[0] + direction[0]
height = new_snake.last[1] + direction[1]
new_snake[snake.length - 1] = [width, height]
new_snake
end
def grow(snake, direction)
new_snake = snake.dup
width = new_snake.last[0] + direction[0]
height = new_snake.last[1] + direction[1]
new_snake[snake.length] = [width, height]
new_snake
end
def unavailable(food, snake) #!!!!!!!!!!!!!!!
not_available = snake.dup
for i in 0..(food.length - 1)
not_available[snake.length + i] = food[i]
end
not_available
end
def new_food(food, snake, dimensions)
not_available = unavailable(food, snake)
potential_position = [rand(10), rand(10)]
+ i = 0
while i < not_available.length and not_available[i] == potential_position do
potential_position = [rand(10), rand(10)]
+ i = i + 1
end
potential_position
end
def obstacle_ahead?(snake, direction, dimensions)
position = [snake.last[0] + direction[0], snake.last[1] + direction[1]]
if snake.bsearch {|x| x == position} != nil
true
elsif position[0] >= dimensions[:width] or position[1] >= dimensions[:height]
true
else
false
end
end
def danger?(snake, direction, dimensions)
width = snake.last[0] + ( 2 * direction[0] )
height = snake.last[1] + ( 2 * direction[1] )
obstacle = obstacle_ahead?(snake, direction, dimensions)
if obstacle == false
new_snake = move(snake, direction)
obstacle_ahead?(new_snake, direction, dimensions)
else
true
end
end

Емилия обнови решението на 18.10.2015 16:05 (преди над 9 години)

def move(snake, direction)
new_snake = snake.dup
new_snake.delete_at(0)
width = new_snake.last[0] + direction[0]
height = new_snake.last[1] + direction[1]
new_snake[snake.length - 1] = [width, height]
new_snake
end
def grow(snake, direction)
new_snake = snake.dup
width = new_snake.last[0] + direction[0]
height = new_snake.last[1] + direction[1]
new_snake[snake.length] = [width, height]
new_snake
end
def unavailable(food, snake) #!!!!!!!!!!!!!!!
not_available = snake.dup
for i in 0..(food.length - 1)
not_available[snake.length + i] = food[i]
end
not_available
end
def new_food(food, snake, dimensions)
not_available = unavailable(food, snake)
- potential_position = [rand(10), rand(10)]
+ potential_position = [rand(dimensions[:width]), rand(dimensions[:height])]
i = 0
while i < not_available.length and not_available[i] == potential_position do
potential_position = [rand(10), rand(10)]
i = i + 1
end
potential_position
end
def obstacle_ahead?(snake, direction, dimensions)
position = [snake.last[0] + direction[0], snake.last[1] + direction[1]]
if snake.bsearch {|x| x == position} != nil
true
elsif position[0] >= dimensions[:width] or position[1] >= dimensions[:height]
true
else
false
end
end
def danger?(snake, direction, dimensions)
width = snake.last[0] + ( 2 * direction[0] )
height = snake.last[1] + ( 2 * direction[1] )
obstacle = obstacle_ahead?(snake, direction, dimensions)
if obstacle == false
new_snake = move(snake, direction)
obstacle_ahead?(new_snake, direction, dimensions)
else
true
end
end