先日のKusoKoudoKaig4で優勝した。
What is KusoKoudoKaigi
KusoKoudoKaigiというのは、クソコードを扱ったプログラミングコンテストである。
これまで4回行われている。
Why I did
理由(コーディングする):
- ちょうどTypeScriptのTutorialを終えた
- また、アルゴリズムに関して基本的知識はあるが、実装というのはほとんどしたことがなかった
これらを理由に、じゃあ、ソートアルゴリズムをクソコードで実装してみるか、という気持ちになった。
参加する理由:
- 主催者の配信をよく見ているから。
What I did
kuSort
というのを作った。(GitHub Repository)
background
複数人数間で並行して同じタスクに取り掛かり、かつ、それぞれが異なる手法を使ってやる、ということは現実社会で時々見かけるけれど、それを壊れない感じでやろうとするととても大変。
では、ソートについて、並行して、異なる手法でやろうとするとどうなるか、ということに挑戦してみた。
how
線形探索で実行が終わるようなソートアルゴリズムを対象に、ソート実行ごとに使用するアルゴリズムを都度都度変更していく、というものである。
タスクを分割するわけではなく、各々が自分のアルゴリズムに従いつつ、他のアルゴリズムが実行するときには、作業をせず、自分の番になったら、自分が前までやったところから再度ソートを開始するというものである。
現実におけるタスク分割がそうであるように、コードにおいても壊れないようにするのは至難の技だし、また、実際にかかる時間も最悪のものになる。
Result
同率優勝しました。
評価者らは、このコードの意図に気づいたときは、とてもつらい感情になったようだ(狙い通り)。
感想
コードコンテストなるものには、初めて参加したので、優勝できて嬉しかった。
コードとしては複雑でなんで動くかわからないというクソコードの要件を満たしつつ、 かつ、現実のバカバカしさをいい感じに表現できたので、 私個人としても出来は評価できる。
データ構造やアルゴリズムに関して、自分は全く詳しくないので、実装でも相当苦労した。 同僚に『構造化並列プログラミング―効率良い計算を行うためのパターン』は良い本であると勧められたので、覚えておこう。