Google Code Jam 2011〜2013 の話
今年も(私の中では)終わってしまったわけですが。ここ数年ぶんの出来事を、
- その時々でどんな言語に興味を持っていたのか
- 各言語に対してどんな感想を持ったのか
を中心に、まとめてさらっと書いておきます。
Google Code Jam 2011
方針
- 何かのめりこめる言語を探したい
ちなみに前年の反省を活かして、触りたい言語についてはあらかじめ入出力くらいは書けるようにしておいた。
使った言語
- Go
- 当時流行ってた(?)ので。
- もっと簡単に解けるのに、無駄にゴルーチンやらチャンネルを使って解いて遊んでた。
- 悪くはないけどすごくハマったりもしなかった
- 最近「クロスプラットフォームでかけるからいいよ!」みたいな話を見かけたので、また触るかも
- Clay
- Perl6
- たまには触っておきたかったので
- やっぱり動作遅い・・・
- Factor
- たまたま Factor 座談会 - あしたのオープンソース研究所 あたりを読んで、スタック指向言語に興味を持ったので
- スタックが一つずつ消費されてくんだけど、インタラクティブシェルがあるからこの様子がわかりやすい。
- うまい人はもっと簡潔にかけてるから、たまに触って感覚を掴んでおきたい感じ。
- F#
- 「他に普段触らない言語なかったっけ?」という感じで適当に
- D
- Round 1A を Groovy で解こうと思ったら、家の PC でうまく動かなかったので、適当に入っていたやつで
- Groovy
Google Code Jam Japan 2011
使った言語
- Ruby
- CoffeeScript
- コーヒーの問題だから CoffeeScript 使っておくかー、みたいな
- submit したら答えが合わず(JavaScript の sort() が文字列でソートされてたせい)、Ruby のほうを submit したのでソースコードは残ってなかったり
- D
- ビット配列が使える気がして触ったけど、あんまり意味がなかった気がする。
Google Code Jam 2012
方針
- 前年に触った Factor がわりと面白かったので、パラダイムが違う言語を触りたい
- プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える? を解いてまじめにアルゴリズムの勉強をする
- と言いつつ初級編の真ん中くらいまでしかやってない
使った言語
- Prolog
- PowerShell
- PHP、Perl、Ruby
- 時間がなくなってきたので適当に使っただけ
- Julia
- この年の本命。
- なぜ僕らはJuliaを作ったか - 丸井綜研 を読んで期待が高まった+Windows 用のバイナリも正式ではないものの上がっていたので
- マクロが強力な言語を触るのが初めてだったので、いろいろ作って遊んでた
- そのせいでアルゴリズム寄りの練習できなかった・・・
- 若い言語だから、言語が成長していく過程を見られたり、要望を出したりバグ報告したりで楽しかった
- 「もっと深く関わりたいけど、関数型の言語やら、よく比較されてる R や Mathematica の知識を身に着けからにしよう」とか思っているうちに放置気味に。
Google Code Jam 2013
方針
- 1 つくらいはパラダイムが違う言語を触りたい、くらい?
使った言語
- GolfScript
- またスタック指向言語を触っておこうか、って感じで。
- ネタっぽい言語だけど、APL を ASCII にした感じなので、うまくハマるとかなり簡潔に書ける気がする
- とはいえインタラクティブシェルがないので、スタック指向言語の利点が活きてないような
- golfscript.rb の簡潔さも芸のうちだから仕方ないのかな
- Nemerle
- Haskell
- すごいHaskellたのしく学ぼう! を読んだ記念
- もう数か月前のことだから、いろいろ忘れてて汚いコードになってしまった・・・
- Groovy
- PHP
- Perl
- Ruby
- 時間がなかったので適当に
- Scala
- 今年の本命。
- 「仕事で Java を使うから何かしら勉強になるかなー」って思って触りはじめたけど、Scalaスケーラブルプログラミング第2版 を読み終えた頃に、ほとんど Java の勉強ならないことに気づいた
- Round 1A の A を力技で解くにはどうすればいいか調べてて、BigDecimal やら MathContext やらの知識が身についた程度?
- 関数型とオブジェクト指向がうまいこと合わさってるなーって印象。
- いざってときについ手続型っぽい処理を書いちゃうので、関数型の特訓には向かないかも。
- 関数型っぽく書くなら Haskell のほうが簡潔に書けちゃうし・・・。
-
-
- -
-
という感じでした。今後の方針としては
- 年に一回だけだといつまでたっても成長しないので、TopCoder やら AtCoder に参加したい(毎年言ってる気がする・・・)
- Haskell で解いたりして、もっと関数型っぽい考え方に詳しくなっておきたい
ってところですかね。