Skip to content

Микрооптимизации трейсов #6

Description

@Minoru

В трейсах можно исправлять маленькие неэффективности, выражая одни команды через другие. Например:

  • [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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions