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