Aceto , 19 17 байт не конкурирует
Новая версия (17 байт):
Эта новая версия принимает символы по одному и лучше всего выполняется с -F
опцией. Он работает аналогично, но не идентично предыдущему решению:
>,
Op0
p|1u
,ip^
Старый ответ (19 байт):
(Не конкурирует, потому что мне пришлось исправить две ошибки в интерпретаторе)
|p1u
iOp<
|!`X
rd!r
Это первый ответ Aceto, который подчеркивает, на что он способен относительно хорошо, я бы сказал. «Списки» - это входные потоки, с одним вводом на строку, «1» для истины и «0» для «ложь», с пустой строкой, обозначающей конец списка.
Программы Aceto работают по кривой Гильберта, начиная слева внизу и заканчивая справа внизу. Во-первых, мы читаем r
строку, d
уточняем и отрицаем ее ( !
), превращая пустые строки в True, а все остальное в False. Затем есть условное горизонтальное зеркало ( |
): если верхний элемент в стеке верен, зеркально отразите по горизонтали. Это происходит, когда строка была пустой. Если мы делаем зеркалирование, мы приземляемся на того X
, который убивает переводчика.
В противном случае мы конвертируем оставшуюся копию в стеке в i
nteger и делаем другое условное горизонтальное зеркало: на этот раз, потому что 1 истинно, а 0 ложно, мы зеркально отображаем, если видим (первое) истинное значение. Если мы не зеркально p
отображаем (так что мы увидели 0), мы набираем то, что находится в стеке (поскольку стек пуст, ноль), и переходим к O
началу кривой, откуда мы начали, снова запуская весь процесс.
В противном случае, когда мы увидели 1, мы отражаемся и приземляемся на u
, что меняет направление, в котором мы движемся по кривой Гильберта. 1p
печатает 1, и теперь мы продолжаем то же самое, O
что и если бы мы видели 0, но, поскольку мы находимся в «обратном режиме», наш источник находится внизу справа , поэтому мы прыгаем туда.
Теперь мы читаем r
еще одну строку и отрицаем ее. Если строка была пустой, и, следовательно, верхний элемент стека является правдивым, не`
произойдет следующая команда ( ), что заставит нас выйти.X
В противном случае (если строка не была пустой), мы действительно спасаясь от X
и игнорировать его. В этом случае мы идем влево ( <
), p
rint 0 (потому что стек пуст) и возвращаемся к O
rigin.