_='_=%r;print _%%_';print _%_
これは可能な限り最短のPythonクワインですか、それとももっとうまくできますか?これは、 TheQuinePageのすべてのエントリで改善されているようです。
私は些細な「空の」プログラムを数えていませんし、二重引用符のためにsusであるTerry Reedyの提出も数えていません(それが許可されている場合、「helloworld」はクワインですか?それとも「'」ですか? )。
_='_=%r;print _%%_';print _%_
これは可能な限り最短のPythonクワインですか、それとももっとうまくできますか?これは、 TheQuinePageのすべてのエントリで改善されているようです。
私は些細な「空の」プログラムを数えていませんし、二重引用符のためにsusであるTerry Reedyの提出も数えていません(それが許可されている場合、「helloworld」はクワインですか?それとも「'」ですか? )。
技術的には、最短の Python quine は空のファイルです。この些細なケースとは別に:
Python の print は自動的に改行を追加するため、クインは実際には_='_=%r;print _%%_';print _%_\n
(\n
ファイル内の単一の改行文字を表します)。
両方
print open(__file__).read()
また、インポートを伴うものはすべて有効なクインではありません。定義上、クインは入力を受け取ることができないためです。外部ファイルの読み取りは入力を受け取ると見なされるため、Quine はファイル (それ自体を含む) を読み取ることができません。
記録として、技術的に言えば、Python で可能な最短のクインは空のファイルですが、それも一種の不正行為です。
少し非リテラルなアプローチで、「最短」をステートメントの数と文字数の点で短いことを意味すると、ここにセミコロンを含まないものがあります。
print(lambda x:x+str((x,)))('print(lambda x:x+str((x,)))',)
私の考えでは、これはすべて1つの機能であり、他の機能は複数であるため、主張しています。こんな短いの持ってる人いますか?
編集:ユーザーflornquakeが次の改善を行いました( 6文字repr()
を置き換えstr()
て削るためのバックティック):
print(lambda x:x+`(x,)`)('print(lambda x:x+`(x,)`)',)
さらに短い:
print(__file__[:-3])
ファイルに名前を付けますprint(__file__[:-3]).py
( Source )
編集:実際には、
print(__file__)
名作print(__file__)
も。
Python 3.8 の時点で、新しいクワインができました! 今まで自分で作成したことがなかったので、とても誇りに思っています。からインスピレーションを得まし_='_=%r;print(_%%_)';print(_%_)
たが、単一の関数にしました (あと 2 文字のみ)。新しいwarusオペレーターを使用します。
print((_:='print((_:=%r)%%_)')%_)
私はあなたの解決策に固く反対します。
フォーマット パラメーター%
は、高度な高水準言語関数であることは間違いありません。そのような構造が許されるなら、それも許されなければならないと私は言いたいimport
。%
次に、他の高水準言語構造を導入することで、より短い Quine を構築できます (ところで、関数よりもはるかに強力ではないため、高度ではありません)。
quine.py
このようなファイルを作成し、実際に動作することを確認する Unix シェル スクリプトを次に示します。
echo 'import x' > quine.py
echo "print 'import x'" > x.py
python quine.py | cmp - quine.py; echo $?
出力0
はい、それはごまかし%
です。ごめん。