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

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

Към профила на Виктор Божилов

Резултати

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

Код

dimensions = {width: 10, height: 10}
snake = [[4, 4], [4, 5], [4, 6]]
direction = [1, 0]
food = [[8, 8]]
def move (snake, direction)
new_head = [
snake[-1][0] + direction[0] ,
snake[-1][1] + direction[1] ,
]
new_snake=snake+new_head
new_snake.slice(1..-1)
end
def grow (snake, direction)
new_head = [
snake[-1][0] + direction[0] ,
snake[-1][1] + direction[1] ,
]
new_snake=snake+new_head
end
def wall_ahead? (snake, direction, dimensions)
if snake[-1][0] + direction[0] == dimensions[:width]
return true
end
if snake[-1][1] + direction[1] == dimensions[:height]
return true
end
return false
end
def object_ahead? (snake, direction, dimensions)
if(wall_ahead? snake, direction , dimensions) then return true
end
#if(hit_myself? snake, direction) then return true
#end
return false
end
def danger? (snake, direction, dimensions)
if (object_ahead? snake, direction, dimensions)
return true
end
if(object_ahead? snake, [2 * direction[0], 2 * direction[1]] , dimensions )
return true
end
return false
end

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

FF.FF.FFFFFFFFFF....

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, 6]])
       
       expected: [[2, 3], [2, 4], [2, 5], [2, 6]]
            got: [[2, 3], [2, 4], [2, 5], 2, 6]
       
       (compared using ==)
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:5: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) #move moves one-position-sized snake
     Failure/Error: expect(move([[2, 2]], [-1, 0])).to eq([[1, 2]])
       
       expected: [[1, 2]]
            got: [1, 2]
       
       (compared using ==)
     # /tmp/d20151026-15631-1o3ywt8/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)>'

  3) #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, 6]])
       
       expected: [[2, 2], [2, 3], [2, 4], [2, 5], [2, 6]]
            got: [[2, 2], [2, 3], [2, 4], [2, 5], 2, 6]
       
       (compared using ==)
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:26: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)>'

  4) #grow grows one-position-sized snake
     Failure/Error: expect(grow([[2, 2]], [-1, 0])).to eq([[2, 2], [1, 2]])
       
       expected: [[2, 2], [1, 2]]
            got: [[2, 2], 1, 2]
       
       (compared using ==)
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:33: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)>'

  5) #new_food generates food on empty position
     Failure/Error: let(:next_food) { new_food(food, snake, dimensions) }
     NoMethodError:
       undefined method `new_food' for #<RSpec::Core::ExampleGroup::Nested_3:0x007f9449a2b838>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:47:in `block (2 levels) in <top (required)>'
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:53: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)>'

  6) #new_food does not generate food outside of borders (width)
     Failure/Error: let(:next_food) { new_food(food, snake, dimensions) }
     NoMethodError:
       undefined method `new_food' for #<RSpec::Core::ExampleGroup::Nested_3:0x007f9449a284d0>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:47:in `block (2 levels) in <top (required)>'
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:57: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)>'

  7) #new_food does not generate food outside of borders (height)
     Failure/Error: let(:next_food) { new_food(food, snake, dimensions) }
     NoMethodError:
       undefined method `new_food' for #<RSpec::Core::ExampleGroup::Nested_3:0x007f9449a12310>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:47:in `block (2 levels) in <top (required)>'
     # /tmp/d20151026-15631-1o3ywt8/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)>'

  8) #new_food does not generate food on position where the snake is
     Failure/Error: let(:next_food) { new_food(food, snake, dimensions) }
     NoMethodError:
       undefined method `new_food' for #<RSpec::Core::ExampleGroup::Nested_3:0x007f9449a0c370>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:47:in `block (2 levels) in <top (required)>'
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:65: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)>'

  9) #new_food does not generate food on position where food is already present
     Failure/Error: let(:next_food) { new_food(food, snake, dimensions) }
     NoMethodError:
       undefined method `new_food' for #<RSpec::Core::ExampleGroup::Nested_3:0x007f9449a093a0>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:47:in `block (2 levels) in <top (required)>'
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:69: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)>'

  10) #new_food does not mutate the given arguments
     Failure/Error: expect { new_food(food, snake, dimensions) }.not_to change { snake }
     NoMethodError:
       undefined method `new_food' for #<RSpec::Core::ExampleGroup::Nested_3:0x007f94499e4ed8>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:73:in `block (3 levels) in <top (required)>'
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:73: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)>'

  11) #obstacle_ahead? returns true if snake body ahead
     Failure/Error: obstacle_ahead?([[5, 5], [4, 5], [4, 4], [5, 4]], [0, 1], dimensions)
     NoMethodError:
       undefined method `obstacle_ahead?' for #<RSpec::Core::ExampleGroup::Nested_4:0x007f94499c95e8>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:84: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)>'

  12) #obstacle_ahead? returns true if wall ahead
     Failure/Error: expect(obstacle_ahead?([[8, 8], [8, 9]], [0, 1], dimensions)).to eq true
     NoMethodError:
       undefined method `obstacle_ahead?' for #<RSpec::Core::ExampleGroup::Nested_4:0x007f94499c5d08>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:89: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)>'

  13) #obstacle_ahead? returns false if no obstacle ahead
     Failure/Error: expect(obstacle_ahead?([[3, 4], [3, 5]], [0, 1], dimensions)).to eq false
     NoMethodError:
       undefined method `obstacle_ahead?' for #<RSpec::Core::ExampleGroup::Nested_4:0x007f94499bf020>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:93: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)>'

  14) #obstacle_ahead? does not mutate the given arguments
     Failure/Error: expect { obstacle_ahead?(snake, direction, dimensions) }.not_to change { snake }
     NoMethodError:
       undefined method `obstacle_ahead?' for #<RSpec::Core::ExampleGroup::Nested_4:0x007f94499b8ab8>
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:99:in `block (3 levels) in <top (required)>'
     # /tmp/d20151026-15631-1o3ywt8/spec.rb:99: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.01077 seconds
20 examples, 14 failures

Failed examples:

rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:4 # #move moves snake up/right/left/down
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:11 # #move moves one-position-sized snake
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:25 # #grow grows snake up/right/left/down
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:32 # #grow grows one-position-sized snake
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:49 # #new_food generates food on empty position
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:56 # #new_food does not generate food outside of borders (width)
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:60 # #new_food does not generate food outside of borders (height)
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:64 # #new_food does not generate food on position where the snake is
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:68 # #new_food does not generate food on position where food is already present
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:72 # #new_food does not mutate the given arguments
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:82 # #obstacle_ahead? returns true if snake body ahead
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:88 # #obstacle_ahead? returns true if wall ahead
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:92 # #obstacle_ahead? returns false if no obstacle ahead
rspec /tmp/d20151026-15631-1o3ywt8/spec.rb:96 # #obstacle_ahead? does not mutate the given arguments

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

Виктор обнови решението на 19.10.2015 00:50 (преди над 9 години)

+dimensions = {width: 10, height: 10}
+snake = [[4, 4], [4, 5], [4, 6]]
+direction = [1, 0]
+food = [[8, 8]]
+def move (snake, direction)
+ new_head = [
+ snake[-1][0] + direction[0] ,
+ snake[-1][1] + direction[1] ,
+ ]
+ new_snake=snake+new_head
+ new_snake.slice(1..-1)
+end
+
+def grow (snake, direction)
+ new_head = [
+ snake[-1][0] + direction[0] ,
+ snake[-1][1] + direction[1] ,
+ ]
+ new_snake=snake+new_head
+end
+
+
+def wall_ahead? (snake, direction, dimensions)
+ if snake[-1][0] + direction[0] == dimensions[:width]
+ return true
+ end
+ if snake[-1][1] + direction[1] == dimensions[:height]
+ return true
+ end
+ return false
+end
+
+def object_ahead? (snake, direction, dimensions)
+ if(wall_ahead? snake, direction , dimensions) then return true
+ end
+ #if(hit_myself? snake, direction) then return true
+ #end
+ return false
+end
+
+def danger? (snake, direction, dimensions)
+ if (object_ahead? snake, direction, dimensions)
+ return true
+ end
+
+ if(object_ahead? snake, [2 * direction[0], 2 * direction[1]] , dimensions )
+ return true
+ end
+ return false
+end