Ответ 1
Я просто собираюсь оставить это здесь (сохранить как exceptionQuine.py):
File "exceptionQuine.py", line 1
File "exceptionQuine.py", line 1
^
IndentationError: unexpected indent
_='_=%r;print _%%_';print _%_
Является ли это самым коротким шансом для python quine, или это можно сделать лучше? Кажется, что это улучшает все записи на The Quine Page.
Я не считаю тривиальную "пустую" программу, и я не рассчитываю на представление Терри Риди, которое является сущим из-за двойных кавычек (если это разрешено, это "привет мир", "quine" или "" для это важно?)
Я просто собираюсь оставить это здесь (сохранить как exceptionQuine.py):
File "exceptionQuine.py", line 1
File "exceptionQuine.py", line 1
^
IndentationError: unexpected indent
Технически самым коротким словом Python является пустой файл. Помимо этого тривиального случая:
Так как печать Python автоматически добавляет новую строку, на самом деле quine _='_=%r;print _%%_';print _%_\n
(где \n
представляет один символ новой строки в файле).
Оба
print open(__file__).read()
и все, что связано с импортом, являются недопустимыми quines, потому что определение по умолчанию не может принимать никаких данных. Чтение внешнего файла считается принятием ввода, и, таким образом, quine не может прочитать файл - включая его.
Для записи, с технической точки зрения, кратчайший quine в python является пустым файлом, но это тоже обман.
В немного нелитеральном подходе, взяв "кратчайший", чтобы означать короткий в терминах количества операторов, а также только количество символов, у меня есть один здесь, который не содержит точек с запятой.
print(lambda x:x+str((x,)))('print(lambda x:x+str((x,)))',)
В моем сознании это утверждает, потому что это все одна функция, тогда как другие - несколько. Кто-нибудь имеет более короткое подобное?
Изменить: Пользователь flornquake сделал следующее улучшение (backticks для repr()
заменить str()
и сбрить 6 символов ):
print(lambda x:x+`(x,)`)('print(lambda x:x+`(x,)`)',)
Я бы сказал:
print open(__file__).read()
Еще короче:
print(__file__[:-3])
И назовите файл print(__file__[:-3]).py
(Источник)
Изменить: на самом деле,
print(__file__)
с именем print(__file__)
тоже работает.
Я строго против вашего решения.
Форматирующий прамарметр %
является окончательно слишком сложной языковой функцией высокого уровня. Если такие конструкции разрешены, я бы сказал, что import
также должен быть разрешен. Затем я могу построить более короткий Quine, представив какую-то другую конструкцию языка высокого уровня (которая, BTW намного менее мощна, чем функция %
, поэтому она менее продвинута):
Вот оболочка Unix script, создающая такой файл quine.py
, и проверка его действительно работает:
echo 'import x' > quine.py
echo "print 'import x'" > x.py
python quine.py | cmp - quine.py; echo $?
выходы 0
Да, это обман, как с помощью %
. К сожалению.