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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions