Macから`atcoder-cli`を使った際の備忘録

N番煎じですみませんが、Macから`atcoder-cli`を使った際の備忘録です
atcoderで便利に使えるツール集どこかにまとまっていないだろうか..

## インストール

以下を参考に`atcoder-cli`をインストールすればOK
Finder-->Application-->ターミナル から実行する

[コマンドラインツールatcoder-cliを公開しました](http://tatamo.81.la/blog/2018/12/07/atcoder-cli/)
[atcoder-cli インストールガイド](http://tatamo.81.la/blog/2018/12/07/atcoder-cli-installation-guide/)
[https://github.com/Tatamo/atcoder-cli](https://github.com/Tatamo/atcoder-cli)

> ```
> pip3 install online-judge-tools
> npm install -g atcoder-cli
> ```

`selenium`も必要かもしれないので念のためインストールする

> ```
> pip3 install selenium
> ```

#### npm install時にエラー`dyld: Library not loaded:/usr/local/opt/icu4c/lib/libicui18n.64.dylib`

以下を参照して解決した
https://qiita.com/seigot/items/8fd186de797ac02f9e67

#### not found npm

```
brew install npm
```

## 使い方

`acc`コマンドは以下のように使う

#### コンテスト情報取得（例.abc251）

```sh
$ acc contest abc251
> UserId/Passを入力
abc251  Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)  https://atcoder.jp/contests/abc251
```

```sh
$ acc tasks abc251
A   Six Characters               https://atcoder.jp/contests/abc251/tasks/abc251_a
B   At Most 3 (Judge ver.)       https://atcoder.jp/contests/abc251/tasks/abc251_b
C   Poem Online Judge            https://atcoder.jp/contests/abc251/tasks/abc251_c
D   At Most 3 (Contestant ver.)  https://atcoder.jp/contests/abc251/tasks/abc251_d
E   Takahashi and Animals        https://atcoder.jp/contests/abc251/tasks/abc251_e
F   Two Spanning Trees           https://atcoder.jp/contests/abc251/tasks/abc251_f
G   Intersection of Polygons     https://atcoder.jp/contests/abc251/tasks/abc251_g
Ex  Fill Triangle                https://atcoder.jp/contests/abc251/tasks/abc251_h
```

#### ログイン

提出前にログインしておく
（UserId/PassWordを入力する）

```
oj login https://atcoder.jp/contests
```

#### テストケースなどを取得

```
acc new abc251
```

全て取得するためのオプションは(`acc new abc252 -c all`)

```
acc new abc252 -c all
```

#### テストケースを実行(`main.pyを使う場合`)

```
cd abc251/b
(main.pyを作成)
```

```
oj t -c "python3 main.py" -d ./tests/
```

必要に応じて`alias`を作成しておく

```
alias test='oj t -c "python3 ./main.py" -d ./tests/'
test
```


#### 提出

```
acc s main.py
```

`pypy`を明示的に指定する場合は以下の通り

```
acc s main.py -- --guess-python-interpreter pypy
```

以下のようなオプションを使ってもよさそう

```
acc s main.py -- --guess-python-interpreter pypy -w 0 -y
```

以下のような流れでコマンドを実行すればOK

> 1. `acc new abc251`
> 2. `cd abc251/b`          # b問題の場合
> 3. `main.py`にコードを書く
> 4. `oj t -c "python3 main.py" -d ./tests/`でテスト（必要に応じてaliasをかく）
> 5. `acc s main.py -- --guess-python-interpreter pypy`で提出

とても便利！作者の方ありがとうございます！！

## `acc new abc251`時にデフォルトで`main.py`がディレクトリに作成される状態にする

テンプレートファイルを作成する

```sh
cd `acc config-dir`
mkdir py
cd py
touch main.py template.json
```

`main.py`には例えば以下のような記述をする

```py
#!/usr/bin/env python3
import sys
sys.setrecursionlimit(4100000)
import math
def error(*args, end="\n"): print("[stderr]", *args, end=end, file=sys.stderr)
from bisect import bisect, bisect_left, bisect_right
from collections import defaultdict, deque
MOD = 998244353
INF = float("inf")
MINF = -float("inf")
```

`template.json`には例えば以下のような記述をする

```json
{
  "task":{
    "program": ["main.py"],
    "submit": "main.py"
  }
}
```

`main2.py`等も増やしたい場合は以下のように記載する

```json
{
  "task":{
    "program": ["main.py", "main2.py"],
    "submit": "main.py"
  }
}
```

テンプレートファイルを使用するように設定する

```sh
acc config default-template py  # 設定する
acc templates                   # check
```

これで、`acc new abc251`時にデフォルトで`main.py`がディレクトリに作成される状態になるはず

### error(`'/Users/seigo/Library/Application Support/online-judge-tools/cookie.jar' does not look like a Set-Cookie3 (LWP) format file Traceback (most recent call last):`)

```
[HINT] You can delete the broken cookie.jar file: /Users/seigo/Library/Application Support/online-judge-tools/cookie.jar
[ERROR] '/Users/seigo/Library/Application Support/online-judge-tools/cookie.jar' does not look like a Set-Cookie3 (LWP) format file
Traceback (most recent call last):
```

cookieが変な状態になっているかもしれないので削除する（必要に応じてスペースの前に¥をつけてエスケープする）

```
rm /Users/seigo/Library/Application\ Support/online-judge-tools/cookie.jar
```

### ソースコードのコピー

Macだと`pbcopy`が使える。

```
pbcopy < test.py
# コピー後、Command+VでペーストすればOK
```

Windowsだと`clip.exe`が使える様子

### 今後、試してみたいことなど

[AtCoderResultNotifier - AtCoderの提出結果を通知するUserScriptを作成しました](https://satanic0258.hatenablog.com/entry/2018/08/16/215949)

# 参考
[コマンドラインツールatcoder-cliを公開しました](http://tatamo.81.la/blog/2018/12/07/atcoder-cli/)
[atcoder-cli インストールガイド](http://tatamo.81.la/blog/2018/12/07/atcoder-cli-installation-guide/)
[https://github.com/Tatamo/atcoder-cli](https://github.com/Tatamo/atcoder-cli)
https://twitter.com/ryuusagi/status/1292891516025753600?s=20&t=lShW-hWVYu9m-KroQn2iQA