?

Log in

No account? Create an account
 
 
05 Ноябрь 2018 @ 10:51
Opus Magnum  
Уже давно поглядывал на эту штуку, и вот наконец дошли руки. Таки да — ещё один милейший симулятор программирования. Есть небольшой, но вполне чёткий сюжет, в центре которого история юного самоуверенного алхимика в некоем позднесредневековом фентези-мире, однако основной интерес, конечно, не в этом. Основная игровая механика подаётся именно как работа алхимика (с точки зрения химии там, понятно, лютая чушь, но в таком окружении у меня это отторжения не вызвало), но суть её никакого отношения к химии в привычном виде не имеет — это своего рода "фентезийная нанотехнология", прямое манипулирование "атомами" (цветными шариками с загадочными символами), расположенными в ячейках бесконечной гексагональной сетки, при помощи инструментов необозначенной природы — "рук", способных захватывать "атомы" и перемещать их, "глифов" (особых областей из одной или нескольких ячеек, как-то влияющих на помещённые в них атомы — объединяющих их в некое подобие молекул, или, наоборот, разъединяющих, или превращающих один атом в другой и т. п.), направляющих, по которым "руки" могут перемещаться, и других. Всё это предлагается размещать в нужных ячейках, а управлять "руками" нужно, устанавливая для каждой из них последовательность команд: повернуться влево (угол, понятно, один — 60 градусов) — взять "молекулу" — повернуться вправо — дважды повернуть то, что держит, — отпустить. В каждой задаче есть "ввод" (ячейки, где лежат исходные реагенты — "атомы" или "молекулы", которым можно забрать "руками", после чего там сразу появляется новый экземпляр) и "вывод" (ячейки, куда нужно помещать продукты реакции, после чего они исчезают). Собственно задача состоит в том, чтобы наладить потенциально бесконечный процесс превращения исходников в продукты.

Opus Magnum не так похож в деталях на реальное программирования, как нежно мной любимая Human Resource Machine, но — видимо, просто из-за сходства в природе решаемых задач — в процессе игры я вижу и, главное, чувствую много знакомого. Типовые решения, "костыли", специфическая красота, острое ощущение нехватки некоторых возможностей (здесь это прежде всего вызов именованных процедур и объекты, пожалуй), определённые жертвы, на которые сознательно идёшь ради переиспользования кода, функциональное разделение... В некотором смысле здесь приходится самому изобретать программирование — не само явление, это-то дано сразу, а набор практик обращения с этим явлением.

Ниже показаны три решения одной задачи (да, игра умеет сохранять анимацию готового решения) — извлечения свинца из глёта. Каждое оптимизировано по одному из трёх возможных параметров.


Самое дешёвое решение. Каждый элемент, кроме источника реагентов и приёмников продуктов, стоит сколько-то очков, и вот здесь затрачен абсолютный минимум.



Компактное решение. Учитываются и изначально чем-то занятые ячейки, и те, в которых или над которыми что-то оказывается в процессе. Не уверен на все сто, что здесь невозможно ужаться ещё на одну клетку, но способа найти не могу.



Эффективное решение. Здесь продукты получаются быстрее, чем в двух других, но это явно не максимум возможного (да и игра показывает, что по этому параметру другие игроки добились большего). Совершенствовать дальше пока лень =)


Жаль, пожалуй, что нет единого параметра, некоей общей эффективности, который бы учитывал все три базовые оптимизации. Думаю, я представляю, как его можно было бы вычислять.
 
 
 
karchamal: pic#125568736karchamal on Ноябрь, 5, 2018 10:33 (UTC)
Что-то прям даже захотелось поиграть. А почему в эффективном решении есть отдельная секция для разбора h?
Бакки Бугвинbackswimmer on Ноябрь, 5, 2018 16:43 (UTC)
мм... для эффективности, собственно ) так можно одновременно разбирать сразу две молекулы. я делал решение с одной подобной секцией, где больше разъединяющих глифов и отделяются сразу и h, и θ — получилось медленнее. но тут тоже есть что улучшить — как минимум, думаю, можно что-то получить, если налепить дополнительных глифов в промежуточных между тремя основными позициях. ограничивает, правда, то, что эмиттеров и коллекторов не сколько захочешь, а сколько дадут — чаще всего по одной штуке каждого вида.