Фермеру заменили код кактуса — сортировка, затем n² урожай
Переписано для 1.0+. Кактусы имеют размеры 0–9. Когда каждый сосед выращивается в упорядоченном порядке, сбор урожая одного кактуса собирает весь связанный отсортированный квадрат для n² кактуса.
Порядок сортировки (определение вики)
- Растение на почве. Затраты на посадку тыквы (`get_cost(Entities.Cactus)`).
- `measure()` → size in 0…9. `measure(East)` читает соседа, не двигаясь.
- Отсортировано, если каждый выращенный сосед N/E ≥ этот кактус, а каждый выращенный сосед S/W ≤ этот кактус.
- Несортированные выращенные кактусы выглядят коричневыми; отсортированные становятся зелеными. Урожай распространяется только через полностью отсортированную → выплату соседей «n**2».
- `swap(direction)` меняет эту плитку с соседней.
Сценарий обучения: → пузырь → ожидания растений к → урожаю NE
Сортировка пузырьков легко читается, а не самая быстрая. Подождите, пока каждый кактус сможет собрать урожай, прежде чем обмениваться — сортировать незавершенные отходы плитки.
python
def go_to(x, y):
while get_pos_x() != x:
if get_pos_x() < x:
move(East)
else:
move(West)
while get_pos_y() != y:
if get_pos_y() < y:
move(North)
else:
move(South)
def plant_all():
size = get_world_size()
for y in range(size):
for x in range(size):
go_to(x, y)
if get_ground_type() != Grounds.Soil:
till()
plant(Entities.Cactus)
def wait_until_grown():
size = get_world_size()
ready = False
while not ready:
ready = True
for y in range(size):
for x in range(size):
go_to(x, y)
if get_entity_type() != Entities.Cactus or not can_harvest():
ready = False
def bubble_sort_once():
# Push larger sizes toward North/East
size = get_world_size()
swapped = False
for y in range(size):
for x in range(size):
go_to(x, y)
here = measure()
if x < size - 1:
east = measure(East)
if east != None and here > east:
swap(East)
swapped = True
here = measure()
if y < size - 1:
north = measure(North)
if north != None and here > north:
swap(North)
swapped = True
return swapped
clear()
while True:
plant_all()
wait_until_grown()
while bubble_sort_once():
pass
go_to(0, 0)
harvest() Заметки о нескольких беспилотниках/ скорости
- Сортировка пузырьков на 32×32 происходит медленно (много проходов). Более быстрые сортировки живут в коллекциях сообщества GitHub — эта страница остается читаемой.
- Дроны не делятся памятью. Параллельные сортировки требуют тщательного владения плиткой или двойной замены одного и того же края.
- Целевые факторы кактуса в таблице лидеров - 32 идеальных урожая на полной ферме n² с n = 1024.