Пытаясь выучить гексагонию
Я пытаюсь обернуть голову вокруг языка программирования Hexagony. Я посмотрел несколько примеров программ и попытался написать простую программу для чтения ввода и печати Hey [input]!
, Вот что у меня есть.
, < . . C $
. . { . # . ;
. . . # . . 2 '
. . . . # C 3 < .
. # . # . . * . ; .
. E . . E . ; . . > /
= . . . } y . . 3 .
. . . . ; . . 3 .
. . . e $ . ; .
. . ; . . @ .
. H . . > &
Если нет ввода, он печатает Hey !
как и ожидалось. Но с любым вводом он печатает EE!
, Я почти уверен, что моя проблема в том, что я не понимаю, как указатели памяти работают на шестиугольной сетке. Я предполагаю, что в моем коде есть проблемы с перезаписью значений, если на входе слишком много строк, но меня это пока не касается. Я запутался относительно точных правил, для которых край выбран с {
а также }
команды и как направление MP зависит от этого.
Если бы кто-нибудь мог дать мне более четкое объяснение того, как работает память, как МП ориентируется со сдвигом, это было бы полезно
1 ответ
Вот схема того, как работают команды перемещения памяти:
Указатель памяти (MP) имеет позицию (которая является краем сетки памяти) и ориентацию вдоль этого края. На диаграмме начальная позиция MP отмечена красной стрелкой, поэтому в настоящее время она указывает на север.
Команды перемещения МР всегда относительно текущей позиции и ориентации МП. Я прокомментировал четыре смежных ребра, основываясь на том, какая команда доставит вас туда. Так {
перемещает MP вперед и влево, и '
например, перемещает его назад и вправо.
Чтобы выяснить его новую ориентацию, вы можете думать об этом движении как о вращении MP на 60 градусов вокруг одного из соседних шестиугольников. Таким образом, в зависимости от выбранной команды, MP будет указывать в следующих направлениях для приведенной выше диаграммы:
Cmd Orientation
{ north west
} north east
" north east
' north west
Кроме того, на случай, если это является частью путаницы, помните, что сетка памяти не зависит от исходной сетки (поэтому это не края сетки, содержащей команды... это просто отдельная бесконечная шестиугольная сетка),
Что касается вашей реальной программы, то, похоже, у нее больше проблем, чем у разметки памяти. Больше всего я не уверен, что эти #
делают там: #
переключается на один из 6 IP-адресов на основе текущего значения памяти по модулю 6. Предполагая, что ваш ввод произвольный, это в основном переключает вас на случайный IP-адрес, что, вероятно, не то, что вы хотите.
Я настоятельно рекомендую попробовать EsotericIDE Тимви (который я также использовал для создания диаграммы выше), которая позволяет вам пройтись по программе и включает в себя визуализацию сетки памяти.
Я также рад помочь вам в этом чате SE, если у вас есть какие-либо дополнительные вопросы о языке.