/?.R?y.@
\i.!yDo/
Попробуйте онлайн!
объяснение
/...@
\.../
Это просто обычный шаблон для линейного кода в обычном режиме. Если мы развернем это, действительная программа просто станет:
i.!?D.?.Ryyo
Идея здесь похожа на идею моего ответа CJam . Поскольку у Алисы нет простого способа индексирования в строки с целыми числами, проще всего воспроизвести это поведение с помощью транслитерации ( yв Алисе). Однако семантика транслитерации Алисы гораздо более общая, чем у CJam, что означает, что Алиса не просто игнорирует повторные отображения. Например, если бы мы просто хотели транслитерировать Mmm, marshmallowsв обратном направлении, это представляло бы следующий список отображений:
M -> s
m -> w
m -> o
, -> l
-> l
m -> a
a -> m
r -> h
s -> s
h -> r
m -> a
a -> m
l ->
l -> ,
o -> m
w -> m
s -> M
Обратите внимание , что у нас есть, например, m -> w, m -> o, m -> aи m -> a. CJam просто отбрасывает все, кроме первого сопоставления, но Алиса вместо этого циклически перебирает их. Таким образом, первое mбудет отображено w, второе - к oпятому снова wи так далее. В данном случае это не полезно, потому что в целом , если мы выполняем yна AAB(для некоторых строк Aи B) , как мы это делали в CJam, мы всегда просто получить Bв Алисе.
Итак, как мы вычисляем отображение, которое работает y(то есть, как мы отбрасываем повторные отображения вручную)? Конечно, с помощью другой транслитерации. :)
Источником отображения, которое мы хотим, должен быть узел ввода (т. Е. Дедуплицированный вход). Если мы применим вышеупомянутое сопоставление к кусочку, то каждый символ появляется только один раз, поэтому мы используем только первое из каждого из повторяющихся сопоставлений. Таким образом, транслитерируя нуб с помощью ввода и его реверса, мы фактически просто отбрасываем дублированные отображения. Затем мы можем использовать нуб и этот новый результат в качестве отображения для исходного ввода. Я уверен, что это имеет смысл для кого-то ...
Итак, код:
i Read input. ["Mmm, marshmallows"]
.! Store a copy on the tape.
?D Push the nub of the input. ["Mmm, marshmallows" "Mm, arshlow"]
. Duplicate. ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow"]
? Retrieve input. ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow" "Mmm, marshmallows"]
.R Push its reverse. ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow" "Mmm, marshmallows" "swollamhsram ,mmM"]
y Transliterate. ["Mmm, marshmallows" "Mm, arshlow" "swllmhsr mm"]]
y Transliterate. ["swwllwmhsrwm mms"]
o Output. []