
不可能的程式
|
271
>> number = 9796543849500706521102980495717740021834791
=> 9796543849500706521102980495717740021834791
>> bytes_in_binary = number.to_s(2).scan(/.+?(?=.{8}*\z)/)
=> ["1110000", "01110101", "01110100", "01110011", "00100000", "00100111",
"01101000", "01100101", "01101100", "01101100", "01101111", "00100000",
"01110111", "01101111", "01110010", "01101100", "01100100", "00100111"]
>> program = bytes_in_binary.map { |string| string.to_i(2).chr }.join
=> "puts 'hello world'"
>> eval program
hello world
=> nil
當然,這個將程式編碼成大型數值的配置架構,就是能存入磁碟、透過 Internet 傳送、
送到 Ruby 直譯器(這本身就是磁碟裡的大型數值!),然後讓特定運算得以發生。
由於每個 Ruby 程式都有一個唯一的數值,因此我們可以自動產生所有可
能的程式:從產生編號 1 的程式開始, ...