PPCG уже не хватало муки уже ...
Вызов:
Ваша задача - создать программу «А0». Когда эта программа запускается без ввода, она ничего не выводит. Когда эта программа запускается со входом, она выводит «A1». Когда «А1» работает без входа, он выдает «А0». Когда «A1» запускается со входом, он выводит «A2». В значительной степени, «A (k)» будет выводить «A (k-1)» при запуске без ввода и выводить «A (k + 1)» при запуске с вводом.
подробности
Я считаю, что этот вызов достаточно прост; на самом деле нет других правил. Кстати, каждая программа должна содержать как минимум 1 байт. Вы можете предположить, что ввод будет состоять только из символов ASCII, и вы можете игнорировать пробелы, если хотите, но вы не можете указать конкретный ввод. Вывод может быть либо STDOUT, либо STDERR, но все ваши программы должны выводить в одну и ту же. Другой может также содержать текст (так что вы можете вывести на STDOUT, а затем выйти с ошибкой). Спасибо @Dennis за то, что указал на это.
Все программы должны быть на одном языке, и каждая программа должна быть уникальной среди остальных.
Оценка равна длине программы "A0". Так как это соревнование по коду в гольф, выигрывает самый низкий балл!
Ответы:
Пип , 28 байт
Попробуйте онлайн!
объяснение
Это модифицированная версия самой короткой из известных Pip Quine
V Y"`V Y`.RPy"
. Эта квинна работает, определяя строку, вставляя ее вy
переменную, а затем оценивая ее. При оценке строка принимает ответy
(таким образом, заключая значениеy
в двойные кавычки) и объединяет литерал шаблона в начале`V Y`
.Наша стратегия состоит в том, чтобы вставить
0
в программу, а затем заменить0
на,10
если был введен ввод, или заменить10
на,0
если не было ввода. (Таким образом, A ( k ) будет содержать число, состоящее из k 1, за которым следует 0.),0
и10
это удобно, потому что есть встроенные переменные (i
иt
, соответственно) с этими значениями, поэтому мы можем ссылаться на них, не используя фактические цифры ,Таким образом, вместо того
RPy
, чтобы, мы хотим,RP yRit
если был вход, иRP yRti
если нет. Мы можем объединить два случая, меняя значенияt
и,i
если есть input (I#q Sti
), то делатьRP yRti
. (Мы должны проверить#q
, по длине входного, так как входы , как0
это falsey.)Теперь нам просто нужно получить литерал
0
в коде и обработать специальный случай, когда A0 не производит вывод. Обе проблемы могут быть решены путем тестирования0+i
и возврата,u
если это не так:110+i
).i
иt
поменялись местами, иi
это 10.0+i
все еще правда.i
по-прежнему 0 и0+i
ложь. Вместо ядра quine мы выводимu
, что является встроенной переменной для nil. Печать ноль не производит вывод.источник
Python 2, 93 байта
Есть завершающий перевод строки.
Попробуйте это с помощью ввода | Попробуйте без ввода
Это изменено из моего ответа на аналогичный вопрос.
Если есть вход, то он будет увеличиваться
p
. Таким образом, в результате чего программа будетp=2+...
,p=3+...
и т.д.источник
input()
и требовать, чтобы ввод был заключен в кавычки, а не использованиеraw_input()
. Если вы хотите ввести ноль, используйте"0"
.