Stax , 11 байт (оценка 4)
'''cc'~~'dd
Запускать и отлаживать онлайн!
Для меня большая честь получить первый (в хронологическом порядке) ответ на этот вызов со счетом выше или равным 4. Может быть, счет может быть даже выше.
В Stax записан строковый литерал, состоящий из одного символа '
, '', 'c, 'd, '~
и все строковые литералы. Соответствующие команды для c
d
и ~
средств дублируют верхнюю часть основного стека, выдвигают верхнюю часть основного стека и вытаскивают верхнюю часть основного стека и перемещают в стек ввода соответственно. Для этой задачи, входной стек не влияет на выход и не важно, поэтому мы можем сказать , d
и ~
являются идентичными.
объяснение
Лучше всего разбить код на несколько частей и рассмотреть их отдельно.
Когда он не подделан, '''cc
толкает литерал '
и литерал c
в основной стек и дублирует верх, так что стек будет (снизу) c,c,'
.
Если не вмешиваться, '~~
толкает литерал, ~
а затем извлекает его (и отправляет в стек ввода), что по сути является запретом для основного стека.
Когда не вмешивается, 'dd
толкает литерал, d
а затем выталкивает его, еще один запрет на основной стек.
В конце программы, так как явный вывод не выполняется, вершина основного стека будет неявно распечатана.
Если программа работает как есть, окончательный стек остается неподвижным c,c,'
и будет выводиться c
.
Если первая часть становится ''cc
, то у нас есть литерал '
и две инструкции копирования, итоговый стек будет ',','
. Учитывая, что две другие части не работают, результат будет '
.
Если первая часть становится '''c
, результат в основном такой же, как и у нетемперованной, но результат c
не дублируется. Так что стек будет c,'
. После двух бездействующих вершина стека c
.
Таким образом, мы можем обнаружить излучение в первой части.
Вторая часть и третья часть работают точно так же. Я возьму третью часть в качестве примера.
Если подделана третья часть, то первые две части сохраняются как есть, а стек перед запуском третьей части c,c,'
Если третья часть становится 'd
, литерал d
помещается в верхнюю часть основного стека, и больше ничего не делается. Теперь вершина основного стека d
будет выводиться.
Если третья часть становится dd
, два элемента выталкиваются из основного стека, и теперь вершина стека является '
и выводится.
Следовательно, мы можем обнаружить излучение в третьей части. По той же причине мы можем обнаружить излучение во второй части.