Skip to content

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

@Minoru

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