Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Gothic Lock Solver

Решатель пластинчатых замков из Gothic 1 Remake. По начальному состоянию и направленной матрице зависимостей программа находит кратчайшую последовательность команд для установки всех пластин в позицию 4.

Возможности

  • от 2 до 7 пластин, по 7 позиций у каждой;
  • направленные синхронные и реверсивные зависимости;
  • атомарная блокировка недопустимого хода;
  • поиск кратчайшего решения по количеству команд;
  • вывод в консоль или JSON-файл;
  • отсутствие сторонних зависимостей.

Требования

  • Node.js 20 или новее.

Устанавливать пакеты не требуется.

Формат входного файла

{
  "state": [1, 7, 4, 2, 6],
  "links": [
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0]
  ]
}
  • state — текущие позиции пластин от 1 до 7;
  • links[i][j] = 1 — пластина j движется вместе с выбранной пластиной i;
  • links[i][j] = -1 — пластина j движется в противоположном направлении;
  • links[i][j] = 0 — зависимости нет;
  • диагональ матрицы всегда равна 0.

Влево увеличивает позицию на 1, вправо уменьшает её на 1. Цель — состояние [4, 4, ...].

Пример использования

node solve-lock.mjs examples/lock.example.json

Ответ в консоли:

Найдено команд: 4
1. Пластина 1 - влево x3
2. Пластина 2 - вправо x3
3. Пластина 4 - влево x2
4. Пластина 5 - вправо x2

Для сохранения результата в JSON:

node solve-lock.mjs examples/lock.example.json --output solution.json

Пример solution.json:

{
  "status": "solved",
  "initialState": [1, 7, 4, 2, 6],
  "targetState": [4, 4, 4, 4, 4],
  "commands": [
    {
      "plate": 1,
      "direction": "left",
      "steps": 3
    },
    {
      "plate": 2,
      "direction": "right",
      "steps": 3
    },
    {
      "plate": 4,
      "direction": "left",
      "steps": 2
    },
    {
      "plate": 5,
      "direction": "right",
      "steps": 2
    }
  ],
  "finalState": [4, 4, 4, 4, 4],
  "metrics": {
    "commands": 4,
    "divisions": 10,
    "plateSwitches": 3
  }
}

Проверка

npm test

Подробная спецификация и выполненный план реализации находятся в docs/superpowers.

Лицензия

Apache License 2.0

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages