-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
В трейсах можно исправлять маленькие неэффективности, выражая одни команды через другие. Например:
-
[LMove a b, Wait]
или[Wait, LMove a b]
можно превратить в[SMove a, SMove b]
. Экономим 4 единицы энергии; -
[SMove a, Smove b]
, где a и b находятся на одной оси, можно превратить в[Smove x']
, где x' = a>b? a-b : b-a (очевидное: не нужно куда-то лететь только для того, чтобы опять вернуться). Экономим 2*mlen(min(a, b)) единиц энергии плюс один ход (т.е. ещё 3*R³ или 30*R³ единиц энергии).-
[SMove a, SMove b]
⇒[]
если abs(a + b) == 0.
-
Тестировать это можно на дефолтных трейсах, пока не готов простой солвер.
По результатам надо:
- функцию
[Command] -> [[Command]]
, возвращающую все возможные оптимизации входной цепочки команд. (Дальше будем засовывать в симулятор и оценивать, какая из оптимизаций самая удачная).
Metadata
Metadata
Assignees
Labels
No labels