do7be.exports

エッセンシャルガチ草トメィトゥ

type-challenges全問完走した感想

数ヶ月前からやっていたtype-challengesですが、先日全問解答できました。(2024年4月現在163問)

github.com

いくつか思い出に残っている問題を紹介します。

一番初見きつかった問題

中級 296 Permutation

最初見たときわけがわからなさすぎて流石に模範解答見てしまった…。番号順に解答してたんだけど、モンハン無印でいうとドスランポスの次にいきなりリオレウスと戦うみたいな難易度の上がり方だった。でもこの問題以降Unionの分配法則は普通に出てくるので案外イャンクックだったのかもしれない。

github.com

一番おもしろかった問題

中級 30958 Pascal's triangle

パスカルの三角形。普通にコード書くみたいな感じで型って書けるんだと思った。

github.com

一番勉強になった問題

上級 553 Deep object to unique

完全にUniqueである型を実装する問題。似たようなケースに幽霊型があるが、あれとは異なり相互に代入可能なためどう実現すればいいんだろうと頭を捻って色々調べた問題。

github.com

一番達成感があった問題

最上級 517 Multiply

bigint同士の掛け算を行う問題。普通にArrayで実装すれば1000までなら実現可能だけどbigintってこれできるのか…と悩んでいたところ、Sumを先に解けと書いてあったので実装後急にひらめいて解けた。気持ちいい。

github.com

一番苦しんだ問題

最上級 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に渡される型にあまり違いがなくてむずかった。

github.com

一番解答のコード量が多かった問題

最上級 6228 JSON Parser

まさか型でJSONパーサーを書かなくちゃいけないとは…。しかも字句解析からやるようになっており、始まる前からかなりの面倒くささを感じた。実際やってみると非常に泥臭い型を書き続ける必要があり、コード量が肥大化してしまった。

github.com

完走した感想

完走した感想ですが、最初はわけがわからないことが多くて混乱したけど、慣れてきたらパズルゲーム感覚でおもしろかったです。

Permutationとかは見てしまったけど、基本的に模範解答は見ないようにして進めることができました。苦労して解けた問題の自分の解答が模範解答と似てたときは結構嬉しかったです。

TSであまり詳しくなかった機能も問題を通じて調べることで理解を深めることができたので、やってみて良かったなと思います。

正直全問解答してしまったのでtype-challengesロスなんですが、もし問題が追加されたらまたやってみようと思います。