Решение на Втора задача от Димитър Узунов

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

Към профила на Димитър Узунов

Резултати

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

Код

def snake_ahead_position(snake, direction)
snake.last.zip(direction).map do |snake_coordinate, direction_coordinate|
snake_coordinate + direction_coordinate
end
end
def grow(snake, direction)
snake + [snake_ahead_position(snake, direction)]
end
def move(snake, direction)
moved_snake = grow(snake, direction)
moved_snake.shift
moved_snake
end
def new_food(food, snake, dimensions)
occupied_positions = food + snake
xs = *(0...dimensions[:width])
ys = *(0...dimensions[:height])
all_positions = xs.product(ys)
free_positions = all_positions - occupied_positions
free_positions.sample
end
def not_in_bounds?(position, dimensions)
xs = position[0]
ys = position[1]
xs < 0 or xs >= dimensions[:width] or ys < 0 or ys >= dimensions[:height]
end
def wall_ahead?(snake, direction, dimensions)
not_in_bounds?(snake_ahead_position(snake, direction), dimensions)
end
def snake_part_ahead?(snake, direction)
snake.include? snake_ahead_position(snake, direction)
end
def obstacle_ahead?(snake, direction, dimensions)
wall_ahead?(snake, direction, dimensions) or
snake_part_ahead?(snake, direction)
end
def danger?(snake, direction, dimensions)
obstacle_ahead?(snake, direction, dimensions) or
obstacle_ahead?(move(snake, direction), direction, dimensions)
end

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

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

Finished in 0.01479 seconds
20 examples, 0 failures

История (4 версии и 6 коментара)

Димитър обнови решението на 15.10.2015 17:41 (преди над 9 години)

+def snake_ahead_position(snake, direction)
+ [snake.last, direction].transpose.map { |coordinates| coordinates.reduce(:+) }
+end
+
+def grow(snake, direction)
+ snake + [snake_ahead_position(snake, direction)]
+end
+
+def move(snake, direction)
+ moved_snake = grow(snake, direction)
+ moved_snake.shift
+ moved_snake
+end
+
+def generate_random_food(dimensions)
+ xs = rand(dimensions[:width])
+ ys = rand(dimensions[:height])
+ [xs, ys]
+end
+
+def new_food(food, snake, dimensions)
+ if (food.length + snake.length) >= dimensions[:width] * dimensions[:height]
+ return []
+ end
+
+ random_food = generate_random_food(dimensions)
+ while food.include? random_food or snake.include? random_food do
+ random_food = generate_random_food(dimensions)
+ end
+
+ random_food
+end
+
+def not_in_bounds?(position, dimensions)
+ xs = position[0]
+ ys = position[1]
+ xs < 0 or xs >= dimensions[:width] or ys < 0 or ys >= dimensions[:height]
+end
+
+def wall_ahead?(snake, direction, dimensions)
+ not_in_bounds?(snake_ahead_position(snake, direction), dimensions)
+end
+
+def snake_part_ahead?(snake, direction)
+ snake.include? snake_ahead_position(snake, direction)
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ wall_ahead?(snake, direction, dimensions) or
+ snake_part_ahead?(snake, direction)
+end
+
+def danger?(snake, direction, dimensions)
+ obstacle_ahead?(snake, direction, dimensions) or
+ obstacle_ahead?(move(snake, direction), direction, dimensions)
+end

Димитър обнови решението на 17.10.2015 16:43 (преди над 9 години)

