atcoder.jp 上のコンテストに『ふくろうさんチーム』のビジュアライザー担当として出ました。
昨年末にチームメンバーを募集していて、ビジュアライザーのみでも、とのことだったので好奇心で手を上げてみました。 ヒューリスティクスコンテストに馴染みが無いので、そもそもビジュアライザーって何、という感じでしたが、解法がいい感じだといい感じの動きをするので気分がいいやつだな…というざっくりとした理解をしました。
コンテスト中に作ったのはこちら(動く)。 Heuristic Contest Visualizer
開始から2時間経過くらいで最低限動くものをデプロイして、残りはチームメイトの考察をふんふん聞きながらクエリ文(直前の操作)を表示させたり、壁を表示させるべく奮闘したりしていました(だめだった)。壁を表示できていたら異常テストケースを確認することができてよかっただろうに…チームメイトには心の目で見てもらいました。感謝しかない。
ちなみに、ビジュアライザー担当として手を上げたのに、予選一週間前までろくすっぽビジュアライザーを作れない状態でした。本当にすみません。そこから毎朝4時半に起きて2時間半のビジュアライザ筋トレをし、なんとかなりました。
ビジュアライザーを作るにあたっては以下の記事とテンプレートにとてもお世話になりました。本当にありがとうございます。
github.com yunix-kyopro.hatenablog.com zenn.dev
普段の業務や個人開発では、TypeScript(React, Vue)しか触らないので、Rust!?WebAssembly!?という感じで混迷を極めていましたが、本当になんとかなってよかった。 ちゃんと作れた…という安心感と、あとは普段さわらない技術を学べたことで好奇心が満たされてとても満足です。もっとRustと仲良くなりたいという気持ち。
そんなこんなで、チームメイトの健闘によって21位になり、決勝に進むことができるそうです。がんばりたい。
ところで、SVGを1万個描画するとブラウザがそこそこ重かったり、そもそもSVGだと微妙に表示の融通が利かないなど色々と不便したので、ビジュアライズ部分の構成を Wasm + Rust + WebGL にしたいなあとか考えています。 シェーダーの素振りをやっていくつもりですが、なんもわからんになったらThree.jsに逃げようかな。三次元がきても安心。