Решение на Втора задача от Андрея Костов

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

Към профила на Андрея Костов

Резултати

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

Код

def move(snake, direction)
grow(snake, direction).drop(1)
end
def grow(snake, direction)
new_snake = snake.dup
new_snake << next_element(snake.last, direction)
end
def next_element(head, direction)
[head[0] + direction[0], head[1] + direction[1]]
end
def new_food(food, snake, dimensions)
width_array = (0..(dimensions[:width] - 1)).to_a
height_array = (0..(dimensions[:height] - 1)).to_a
grid = width_array.product(height_array)
(grid - snake - food).sample
end
def obstacle_ahead?(snake, direction, dimensions)
next_element = next_element(snake.last, direction)
x_hit = next_element[0] < 0 || next_element[0] >= dimensions[:width]
y_hit = next_element[1] < 0 || next_element[1] >= dimensions[:height]
is_wall_hit = x_hit || y_hit
is_wall_hit || snake.include?(next_element)
end
def danger?(snake, direction, dimensions)
moved_snake = move(snake, direction)
obstacle_ahead?(moved_snake, direction, dimensions)
end

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

....................

Finished in 0.01461 seconds
20 examples, 0 failures

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

Андрея обнови решението на 19.10.2015 11:48 (преди над 9 години)

+def move(snake, direction)
+ grow(snake, direction).drop(1)
+end
+
+def grow(snake, direction)
+ new_snake = snake.dup
+ new_snake << next_element(snake.last, direction)
+end
+
+def next_element(head, direction)
+ [head[0] + direction[0], head[1] + direction[1]]
+end
+
+def new_food(food, snake, dimensions)
+ width_array = (0..(dimensions[:width] - 1)).to_a
+ height_array = (0..(dimensions[:height] - 1)).to_a
+ grid = width_array.product height_array
+ (grid - snake - food).sample
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_element = next_element(snake.last, direction)
+ x_hit = next_element[0] < 0 || next_element[0] >= dimensions[:width]
+ y_hit = next_element[1] < 0 || next_element[1] >= dimensions[:height]
+ is_wall_hit = x_hit || y_hit
+ is_wall_hit or snake.include? next_element
+end
+
+def danger?(snake, direction, dimensions)
+ # If we hit the wall in 2 moves, we will definitely hit it in 1, so...
+ obstacle_ahead?(grow(snake, direction), direction, dimensions)
+end

Андрея обнови решението на 19.10.2015 12:00 (преди над 9 години)

def move(snake, direction)
grow(snake, direction).drop(1)
end
def grow(snake, direction)
new_snake = snake.dup
new_snake << next_element(snake.last, direction)
end
def next_element(head, direction)
[head[0] + direction[0], head[1] + direction[1]]
end
def new_food(food, snake, dimensions)
width_array = (0..(dimensions[:width] - 1)).to_a
height_array = (0..(dimensions[:height] - 1)).to_a
- grid = width_array.product height_array
+ grid = width_array.product(height_array)
(grid - snake - food).sample
end
def obstacle_ahead?(snake, direction, dimensions)
next_element = next_element(snake.last, direction)
x_hit = next_element[0] < 0 || next_element[0] >= dimensions[:width]
y_hit = next_element[1] < 0 || next_element[1] >= dimensions[:height]
is_wall_hit = x_hit || y_hit
- is_wall_hit or snake.include? next_element
+ is_wall_hit or snake.include?(next_element)
end
def danger?(snake, direction, dimensions)
# If we hit the wall in 2 moves, we will definitely hit it in 1, so...
obstacle_ahead?(grow(snake, direction), direction, dimensions)
end

Андрея обнови решението на 19.10.2015 14:50 (преди над 9 години)

def move(snake, direction)
grow(snake, direction).drop(1)
end
def grow(snake, direction)
new_snake = snake.dup
new_snake << next_element(snake.last, direction)
end
def next_element(head, direction)
[head[0] + direction[0], head[1] + direction[1]]
end
def new_food(food, snake, dimensions)
width_array = (0..(dimensions[:width] - 1)).to_a
height_array = (0..(dimensions[:height] - 1)).to_a
grid = width_array.product(height_array)
(grid - snake - food).sample
end
def obstacle_ahead?(snake, direction, dimensions)
next_element = next_element(snake.last, direction)
x_hit = next_element[0] < 0 || next_element[0] >= dimensions[:width]
y_hit = next_element[1] < 0 || next_element[1] >= dimensions[:height]
is_wall_hit = x_hit || y_hit
- is_wall_hit or snake.include?(next_element)
+ is_wall_hit || snake.include?(next_element)
end
def danger?(snake, direction, dimensions)
- # If we hit the wall in 2 moves, we will definitely hit it in 1, so...
- obstacle_ahead?(grow(snake, direction), direction, dimensions)
+ moved_snake = move(snake, direction)
+ obstacle_ahead?(moved_snake, direction, dimensions)
end