Stax , 70 байт
GG11hh::zzaapp..}}..""DDoo nnoott rreeppeeaatt yyoouurrsseellff!!""
Запустите и отладьте его на staxlang.xyz!
Стакс, к счастью, имеет встроенный ::
для каждого. Все, что мне нужно, это нажать на удвоенную строку, нажать 2 и бежать ::
. Легко, правда?
Неправильно.
Нажав на эту строку сложно. Первая кавычка может быть удвоена ..""
, что является литералом длины 2, за ."
которым следует значащая кавычка. Проблема в том, что я не вижу способа завершить строку (что необходимо, иначе дублированная версия будет напечатана) без запуска новой.
Конец программы завершает строковые литералы. Если я смогу поместить этот удвоенный литерал туда, возможно, будет хороший обходной путь. Однако, чтобы перейти куда-нибудь с конца программы, требуется G}
, поэтому, как минимум, я смотрю на это:
GG [deduplicate] }}""DDoo nnoott rreeppeeaatt yyoouurrsseellff!!""
Это не делает ... ничего. G
не начинается блок, поэтому ни один не перейдет ко второму }
. Опять же , мне нужно игнорировать один символ: ..}}
. Выполнение переходит от первого G
ко второму }
, продолжается до конца, переходит обратно ко второму G
и оттуда ко второму }
, и продолжается еще раз до конца, прежде чем возобновится в начале [deduplicate]
раздела с удвоенной строкой поверх стека.
Дедупликация проста. 11hh
нажал одиннадцать и делил его пополам вдвое, округляя оба раза и получая два, и ::
затем получал бы нам результат, который нам нужен.
GG11hh::..}}..""DDoo nnoott rreeppeeaatt yyoouurrsseellff!!""
Ой-ой. Это ничего не печатает. Здесь есть две проблемы: во-первых, это ..}
означает, что строка .}
будет на вершине стека в конце программы, а во-вторых, обычный неявный вывод Stax теперь отключен!
Худшая проблема - выход. Когда программа Stax корректно завершает работу, ничего не печатая, верхняя часть стека будет неявно печататься. Но мы ничего не напечатали ...? Ах, но у нас есть. Неопределенные строковые литералы печатаются, а не выдвигаются, и даже этих двух пустых строк (из несопоставленных "
в конце), несмотря на то, что они пустые, достаточно, чтобы отключить эту проверку. Любая печать должна быть сделана вручную.
Нам понадобится либо pp
или PP
, и, в этом случае, игнорирование первого прохода ..pp
недопустимо, так как будет напечатана строка .p
. Это означает, что нам нужен желаемый вывод либо один в стеке, либо в верхних двух вместе с пустой строкой. Последнее достигается нажатием двух пустых строк ( zz
) и вращением трех верхних элементов дважды ( aa
) перед печатью.
Как только это будет сделано, у нас будет стек в четыре строки. Пятый, .}
затем толкается, прежде чем программа завершается изящно; в этот момент отсутствие неявного вывода становится как благословением, так и проклятием, так как ничего лишнего теперь не будет напечатано!
DDDooo nnnooottt rrreeepppeeeaaattt yyyooouuurrrssseeelllfff!!!
был бы