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!!!был бы