Решение на Втора задача от Ивайло Чернев

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

Към профила на Ивайло Чернев

Резултати

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

Код

def move(snake, direction)
new_snake = snake.clone
new_snake.delete_at 0
new_snake << [snake[-1][0] + direction[0], snake[-1][1] + direction[1]]
end
def grow(snake, direction)
new_snake = move snake, direction
new_snake.insert 0, snake[0]
end
def new_food(food, snake, dimensions)
xs = Array(0..dimensions[:width]-1)
ys = Array(0..dimensions[:height]-1)
table = xs.product ys
table = table - snake - food
index = rand(0..table.length - 1)
table[index]
end
def obstacle_ahead?(snake, direction, dimensions)
next_state = move snake, direction
xs = next_state[-1][0]
ys = next_state[-1][1]
last_x = dimensions[:width] - 1
last_y = dimensions[:height] - 1
!xs.between?(0, last_x) || !ys.between?(0, last_y)
end
def danger?(snake, direction, dimensions)
next_state = move snake, direction
obstacle_ahead? next_state, direction, dimensions
end

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

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

Failures:

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

Failed examples:

rspec /tmp/d20151026-15631-xr8wa4/spec.rb:82 # #obstacle_ahead? returns true if snake body ahead

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

Ивайло обнови решението на 18.10.2015 02:43 (преди над 9 години)

+def move(snake, direction)
+ new_snake = snake.clone
+ new_snake.delete_at 0
+ new_snake << [snake[-1][0] + direction[0], snake[-1][1] + direction[1]]
+end
+
+def grow(snake, direction)
+ new_snake = move snake, direction
+ new_snake.insert 0, snake[0]
+end
+
+def new_food(food, snake, dimensions)
+ xs = Array(0..dimensions[:width])
+ ys = Array(0..dimensions[:height])
+ table = xs.product ys
+ table = table - snake - food
+ index = rand(0..table.length - 1)
+ table[index]
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_state = move snake, direction
+ xs = next_state[-1][0]
+ ys = next_state[-1][1]
+ dimensions[:width] = dimensions[:width] - 1
+ dimensions[:height] = dimensions[:height] - 1
+ !xs.between?(0, dimensions[:width]) || !ys.between?(0, dimensions[:height])
+end
+
+def danger?(snake, direction, dimensions)
+ next_state = move snake, direction
+ obstacle_ahead? next_state, direction, dimensions
+end

Ивайло обнови решението на 18.10.2015 02:49 (преди над 9 години)

def move(snake, direction)
new_snake = snake.clone
new_snake.delete_at 0
new_snake << [snake[-1][0] + direction[0], snake[-1][1] + direction[1]]
end
def grow(snake, direction)
new_snake = move snake, direction
new_snake.insert 0, snake[0]
end
def new_food(food, snake, dimensions)
- xs = Array(0..dimensions[:width])
- ys = Array(0..dimensions[:height])
+ xs = Array(0..dimensions[:width]-1)
+ ys = Array(0..dimensions[:height]-1)
table = xs.product ys
table = table - snake - food
index = rand(0..table.length - 1)
table[index]
end
def obstacle_ahead?(snake, direction, dimensions)
next_state = move snake, direction
xs = next_state[-1][0]
ys = next_state[-1][1]
- dimensions[:width] = dimensions[:width] - 1
- dimensions[:height] = dimensions[:height] - 1
- !xs.between?(0, dimensions[:width]) || !ys.between?(0, dimensions[:height])
+ last_x = dimensions[:width] - 1
+ last_y = dimensions[:height] - 1
+ !xs.between?(0, last_x) || !ys.between?(0, last_y)
end
def danger?(snake, direction, dimensions)
next_state = move snake, direction
obstacle_ahead? next_state, direction, dimensions
end