一個輸出是程序本身源代碼的程序

貪食蛇 Python 非著名程序員 2019-05-28
一個輸出是程序本身源代碼的程序

最開始一個能在代碼上面玩貪吃蛇的創意

Quinesnake

吸引了我。經過研究發現,它不僅僅是一個經典的貪吃蛇遊戲,它同時是一個自產生程序。What?什麼是自產生程序?自產生程序是一個能夠將程序本身的源代碼作為輸出的程序。

Quinesnake

貪吃蛇遊戲執行時通過自己的編譯程序編譯並執行,將源代碼打印到屏幕,然後就可以在代碼上面玩貪吃蛇遊戲了。此處應該有動圖 Gif,但是微信傳不上來,點擊

小程序

查看關於自產生程序可能用文字解釋起來比較困難,我們看一下下面這個例子,打開 Python 交互式的命令行。

>>> s = "'s = ' + repr(s) + '\\nprint(' + s + ')'"
>>> print('s = ' + repr(s) + '\nprint(' + s + ')')
s = "'s = ' + repr(s) + '\\nprint(' + s + ')'"
print('s = ' + repr(s) + '\nprint(' + s + ')')

可以看到沒有任何輸入的兩行代碼,他們的輸出是源代碼自己。為什麼要強調沒有任何輸入呢,因為通過輸入輸出的話,是可以作弊的。比如如下程序的輸出也是源代碼本身,但是是通過讀取代碼文件實現的。

#!/bin/sh
cat $0

是不是迫不及待想要研究一下了?自產生程序也稱為 Quine,可以參考 http://www.nyx.net/~gthompso/quine.htm 。

項目地址:

https://github.com/taylorconor/quinesnake

今天的推薦不知道大家喜歡嗎?如果你喜歡,請在文章底部留言和點贊,以表示對我的支持,你們的留言、點贊和轉發關注是我持續更新的動力哦!

關注公眾號:非著名程序員,對話框回覆關鍵字 “1024”,免費領取 30 本經典編程書籍。

相關推薦

推薦中...