TRICK 2015
口頭でも言いましたが、今回は落選したものでも良いできだなーというのが多かったです。前回が価値が無いというほどでは全然ないんですけど、しかしちょっと差があったのは事実かなと。
僕が高得点をつけたものについて
コラッツ
https://github.com/tric/trick2015/blob/master/ksk_1/entry.rb
すごい。これ見れば見るほどスルメみたいに味が増えていくというか、しかもその味やばいっていうか、この短さのコードで、いやここまで考えさせられるとは、っていう。圧巻でした。
がまあ普通に考えてこれの評価がそろわないのは予想できます。2位でも十分評価されていたと思われます。
ドラゴン曲線
https://github.com/tric/trick2015/blob/master/monae/entry.rb
これは初見の印象はかなり悪かった。単なる Quine てのは、もう相当なことをしない限りは僕の中ではマイナスだと言って良い。
ただコード読んでみると、なるほどなー的な感じでコードがふくらんでいっていたと思う。いやでも忘れつつある。
数独
https://github.com/tric/trick2015/blob/master/eregon/entry.rb
これも最初のイメージはイマイチ。しかしよく読むとよくできてる…ていうかデータの埋め込み方かっこいいよね。こうやると決めればテクニックが必要な領域ではないけど、しかしこの埋め込み方決めたのは感心する。
Fiber は正直解く部分ちゃんと読めてないからよくわかってないけど、それでなくても最高に近い点数あげるから文句言うな、的な感覚で読むの放棄した。。
文字数にエンコードされてるプログラム
https://github.com/tric/trick2015/blob/master/usak/entry.rb
いや本当にこういう一発ネタ好きで。コメントした通り中盤はこうグダグダ感あるな、って気付いたのと、あれこれそんな難しいわけでもないよね、てあたりで点数を落としてしまった。最初はあまり迷いなく10点つけてた…がさすがにおかしい気がして少し落とさせてもらった感じで。
いやーでもこれ好きだな。ここまでのやつと比較してみると、コラッツは発想も実装も僕の枠を越えてて、ドラゴン曲線と数独は、発想はわかるなって感じで、実装はがんばったなーて感じ。このコードは発想がすごくわかりやすいが僕の発想の範囲にないのが好きで。
http://www.garbagecollect.jp/~usa/d/201512b.html#id20151211_P1_6
に書かれてますが、 ; の行は僕も味わいがあって良いなとか思ってました。その前後がちょっと残念かなあとは。
円周率覚え歌
https://github.com/tric/trick2015/blob/master/kinaba/entry.rb
これなー。これが優勝なのは文句ない。ただ前回と違って満場一致ではなかった。それだけ今回レベル上がったって話もあると思う。
これ見てて、なんかぱっと見ムダに長くね、とかいうのが第一感で。しかしそういうなら自分でやれ感もあり。まぁいなばさん円周率計算のゴルフ最短から結構長いんだよな。
もちろん TRICK はゴルフコンテストではないので、このコードの素晴らしさにケチをつけているのは長いというのが直接の苦情ではなく。例えば普通 foo = foo ていう文があったら、えっこれムダじゃない?て思うのと同様の感覚で、なーんかムダな式多くない?ていう感覚がある気がする、て感覚があって。
ただこれ自分で同じコード書こうと少しやってみて、あっこれ大変だって気付いた感じでした。でまあ総じてかなり高い点数に。 srand かっこいいしな。
markdown
https://github.com/tric/trick2015/blob/master/yoshi-taka/entry.rb
いやーこれいいでしょ。あの手この手でパース通してる感が、僕の一発ネタをきちんと昇華してる感じがしてて良かった。特に好きなのは TRICK!!! の !!! で、これビックリマーク1つだとパースエラーなんですよねえ。
でも僕これ強くは押してないんですが、理由としてストーリーがよくわからないというのがあって。。 if not for path in ENV って実はうまいこと言ったりしてるんだろうか、僕には単に ruby の式にしか見えなくて。。。
SAT
https://github.com/tric/trick2015/blob/master/ksk_2/entry.rb
あっ、なるほど、すごいですね。というやつ。これは本当にすさまじいので、ぐぐって SAT て regexp で解けるんだと理解するまでは、感動的でした。ぐぐって出てくる URL は正直に remarks に書いてあって、まあ好印象…がまぁ既存研究かーという感あって。
それでこのへんに。
エスケープ
https://github.com/tric/trick2015/blob/master/ko1_2/entry.rb
これ、すごい好きなんだけど技術的に別にたいしたもんでもないんで、このエントリに書いてる他のやつより1点少なくつけたんだけど、でも個人的には好き。
おまけ
気にいったコードはだいたい上記のやつで、全て入賞したのは良かったなーとか思ってました。おまけで自分のコード
https://github.com/tric/trick2015/blob/master/shinh/entry.rb
バラバラのパーツで任意コード書くってやつ。これ、前回の TRICK から考えてたネタでした。前回の時は %I{} がまだ Ruby に無かったか、気付いてなかったか、それか気付いてたけど3文字連続は避けたいと思ってたか、いずれかの理由で TRICK 2013 には出しませんでした。
eval を %I{ #{ ?e + ?v + ?a + ?l } } で作ってるわけですが、これは遠藤本に載っているテクニックだったということで…全く気付いてなかったのは何故かっていうと、あまりマジメに読んでなかった章の、基礎的なことが並んでるところにしれっと書いてあったから、じゃないかなあと。
あとまあ remarks に書きましたが、整形手法も結構気にいってます。短いので。
a=File.read("remarks.markdown").split puts a.pack("A15"*a.size).unpack("A61"*19)
もうひとつおまけ
落選した作品に言及するのはどうかと思うんですが、まあいいだろってことで。落選したやつに Yusuke Endoh て書いてある物があって、しかもやることもコードも比較的まあ、どうでもいいかな…的な。はたしてこれは本人なのか、 mame 騙りなのか考えましたが、どちらのケースでも Yusuke Endoh を名乗って有利になることはちょっと考えずらい。本人が捨てエントリに自分の名前を冠することで、他に Yusuke Endoh がいないとアピールしている…などなど困惑しました。
まあなんにせよこんなもん最低点でいいやろ、と容赦なく死んでもらいました。そしたら本人だったびっくり。
まとめ
投稿してくれた方々、ありがとうございました。前回以上に読むの大変でしたが、大変楽しかった。前回に引き続き、技巧的なものも一発ネタ的なのもほどよく混じった感じだったのが良かったかなーと思います。