Hello Worldを難読化させたい。1回目

風邪こじらせて死んでました。
Rubyの事は絶対触れないと決めていたのですが、なかなか更新できなくなるので、この縛りは止めます。
今回はリハビリ&気晴らしです。

Hello World

以下を読み難くしたいです。

print 'Hello World'
適当にやってみた
[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100].each{|i|
  print '%c'.send('%', i)
}
  • 文字を数字に直しただけです。

眠いので続きは明日。


追記:2010/04/05

c = "0100100001100101011011000110110001101111001000000101011101101111011100100110110001100100"
c.unpack("a8" * (c.size / 8)).each{|i| print '%c'.send('%', ('0b' + i).oct)}

難しい。。。いかに数字を見づらくするかを考えてみたけど微妙。。。
僕のレベルではコノ辺りで諦めたww
誰か見難くしてー><。

微妙な解説
c.unpack("a8" * (c.size / 8))
  • c文字列から8文字ずつ切り出す
  • aはASCII文字
    • str.unpack("a#{n}" * (str.size / n))
      • n文字ずつ切り出す
('0b' + i).oct
  • 2進数を10進数に変換する
  • octは接頭文字'0b'を付けない場合は8進数にしてくれる
    • 接頭文字次第で他の進数にも出来る
'%c'.send('%', ('0b' + i).oct)

#以下と同じ
sprintf('%c', ('0b' + i).oct)
  • Stringクラスの%メソッドに('0b' + i).octを引数として与える
  • フォーマットして文字列を返してくれる
  • 見やすい例
    • '%c' % 97 #=> "a"