るびまゴルフ
http://jp.rubyist.net/magazine/?0024-RubiMaGolf
普通にといた
4B
6B
■
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:
エンコーディングが冗長。
国内予選
チーム名はてきとーに去年から即値だけ変えてmain=-277;で
てきとーに参加しててきとーに4問通った。
とりあえずA,B,C,Dといたー。
今年の国内予選はどれも頑張れば解けそうに思えた(E,Fはまだ深く考えてないけど)。
- A
とりあえず2重ループで普通にゴリゴリと。
- B
なんか変な素数に対するエラトステネスの篩を書いて通した。
実は書くのに手間取ってる内にCのほうが楽そうな気がしてCを先に解いた。
- C
適当にパースして実行するだけ。
適当に構文木をnewしまくって(deleteはめんどいからしなかった),構文木にevalしまくって解いた。
- D
よくある最短経路を求めるグラフ問題。
問題文を思いっきり勘違いして迷路の命令をゴールにたどり着くように書き換える問題と思ってた。
チームの一人が勘違いしてるのを教えてくれたので、さくっとただのグラフの最短経路問題に落とす。
とりあえずx,y,方向で各頂点を生成して最短経路求めるまではすぐできた。
最初適当にウォーシャル-フロイトで書いたら遅すぎて涙目に。
やっぱり9重ループ(x,y,方向のループが3つ)って駄目か。
ダイクストラに置き換えするのに時間を無駄に食う。
*1
Compound interest
nihaさんのコードを全力でパクリながら縮めてたけど逆転されたー。
むー、%1$s使うのか。
気がつかなかったー。素晴らしい。
■
わーいD2.013
D言語君の__FILE__と__LINE__は大分話が分かるやつになったらしい。
void check(T)(lazy T v,string file=__FILE__,int line = __LINE__){ if(!v)printf("Error: AssertError Failure %.*s(%d)\n",file,line); } void main(){ check(0); check(0.0); check(null); assert(0); }
これが気持ち的には正しい動作するようになるのはうれしいなぁっと。
opDotと__threadは面白いような気がしつつ使い道がまだ思いつかないや...