Hatena::ブログ(Diary)

kurimuraの日記

2008-08-24

http://shinh.skr.jp/m/?date=20080823#p01

>RubyコードRuby等価に実行可能な記号だけに変換する プログラムは書けるだろうか。

eval"実行したいコード"

を記号だけで表現すればいんじゃね?

適当に変換プログラム書いてみた。

def _(_)
	r="''<<"+_.split("").map{|_|
		_=_.ord;
		return "~-_" if _==0
		(["_"]*(_&3)+["__"]*(_>>2&3)+["___"]*(_>>4&3)+["____"]*(_>>6&3))*"+"
	}*"<<"
	"->{_=-~($$-$$);__=_<<_+_;___=_<<__;____=__<<__;%s}[]"%r
end
puts"->&_{_}[&:\"\#{#{_"method"}}\"][$$,:\"\#{#{_"eval"}}\"][#{_([*$<]*"")}]"

標準入力Rubyコードを渡すとあら不思議。記号だけのRubyコードが。

手持ちのRuby1.9処理系だと動いたけどなぜ動くのか自分でもいまいち理解していない。

適当に書いたらたぶんうまく動いている気分になった。

ToDo:

エンコーディングが冗長。

shinichiro_hshinichiro_h 2008/08/24 22:43 おおおすごい。 eval を作れれば良いと思って考えてたんですけど、 &:”#{}” は思いつきませんでした…

ku-ma-meku-ma-me 2008/08/24 23:02 おおおすごい。ぼくも思いつきませんでした。