精華區beta puzzle 關於我們 聯絡資訊
1 寫出一個程式,沒有輸入(包括任何的檔案輸入,使用者鍵盤輸入等等) ,輸出是這個程式本身程式碼的相反順序。 相反順序的意思是, aabbccd ef 相反就是 fe dccbbaa (最後少一個換行) 2 跟 1 類似,不過輸出的是原來的順序,但要數字加上 是藍色的,字串是紅色的,保留字是綠色,其他的是黑色。 類似在一些支援程式語法的文字編輯器。 (可以假定用HTML輸出) ※ 編輯: weijr 來自: 131.215.252.202 (04/03 14:30) > -------------------------------------------------------------------------- < 作者: clifflu (快樂是由內向外的啊) 看板: puzzle 標題: Re: 益智問題:自我重製程式碼 時間: Wed Apr 3 16:28:12 2002 ※ 引述《weijr (173/124)》之銘言: : 1 寫出一個程式,沒有輸入(包括任何的檔案輸入,使用者鍵盤輸入等等) : ,輸出是這個程式本身程式碼的相反順序。 在需要compile的程式內,有辦法自動locate出source嗎^^;;; 如果是其他的話,php可以做到 (話說回來,它算script是吧) $argv[0]就是file location 至於其他類似語言我就不清楚囉 ^^; (eg: basic, perl(?)) : 2 : 跟 1 類似,不過輸出的是原來的順序,但要數字加上 : 是藍色的,字串是紅色的,保留字是綠色,其他的是黑色。 : 類似在一些支援程式語法的文字編輯器。 : (可以假定用HTML輸出) 數字: 不在括號內,且不屬於其他identifier的東東 字串: 找括號就是了. 最多注意一下雙層括號,還有註解吧 保留字: 就每個identifier去查table囉... 反正保留字應該都不能當變數名稱吧 ^^;; (php variable有前置$) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.212.3 > -------------------------------------------------------------------------- < 作者: weijr (173/124) 看板: puzzle 標題: Re: 益智問題:自我重製程式碼 時間: Fri Apr 5 03:51:14 2002 ※ 引述《Hardboiled (火)》之銘言: : ※ 引述《weijr (173/124)》之銘言: : : 1 寫出一個程式,沒有輸入(包括任何的檔案輸入,使用者鍵盤輸入等等) : : ,輸出是這個程式本身程式碼的相反順序。 : : 2 : : 跟 1 類似,不過輸出的是原來的順序,但要數字加上 : : 是藍色的,字串是紅色的,保留字是綠色,其他的是黑色。 : : 類似在一些支援程式語法的文字編輯器。 : : (可以假定用HTML輸出) : 這個問題確定是有解的嗎? 所有這類的問題都有解。 當然,空程式碼不算。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 131.215.252.201 > -------------------------------------------------------------------------- < 作者: smartboy (爛掉了爛掉了) 看板: puzzle 標題: Re: 益智問題:自我重製程式碼 時間: Sat Apr 6 18:55:52 2002 ※ 引述《weijr (173/124)》之銘言: : 1 寫出一個程式,沒有輸入(包括任何的檔案輸入,使用者鍵盤輸入等等) : ,輸出是這個程式本身程式碼的相反順序。 #include<stdio.h> char*f="#include<stdio.h>%cchar*f=%c%s%c;%cvoid r(char *s){if(*s) r(s+1),putchar(*s);}%cint main(){char s[1000];sprintf(s,f,10,34,f,34,10,10,10); r(s); return 0;}%c"; void r(char *s){if(*s) r(s+1),putchar(*s);} int main(){char s[1000];sprintf(s,f,10,34,f,34,10,10,10); r(s); return 0;} 相信看得出來, 我是稍微修改那有有名的程式來的 完全用他的技巧, 因此沒什麼特別. : 2 : 跟 1 類似,不過輸出的是原來的順序,但要數字加上 : 是藍色的,字串是紅色的,保留字是綠色,其他的是黑色。 : 類似在一些支援程式語法的文字編輯器。 : (可以假定用HTML輸出) 用我前面寫的, 那沒什麼技巧的方法, 把 r() 改一改就行了 附上那經典的 C quine char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);} -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.142.187 > -------------------------------------------------------------------------- < 作者: weijr (173/124) 看板: puzzle 標題: Re: 益智問題:自我重製程式碼 時間: Mon Apr 8 07:30:36 2002 ※ 引述《smartboy (爛掉了爛掉了)》之銘言: : 用我前面寫的, 那沒什麼技巧的方法, 把 r() 改一改就行了 : 附上那經典的 C quine : char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);} 這樣的答案也不錯了。 當然如果沒有看過 quine的人直接做,會比較有趣, 其實這個題目不過就是kleene的fixed point theorem,稍微改寫問題, 可以換成各種版本的這個定理,難度都一樣。 (一個版本是程式碼產生器,給你r,產生問題的解答,r可以有參數或輸入) 這個問題就是從quine證明不動點定理的方式。 char*f="char*f=%c%s%c;main(){printf(f,34,f,34);}";main(){printf(f,34,f,34);} 這個問題還有許多變形,比方說同一個程式,多種語言, (也有人在寫一些同一個binary,多平台可跑的程式) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 131.215.252.202