AtCoderを始めた
興味はずっと前からあったのでAWS資格勉強の息抜きに始めた。
アルゴリズム力が必要な業務ではないので、業務にも役立つようにという観点から言語は最近よく使っているTypescriptを選択した。
Rated参加回数はまだ5回に満たず、足りないところはあるかもしれないがAtCoderのTypescript情報は少なそうなので一旦公開。
ソース
解説
VSCodeでコーディング -> AtCoderにコピペとかはやってられないので
AtCoder CLIのチュートリアルを参考にCLIでテスト・提出可能な環境を作った。
tstlなるC++のstl移植がAtCoderでも使えるらしいので、それもdependencyに入っている。(自分はまだtstl必要なレベルに達していない)
vscodeで試しているが、vscode依存の設定は入れていないはずなので他の環境でも動くはず。
実行方法
コンテストフォルダをacc new {コンテストID}
で作成。
Main.tsに回答を書いた後、各タスクフォルダで
-
npm run test
-> ローカルテスト -
npm run submit
-> 提出(確認なし)
ができるようにnpm scriptを入れている。
自分の環境ではコンテストフォルダの親フォルダでこのテンプレートの依存性をインストールしているので、タスクごとにnpm ci
しなくても即実行できるようにしている。
node管理
nodeのバージョンはローカルマシンに入っていたnodebrewがあまりメンテされなくなっているという話を耳にしたのでvoltaに乗り換えてみた。
docsもわかりやすく不便ないのでこれからも使おうと思う。(あと、Rust製で速い!)
ハマったところ
最初は適当にインストールしたnode/ts-node/typescriptを使っていたがローカルではACでもsubmitするとREになるということが起きた。null合体演算子等がエラーになっていたっぽい。
バージョン周りだろうと調べると、typescriptのバージョンは合っていたがnodeのバージョンがずれていた。
公式の環境情報のtypescriptの行にはtypescriptのバージョンしか明記されていないが、トランスパイルされたjsが動くのはjavascriptの環境なのでそちらのnodeのバージョンとローカルのnodeのバージョンも合わせる必要があった(当たり前だが)。
nodeのバージョンを合わせたら解決したので多分OK。
課題
自作ライブラリを作ったときに楽に使えるようにしたい。
テンプレートにライブラリファイルを含めておいてbundleしてjavascriptとして提出するのが簡単な気がするが、AtCoderの提出画面でbundle後のソースしか見れなくなってしまうのに若干抵抗がある。
一方で、Main.tsに全ライブラリを書き連ねるのもコードが見にくくなって微妙だが妥協すべきなのか…
いいアイデアが実現できたら追記予定。