昨日の続き
昨日のcheckするだけのものは数秒で終わるのですが、これは手元で
compileに2分くらい
かかります。
速度に関して改善の余地があるのかどうか?はわかりません。
改善したら、問題が簡単なら数秒で終わるようになりました。
いくつかtweetしましたが、compilerの限界なのでは?と思ったけれど、頑張った結果、いくつかは自分のミスでした。例えば
- 割り算するべき箇所で余りを取っていた
scala.compiletime.ops.any.==
は、singleton同士ではないと比較不可能。例えば(1, 2)
と(3, 4)
といったTupleのまま比較不可能なので、自前でsingletonになるまで必要に応じて再帰的に分解しつつdeepなequalsを実装する必要がある(つらい)- 複雑になり過ぎると、上記のようなミスをした場合に、単に無限にcompile時間がかかるか、謎に変な場所でエラーになるだけに見えて、エラーの原因が超分かりにくい
- 途中にdebug logとか入れられないし
といった感じです。自分にとっては、やっと面白い難易度になってきた、という感じですね(?)
ただ、アルゴリズムはすごく単純なものなので、簡単な問題しか解けないです。
また、昨日以上に細かい部分が雑ですが、とにかく完成した現状を貼り付けておきます。 (後でリファクタするかどうか?未定)