def snake_ahead_position(snake, direction)
[snake.last, direction].transpose.map { |coordinates| coordinates.reduce(:+) }
end
def grow(snake, direction)
snake + [snake_ahead_position(snake, direction)]
end
def move(snake, direction)
moved_snake = grow(snake, direction)
moved_snake.shift
moved_snake
end
def generate_random_food(dimensions)
xs = rand(dimensions[:width])
ys = rand(dimensions[:height])
[xs, ys]
end
def new_food(food, snake, dimensions)
- if (food.length + snake.length) >= dimensions[:width] * dimensions[:height]
- return []
- end
-
random_food = generate_random_food(dimensions)
- while food.include? random_food or snake.include? random_food do
+ while food.include? random_food or snake.include? random_food
random_food = generate_random_food(dimensions)
end
random_food
end
def not_in_bounds?(position, dimensions)
xs = position[0]
ys = position[1]
xs < 0 or xs >= dimensions[:width] or ys < 0 or ys >= dimensions[:height]
end
def wall_ahead?(snake, direction, dimensions)
not_in_bounds?(snake_ahead_position(snake, direction), dimensions)
end
def snake_part_ahead?(snake, direction)
snake.include? snake_ahead_position(snake, direction)
end
def obstacle_ahead?(snake, direction, dimensions)
wall_ahead?(snake, direction, dimensions) or
snake_part_ahead?(snake, direction)
end
def danger?(snake, direction, dimensions)
obstacle_ahead?(snake, direction, dimensions) or
obstacle_ahead?(move(snake, direction), direction, dimensions)
end

Димитър обнови решението на 17.10.2015 17:27 (преди над 9 години)

def snake_ahead_position(snake, direction)
[snake.last, direction].transpose.map { |coordinates| coordinates.reduce(:+) }
end
def grow(snake, direction)
snake + [snake_ahead_position(snake, direction)]
end
def move(snake, direction)
moved_snake = grow(snake, direction)
moved_snake.shift
moved_snake
end
-def generate_random_food(dimensions)
- xs = rand(dimensions[:width])
- ys = rand(dimensions[:height])
- [xs, ys]
-end
-
def new_food(food, snake, dimensions)
- random_food = generate_random_food(dimensions)
- while food.include? random_food or snake.include? random_food
- random_food = generate_random_food(dimensions)
- end
+ occupied_positions = food + snake
- random_food
+ xs = *(0...dimensions[:width])
+ ys = *(0...dimensions[:height])
+ all_positions = xs.product(ys)
+
+ free_positions = all_positions - occupied_positions
+ free_positions.sample
end
def not_in_bounds?(position, dimensions)
xs = position[0]
ys = position[1]
xs < 0 or xs >= dimensions[:width] or ys < 0 or ys >= dimensions[:height]
end
def wall_ahead?(snake, direction, dimensions)
not_in_bounds?(snake_ahead_position(snake, direction), dimensions)
end
def snake_part_ahead?(snake, direction)
snake.include? snake_ahead_position(snake, direction)
end
def obstacle_ahead?(snake, direction, dimensions)
wall_ahead?(snake, direction, dimensions) or
snake_part_ahead?(snake, direction)
end
def danger?(snake, direction, dimensions)
obstacle_ahead?(snake, direction, dimensions) or
obstacle_ahead?(move(snake, direction), direction, dimensions)
end

Димитър обнови решението на 18.10.2015 11:01 (преди над 9 години)

def snake_ahead_position(snake, direction)
- [snake.last, direction].transpose.map { |coordinates| coordinates.reduce(:+) }
+ snake.last.zip(direction).map do |snake_coordinate, direction_coordinate|
+ snake_coordinate + direction_coordinate
+ end
end
def grow(snake, direction)
snake + [snake_ahead_position(snake, direction)]
end
def move(snake, direction)
moved_snake = grow(snake, direction)
moved_snake.shift
moved_snake
end
def new_food(food, snake, dimensions)
occupied_positions = food + snake
xs = *(0...dimensions[:width])
ys = *(0...dimensions[:height])
all_positions = xs.product(ys)
free_positions = all_positions - occupied_positions
free_positions.sample
end
def not_in_bounds?(position, dimensions)
xs = position[0]
ys = position[1]
xs < 0 or xs >= dimensions[:width] or ys < 0 or ys >= dimensions[:height]
end
def wall_ahead?(snake, direction, dimensions)
not_in_bounds?(snake_ahead_position(snake, direction), dimensions)
end
def snake_part_ahead?(snake, direction)
snake.include? snake_ahead_position(snake, direction)
end
def obstacle_ahead?(snake, direction, dimensions)
wall_ahead?(snake, direction, dimensions) or
snake_part_ahead?(snake, direction)
end
def danger?(snake, direction, dimensions)
obstacle_ahead?(snake, direction, dimensions) or
obstacle_ahead?(move(snake, direction), direction, dimensions)
end