KEMURI生成プログラム
# str2kemuri.rb class String2Kemuri def initialize @basic_table = Hash.new @table = Array.new(256) make_basic_table make_table end def make_basic_table #"Hello, world!"の各文字 @basic_table[32] = %q{`^^^^^"^^'^"^^'^"^^'^"^^} @basic_table [?!] = %q{`^^^^^^^^^^^"^^} @basic_table [?,] = %q{`^^^^"^^'^"^^'^"^^'^"^^"'^"^^} @basic_table [?H] = %q{`'^"^^'^"^^'^"^^'^"^^'^"^^'^"^^} @basic_table [?d] = %q{`^^^^^^^^^^"^''^"^^} @basic_table [?e] = %q{`"^^'^"^^'^"^^'^"^^'^"^^'^"^^"'^"^^} @basic_table [?l] = %q{`^^^^^^^^^"^''^"^^"'^"^^} @basic_table [?o] = %q{`^^^^^^^"^^'^"^^'^"^^} @basic_table [?r] = %q{`^^^^^^^^"^''^"^^'^"^^} @basic_table [?w] = %q{`^^^^^^"^^'^"^^'^"^^"'^"^^} # '0' @basic_table [0] = @basic_table [?H] + @basic_table [?H] + "^" # xor 255 @basic_table .each do |k,v| @basic_table [k^255] ||= v + "~" end @basic_table .each do |k,v| @table[k] = v end end def make_table # 基本文字を4つ使えば、0..256まで埋まるみたい cs = @basic_table.keys cs.each do |i| cs.each do |j| cs.each do |k| cs.each do |l| x = i ^ j ^ k ^ l @table[x] ||= compile([i,j,k,l]) end end end end end def compile(ary) # 無駄な文字を省く # HdHe => de ary.sort! for i in 1..(ary.size) if ary[i-1] == ary[i] ary[i-1] = nil ary[i] = nil end end ary.delete_if{|e| e==nil || e == 0 # a ^ 0 == a } # KEMURIに変換する ary.map!{|ch| @basic_table[ch] } ary.join("") + ("^" * (ary.size-1)) end def to_kemuri(str) str.unpack("C*").map{|c| @table[c]}.reverse.join("") + "|" end end if $0 == __FILE__ s2k = String2Kemuri.new print s2k.to_kemuri(ARGF.read) end
2007年03月03日(土) 14:25:20 Modified by mahalkita