結構みじかいQuineが書けた。
・動機
Quineについては以前の記事(ここ)を参照されたい。
Quineを書くときに厄介なのは引用符や記号などをどう処理するかだが、その記号類をエンコードして無意味化すれば楽になるのではという安直な発想。そもそも標準ライブラリをインポートすることの是非とかはさて措き、今回はBase64でやってみる。
・ソース
なんと3行しかない。(3行もある?)
import base64 as b
s="aW1wb3J0IGJhc2U2NCBhcyBiCnM9Int9IgpwcmludChiLmI2NGRlY29kZShzLmVuY29kZSgidXRmLTgiKSkuZGVjb2RlKCJ1dGYtOCIpLmZvcm1hdChzKSk="
print(b.b64decode(s.encode("utf-8")).decode("utf-8").format(s))
・解説
ソース中のエンコードされた文字列
aW1wb3J0IGJhc2U2NCBhcyBiCnM9Int9IgpwcmludChiLmI2NGRlY29kZShzLmVuY29kZSgidXRmLTgiKSkuZGVjb2RlKCJ1dGYtOCIpLmZvcm1hdChzKSk=
は、デコードすると以下のようになる。
import base64 as b
s="{}"
print(b.b64decode(s.encode("utf-8")).decode("utf-8").format(s))
format関数で、上の文字列の{}
にエンコードされた文字列が入ることで、晴れてQuineが完成する。
以上。お手軽!
【Python3】Base64を使ってQuine