成長観察日記

競プロとかPythonとかに関しての成長記録

atcoder cli忘備録

結論から言うと常時使用は諦めた(えー!!!)



環境



経緯

qiita.com

  • 上記を参考に、online-judge-toolsとatcoder cliを入れてある
  • accについては、入れてはあるがうまく扱えず、ojtだけでDL→提出してる
  • コンテスト出る時もいちいちtestディレクトリ消してurlコピペしてターミナルに貼ってる
  • Githubに提出コード置いてるのかっこいい!そして便利そう!!
  • あ、そうか、atcoder cli使えばコンテストごとにディレクトリ作ってくれるから、ローカルに…提出を…溜めておける……(収集癖スイッチオン)
  • とはいえ精進の横道に逸れるから、ほどほどに研究してみよう



思い立ってからの流れ

ターミナルから、VScodeでファイル開けるようにする

なんでこれやってなかったんだろう…人生捗るよ……!

  • VScodeでCommand + Shift + P(コマンドパレット開く)
  • 「Shell Command: Install 'code' command in PATH」を叩く
$open ファイル名

の代わりに

$code ファイル名

と叩くと、VScodeで開かれてよきよきのよき!!

ついでに

$code .

で、今いるディレクトリをエクスプローラーとし開くことができてよき

挙動は「フォルダを開く」と同じ



acc new コンテストid を実行しても問題が選べない問題を解決っ

$ acc config

oj-path: /usr/local/bin/oj
default-contest-dirname-format: {ContestID}
default-task-dirname-format: {tasklabel}
default-test-dirname-format: tests
default-task-choice: all
default-template: cpp

本当に何もやっていなかった。C++時代の遺産じゃん

default-task-choice: allinquire

に変更すると、選択式にできた

$ acc config default-task-choice inquire

$ acc config

oj-path: /usr/local/bin/oj
default-contest-dirname-format: {ContestID}
default-task-dirname-format: {tasklabel}
default-test-dirname-format: tests
default-task-choice: inquire
default-template: cpp



acc sで提出できない問題を解決っ

ojtで提出用に設定されているディレクトリ名がtestなので、合わせてあげる

default-test-dirname-format: teststest

$ acc config default-test-dirname-format test

$ acc config

oj-path: /usr/local/bin/oj
default-contest-dirname-format: {ContestID}
default-task-dirname-format: {tasklabel}
default-test-dirname-format: test
default-task-choice: inquire
default-template: cpp



デフォルトテンプレートをpython

$ acc config default-template python

$ acc config

oj-path: /usr/local/bin/oj
default-contest-dirname-format: {ContestID}
default-task-dirname-format: {tasklabel}
default-test-dirname-format: test
default-task-choice: inquire
default-template: python



テンプレート設定

1.accの設定ディレクトリへ移動

$ cd `acc config-dir`

2.テンプレートディレクトリ作る(default-template:に設定した名前で)

$ mkdir python

3.移動する

$ cd python

4.テンプレートファイルと、設定用ファイル作る

$ touch test.py template.json

5.template.jsonに以下を追加

{
  "task":{
    "program": ["test.py"],
    "submit": "test.py"
  }
}

これでテストケースDL時にtest.pyも自動で作られ、提出もtest.pyのものが飛ぶ

6.横着なのでtest.pyによくある入力ケース入れておく

n = int(input())
n,m = map(int,input().split())

a = list(map(int,input().split()))
li = [list(map(int, input().split())) for _ in range(n)]



エイリアス登録

ターミナルで楽したい

ちなみにojt用には以下エイリアス登録している

alias tt='oj t -c "python3 test.py"'
alias gg='oj s test.py'
alias ggg='oj s --guess-python-interpreter pypy test.py'
alias rr='rm -r test'

いつものojdでの流れは

  • oj dの手打ち後、問題URL貼り付けてテストケースDL
  • コード書く
  • ttでテスト
  • ggでpython3提出
  • ※ライブラリ使ってなくてTLEこわい時はgggでpypy3提出
  • rrでテストケースフォルダ滅す

のループである



zshrc開く

$code ~/.zshrc

以下を追加

alias ag='acc s'
alias agg='acc s test.py -- --guess-python-interpreter pypy'
alias ad='acc add'

登録しておくと

  • acc new コンテストIDを手打ち
  • cd コンテストID/aで移動
  • test.py開き、コード書く
  • ttでテスト
  • agでpython3提出
  • ※ライブラリ使ってなくてTLEこわい時はaggでpypy3提出
  • adで次の問題へ



ちなみにVScodeショートカットにて

  • 「control(^) + T」ターミナルへ移動
  • 「control(^) + E」エディタへ移動

にしてあり、これもとても楽

エイリアス登録した後はコンソールをリフレッシュ(一度閉じて再度開く)しないと、せっかく作ったエイリアスが効かないから注意だ! ※まさかのハマった



使ってみて思ったこと

ディレクトリ移動がちょいめんどい

これはaccが悪いのではなく、私がojtオンリーに慣れすぎてしまったため…
cd〜を忘れてttを叩き謎の現象が起こりがち
解決策も教えてもらったけれど、知識足りてないからもう少し先かな…!

github.com

「acord」と「aprob」を参照するとよいそうです
シェル変数については

qiita.com

neko-mac.blogspot.com

圧倒的感謝…!!



ついついtest.pyの中身を消して新しいコード書いてしまう

これはaccが悪いのではなく、私がojtオンリーに略
テスト時に気付いて「あっ」てなる
提出をローカルに溜める目的も投げ出してしまう、手癖ってこわい…



提出時確認に叩く文字4つを打ち間違える

これはaccが悪いのではなく略
なかなかブラウザ開かないな〜って思ってたらターミナルが笑顔で入力待機している
ojtだとyだけで飛ぶのがいけない(そんなところが大好き)



これからどうするか

  • 普段の精進はojtのまま
  • コンテストはacc利用

かな、と思っている

理由としては

  • 最初やりたかったACコードをローカルストックしておく(いずれGithubに上げる)は、atcoder plobremsのAPIで定期的にやればよさそう(いつも教えていただき本当に感謝です…!)

zenn.dev

  • 600問で積み重ねてきた手癖を修正する元気がない(!!)

  • とはいえコンテスト時は、問題URLをコピペるよりも以下手順の方が速そう

    • acc new abc279などの状態で待機。21:00に実行
    • ダウンロードしてる間に問題ページへ移動
    • その時くらいはcd abc279/aしてあげるわよ
    • よくある入力入ったテンプレ開かれるのは魅力的だわよ
    • たぶん提出の4文字もそこまで気にならないわよ

という、ひよこの予想

もし

「こうすると楽だよ!」

「ここ間違ってるよ!」

「こうもできるよ!」

などなどあったら、ビシバシ教えていただけると、とってもとってもうれしです…!