数ヶ月前からやっていたtype-challengesですが、先日全問解答できました。(2024年4月現在163問)
いくつか思い出に残っている問題を紹介します。
一番初見きつかった問題
中級 296 Permutation
最初見たときわけがわからなさすぎて流石に模範解答見てしまった…。番号順に解答してたんだけど、モンハン無印でいうとドスランポスの次にいきなりリオレウスと戦うみたいな難易度の上がり方だった。でもこの問題以降Unionの分配法則は普通に出てくるので案外イャンクックだったのかもしれない。
一番おもしろかった問題
中級 30958 Pascal's triangle
パスカルの三角形。普通にコード書くみたいな感じで型って書けるんだと思った。
一番勉強になった問題
上級 553 Deep object to unique
完全にUniqueである型を実装する問題。似たようなケースに幽霊型があるが、あれとは異なり相互に代入可能なためどう実現すればいいんだろうと頭を捻って色々調べた問題。
一番達成感があった問題
最上級 517 Multiply
bigint同士の掛け算を行う問題。普通にArrayで実装すれば1000までなら実現可能だけどbigintってこれできるのか…と悩んでいたところ、Sumを先に解けと書いてあったので実装後急にひらめいて解けた。気持ちいい。
一番苦しんだ問題
最上級 697 Tag
渡された型にTagをつけて、あとから追加したり検証したり外せたりできる問題。テストケースがめちゃくちゃあって、全部のケースに対応するのがしんどかった…。
HasTag<Tag<1, 'foo'> | {}, 'foo'> HasTag<Tag<0, 'foo'> | Tag<1, 'foo'>, 'foo'> HasTag<Tag<0, 'foo'> | Tag<1, 'bar'>, 'foo'>
このへんとか。2つ目だけtrueにならなくちゃいけないが、HasTagに渡される型にあまり違いがなくてむずかった。
一番解答のコード量が多かった問題
最上級 6228 JSON Parser
まさか型でJSONパーサーを書かなくちゃいけないとは…。しかも字句解析からやるようになっており、始まる前からかなりの面倒くささを感じた。実際やってみると非常に泥臭い型を書き続ける必要があり、コード量が肥大化してしまった。
完走した感想
完走した感想ですが、最初はわけがわからないことが多くて混乱したけど、慣れてきたらパズルゲーム感覚でおもしろかったです。
Permutationとかは見てしまったけど、基本的に模範解答は見ないようにして進めることができました。苦労して解けた問題の自分の解答が模範解答と似てたときは結構嬉しかったです。
TSであまり詳しくなかった機能も問題を通じて調べることで理解を深めることができたので、やってみて良かったなと思います。
正直全問解答してしまったのでtype-challengesロスなんですが、もし問題が追加されたらまたやってみようと思います。