00:16 06/09/21

ICFP Programming Contest

最終結果が出ています。 サイトにはまだ出てないかなーですが今年の言語は

2D is the programming language of choice for discriminative hackers!

いやまったく。くあー。やられた。 "RML is a fine programming tool for many applications!" ってことにすればよかった。今は反省している。マジレス禁止。 その2Dで20点差を付けられるとは思わなかったのだけど なんか秘技があるんですか、とSmartassの人に聞いてみたら「手で超頑張った」 とのことでした。ちなみにUMの実装は最初C++で後でCに換えたらしいです。

あらためてご紹介

さて、最近 Haskell やら OCaml やらで人気の「関数型言語」に関する世界一の学会として、 ICFP (International Conference of Functional Programming) というのがあります。 今年の学会の内容については別の記事でそのうち書こうかと思っていますが、それはともかく、 そのICFPが主催するプログラミングコンテストがありまして、それが ICFP Programming Contest です。毎年学会の２ヶ月くらい前に開催されてます。

今年のコンテストについての感想は参戦した直後に書いたのでそちらを参照して下さい。一言で言うと、 とても楽しかったです。コンテスト終了後も挑戦したい人がいつでも挑戦できるように 問題セットは公開されていますので、まだの方は是非是非 ご挑戦を。おすすめです。

で

言わば「メイキング・オブ・ICFPコンテスト」の スピーチが学会での結果発表と同時にありまして、自分が「楽しい」と感じた理由を ちゃんと狙って作っていたんだなあと思って改めて楽しくなったので、 ここに引用しまくります。

Fun first. The contest should be fun for participants and, hopefully, for the organizers as well. The contest is ultimately a diversion; its success should be judged like ay other game or pastime. The majority of entrants should make substantal progress, and problems should be interesting, not tadeous.

とか、まあ↑は置いておくとしても、特に

Community Service. ...(略)... The contest draws significant attention from outside the functional programming community. Consequently, it should make use of the opportunity to advertise the ideas and techniques developed by programming languages research. There are a plethora of interesting problems in our field, and the contest tasks should draw from them.

ですね。関数型言語の研究＆プログラミングの世界には面白いテーマや技術が転がっていて、 せっかくICFPでやるコンテストなんだから、そういうところから面白さを取ってこれると いいね、と。

頭っからどっぷり関数型言語 な人には当たり前すぎるのかもしれないですけど、例えば最初の方に当たる 「書き換え可能 な変数なし、appendなしでリストの並び順を逆転する簡潔なコードは？」 や 「自然数を SS..SZ で表して、足し算を項書き換え系で表現」 のような問題は、慣れない人には なかなか面白い最初の一歩でした。先に進むとsubstructural logicの定理証明 をそのまんまネタにしたゲームが用意されていたり、情報流検査の典型的な 穴をついてシステムを破れ！というクラッキングステージがあったり。そもそも プログラミング言語を扱う問題が多いので、必要な作業がどれもメタプログラミング っぽくならざるを得なかったり。他にもCPS変換を応用した問題もあったのだけど 時間の都合で削除したらしく。解いてみたかった…。

といっても、毎年そういう方針で行くのも難しそうでもあり。はてさて。