-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Сборка
(основная идея) Форкать ботов в матрицу по XZ (5х8 например) с шагом 3, и затем её проводить "змейкой" по XZ (столбцы по Y). Матрица ботов двигается как единое целое, подобно потокам в CUDA. Боты расположены с шагом 3 - потому что бот может заполнить небольшое пространство по XZ вокруг себя, а затем шагнуть по Y и затем заполнить своё прежнее расположение. Это, вроде как, эффективнее, чем шагать каждый раз плотным строем.
На каждом шаге ботами заполняются те пиксели, что должны быть заполнены. В High гармонике (могут быть какие-то эвристики для перехода в Low).
Но! краевые условия. Иногда матрица влезать не будет, иногда шаг 3 окажется слишком велик.
Перестраивать её, что ли? Слишком сложно для одного вечера.
не реализовано
Разборка
Расположить 8 ботов вокруг фигуры, и GVoid её. Не слишком эффективно, но, возможно, эффективно по сравнению с любыми другими алгоритмами.
не реализовано
Пересборка
Разобрать, а затем собрать. Вроде как, в моей реализации должны экономиться несколько шагов между этими операциями - перехода в (0,0,0) между ними нет.
Где это всё
GenTraces.hs
data Task = Assemble {tgt :: Matrix3d}
| Disassemble {src :: Matrix3d}
| Reassemble {src :: Matrix3d, tgt :: Matrix3d}
это описания задач - 3d фигуры, которые нужно сделать/разобрать.
matrixTraceGen :: Task -> Generator ()
функция, которая по описанию задачи делает генератор, её решающий.
полностью не реализована
Отдельные шаги (что требуется сделать) прописаны в коде.
Надеюсь, разберётесь.