Hexagony, 37 35 34 31
10"+}(=${";<$<1}42/.0@_=<>\;>(_
Expanded:
1 0 " +
} ( = $ {
" ; < $ < 1
} 4 2 / . 0 @
_ = < > \ ;
> ( _ . .
. . . .
Попробуйте онлайн
В основном просто есть два цикла for, отсчитывающих от десяти до нуля, распечатывающих звездочку на внутреннем цикле и новую строку на внешнем цикле.
Объяснение:
Эта программа состоит из трех основных частей: инициализация памяти, цикл, который печатает десять звездочек, и цикл, который печатает новую строку. Цикл, который печатает новую строку, также содержит цикл, который печатает звездочки.
Во-первых, код выполняет полностью линейную инициализацию памяти. Код работает как: 10"+}42
. Это устанавливает память о соседних краях, чтобы выглядеть так:
10 \ / 10
|
42
42 - код ASCII для символа звездочки, и эти два десятка будут использоваться в качестве наших счетчиков циклов. Следует отметить, что указатель памяти в данный момент направлен в сторону от двух десятков, поэтому перемещение назад поставит нас на одну из десятков.
Далее мы запускаем цикл печати звездочки. Линейно, код выглядит следующим образом : ;".._(
. Это распечатывает звездочку, перемещает указатель памяти назад и влево и, наконец, уменьшает значение там. После одной итерации память будет выглядеть так:
10 \ / 9
|
42
Затем мы попадаем в условие цикла: крайний левый край >
. Если край, который мы только что уменьшили, все еще является положительным, мы отскакиваем и выполняем a, {
чтобы переместить нас обратно на 42. Затем мы нажимаем a $
и возвращаемся к началу цикла печати ;
, пропуская <
. Если значение было равно нулю, мы отправляемся в другой цикл.
Внешний цикл начинается с обнуления недавно обнуленного края памяти до десяти (это 10
в коде, идущем на юго-запад). Затем мы печатаем эту десятку как символ ASCII, который является новой строкой. Далее мы переходим на другой край памяти и уменьшаем его , {(
а затем выполнить то , что составляет кучу Без операционное: =${_=
. Теперь, после одной итерации этого цикла, память будет выглядеть так:
9 \ / 10
|
42
На этот раз память обращена наружу от края, сохраняя девять на диаграмме выше. Затем мы выполняем, <
который действует как условие цикла для внешнего цикла. Если значение было ненулевым, мы отскакиваем от некоторых зеркал, затем начинаем выполнять значимые инструкции снова после входа в вершину шестиугольника на "
движущемся юго-западе. Это заставляет нас двигаться назад и влево, снова на 42, но лицом внутрь. Затем =
переворачивает наше направление, правильно сбрасывая состояние, чтобы снова начать внутренний цикл. Если край был установлен в ноль, указатель инструкции отправляется в небольшое приключение, которое ничего не делает, пока не выйдет из программы.
Приключение начинается с указания указателя, отправляющегося на северо-восток, опасно игнорируя безопасность основных направлений. Он смело игнорирует зеркало, которое выровнено с его направлением (/
), и героически выпрыгивает из батута ($
полностью уклоняясь от смертельной ловушки другого, совершенно идентичного батута. Взглянув на пустоту неинициализированных ребер шестиугольника, указатель, не колеблюсь ни на минуту, добавляет два пустых ребра, с которыми он сталкивается, устанавливая текущее ребро в их сумму: 0 (ребро было фактически нулевым заранее, но указатель любит считаю, что это было довольно важно). Поскольку край равен нулю, указатель делает разворот налево на развилке дороги, идя в таинственный лес (из шестиугольников). Там он оказывается дезориентированным, двигаясь вперед и назад и вперед, пока не окажется в том же месте в памяти, что и начался. Думая, что проблема должна заключаться в том, что текущий фронт был установлен в ноль в прошлый раз, указатель смело устанавливает1
в текущий край. Затем благородный указатель исследует другой путь, проложенный с ... ловушкой! Текущее ребро уменьшается и возвращается в ноль! Указатель, ошеломленный шокирующим поворотом событий, возвращается в ловушку, устанавливая текущее ребро в отрицательное. Разъяренный, указатель пытается вернуться в сравнительно приятный лес, только чтобы заметить, что, поскольку текущее ребро не является положительным, пути еще раз сместились, и указатель обнаружил, что идет в пещеру. Под пещерой я подразумеваю пасть гигантского шестиугольного червя. Беспомощный, указатель проклинает сексуальность своим умирающим дыханием. Также программа заканчивается.