カテゴリー
最近更新したページ
最新コメント
KEMURI生成プログラム by check it out
java アルゴリズム 第1回 by stunning seo guys
FrontPage by check it out
にせScheme (07/02/01版) by awesome things!
Brainfu*k置き場 by awesome things!
sawa::memo by Cheap Canada Goose Jackets clearance sale & Winter Parka outlet shop
java GUI 第3回 by tips about seo
sawa::memo by watch for this

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




スマートフォン版で見る