註冊 | 登入 | 全文檢索 | 排行榜 |
» JWorld@TW
» Java 程式分享區
列印話題 寄給朋友 訂閱主題 |
本主題所含的標籤 |
作者 | [教學]自產生程式 |
caterpillar
良葛格 版主 發文: 2602 積分: 70 |
一個可以印出自己原始程式碼的程式。。。。 這東西其實不難,就是麻煩了些,要一個一個對。。。。 附件是我完成的,我還考慮了縮排、可讀性等。。。。。。我咧自找麻煩,不過這樣比較容易比對啦。。。。。不考慮可讀性的話,程式還可以簡潔一些。。。。 有興趣的,自己可以練習看看,完成後上載您的 .class 檔就可以了,可以獲得積分(雖然還是不知道積分可以作什麼。。。) 要作的話,有幾個方向: (1)想想這句話:列印以下的句子 "列印以下的句子" (2)想想有個網友說過的密宗編程。。。。 PrintSelf.class (1.76k) 良葛格學習筆記 |
作者 | Re:[題目]自產生程式 [Re:caterpillar] |
psmonkey
痞子軍團團長 發文: 332 積分: 1 |
caterpillar wrote: 不是很懂需求耶... 是自己寫一個程式,然後再把程式碼寫死在程式當中印出來? http://blog.dontcareabout.us |
作者 | Re:[題目]自產生程式 [Re:psmonkey] |
caterpillar
良葛格 版主 發文: 2602 積分: 70 |
執行我給的 class 檔案,會印出一串原始碼,這串原始碼就是 class 檔編譯前的原始碼!! 簡單的說,在沒有 .java 檔之下,要求您印出 .java 檔的內容! 良葛格學習筆記 |
作者 | Re:[題目]自產生程式 [Re:caterpillar] |
T55555
Java, Ruby, Haskell 版主 發文: 1023 積分: 24 |
實在不想打擾大家寫作的興趣... 不過對於不知道 Quine 是啥玩意的朋友可參考 : http://info.astrian.net/jargon/terms/q/quine.html (了解之後, 試著自己也寫一個吧, 不要馬上看 "Quine Home Page" link 哦) 提到 Quine, 另一有趣的挑戰是 "寫出最短小的Quine" ! BTW: (2)想想有個網友說過的密宗編程。。。。不會是指我吧 ?! ---- http://en.wikipedia.org/wiki/Quine The Quine Page: http://www.nyx.net/~gthompso/quine.htm |
作者 | Re:[題目]自產生程式 [Re:caterpillar] |
psmonkey
痞子軍團團長 發文: 332 積分: 1 |
caterpillar wrote: 熊熊發現,我把這個問題想簡單了... http://blog.dontcareabout.us |
作者 | Re:[題目]自產生程式 [Re:caterpillar] | ||
caterpillar
良葛格 版主 發文: 2602 積分: 70 |
所謂的密宗編程呢,其實就是Turing Machine的擴充型,。。。。。 其實呢我是在看計算理論時看到說,任何的程式語言都可以簡單的寫出自產生程式,想說自己用Java寫寫看。。。。。 作法其實我已經公布在我的網站上了,要寫真的不難,只是要寫的容易看懂還要考慮排版就有些麻煩就是了,我將文章貼過來好了。。。。 ===================================== 自產生程式(quine)就是要寫一個程式,這個程式的目的就是描述它自己,簡單的說,如果您寫了一個.java,編譯它後產生一個.class檔,然後您將.java檔案刪除,您的.class檔不需要.java檔,它也可以印出.java檔的內容。 根據計算理論(Computation Theorem)遞迴原理,任何的程式語言都可以簡單的寫出自產生程式。簡單指的是寫出自產生程式並不需要特別的算法,只要利用Turing Machine的擴充多帶Turing Machine的操作原理就可以寫出。 撇開計算理論這看似高深的學科不談,我們用一般的解釋來說明如何寫自產生程式,程式分做A、B兩個部分,A部分描述B部分的功能,B部分則負責將A的描述印出來,A似乎必須倚賴建構好的B,但B要有A才能列印,這看似矛盾,但其實不然,做法是將B編碼,放置在不同的字元帶上,幾個字元帶並不是重點,看程式語言的語法而定,您可能需要多幾個帶,或少幾個帶,編碼好之後,A部分完成,開始進入B部分,B部分不斷在多個字元帶上來回,並挑選出字元並顯示出來。 直接看實例會容易懂些,以下是以Java程式實作的自產生程式,我們還考慮了程式縮排與可讀性,由於Java的特性,程式看來比較容易理解,網頁排版關係,請直接下載檔案觀看: http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/PrintSelf.java 下面是以前在網路上找到的C程式,原作者名我忘了保留了,知道的請告訴我一聲,C程式可以用指標,加上一些特性,以及不考慮縮排,這使得程式寫來時更加簡短:
良葛格學習筆記 |
作者 | Re:[題目]自產生程式 [Re:caterpillar] |
aladdin
老婆不准我用兒子照片 發文: 175 積分: 3 |
以前用Apple的Basic也寫過這個問題,我記得只用了三個行號,概念也相同,但是還不是最簡單的。 Turing machine都出來了!......但老實說,Turing Machine是數學家拿來嚇人的東西。如果有人有興趣,可以試著用Turing Machine證出數學上有名的「不完備定理」。至於那有什麼用?......不知道,當年就是心生懷疑才沒有繼續念Functional Programming。 有人可能會問,這個問題有沒有什麼用處?我曾經看過一個用處就是拿來編碼javascript。由於Javascript沒有任何保護的措施(ie的encode例外),所以,有人就用同樣的概念編碼javascript的原始碼: 首先把原始的javascript給編碼成為一個字串(description),和解碼的javascript(printing)一起塞進html裡。解碼的Javascript其實就是透過document.write把這個字串重新寫回原始的樣子。如果一次覺得不夠,可以來回兩次、三次(但如果高手要看,還是擋不住的)。這種東西很多,google一下javascript encode,可以得到一堆。 最後,說一下ie的encode:那實在是microsoft才會做的事情,microsoft寫程式是為了賺錢,我們寫程式是為了讓別人驚豔。所以,我們注定貧窮,microsoft注定越來越可惡。 |
作者 | Re:[題目]自產生程式 [Re:caterpillar] |
機車轟
發文: 1 積分: 0 |
不太懂...是反編譯嗎 |
作者 | Re:[題目]自產生程式 [Re:caterpillar] |
listen
發文: 19 積分: 1 |
有看沒有懂haha~~~各位大大實在是,博學多聞 |
» JWorld@TW » Java 程式分享區 |
已讀文章 新的文章 被刪除的文章 |