Подтвердить что ты не робот

Самый короткий python quine?

_='_=%r;print _%%_';print _%_

Является ли это самым коротким шансом для python quine, или это можно сделать лучше? Кажется, что это улучшает все записи на The Quine Page.

Я не считаю тривиальную "пустую" программу, и я не рассчитываю на представление Терри Риди, которое является сущим из-за двойных кавычек (если это разрешено, это "привет мир", "quine" или "" для это важно?)

4b9b3361

Ответ 1

Я просто собираюсь оставить это здесь (сохранить как exceptionQuine.py):

    File "exceptionQuine.py", line 1
        File "exceptionQuine.py", line 1
        ^
IndentationError: unexpected indent

Ответ 2

Технически самым коротким словом Python является пустой файл. Помимо этого тривиального случая:

Так как печать Python автоматически добавляет новую строку, на самом деле quine _='_=%r;print _%%_';print _%_\n (где \n представляет один символ новой строки в файле).

Ответ 3

Оба

print open(__file__).read()

и все, что связано с импортом, являются недопустимыми quines, потому что определение по умолчанию не может принимать никаких данных. Чтение внешнего файла считается принятием ввода, и, таким образом, quine не может прочитать файл - включая его.

Для записи, с технической точки зрения, кратчайший quine в python является пустым файлом, но это тоже обман.

Ответ 4

В немного нелитеральном подходе, взяв "кратчайший", чтобы означать короткий в терминах количества операторов, а также только количество символов, у меня есть один здесь, который не содержит точек с запятой.

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,)`)',)

Ответ 5

Я бы сказал:

print open(__file__).read()

Источник

Ответ 6

Еще короче:

print(__file__[:-3])

И назовите файл print(__file__[:-3]).py (Источник)

Изменить: на самом деле,

print(__file__)

с именем print(__file__) тоже работает.

Ответ 7

Я строго против вашего решения.

Форматирующий прамарметр % является окончательно слишком сложной языковой функцией высокого уровня. Если такие конструкции разрешены, я бы сказал, что 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

Да, это обман, как с помощью %. К сожалению.