AtCoderのコーディング環境の設定


#AtCoderのコーディング環境を改善する
atcoder-cli, pypy3の追加を行う。

##前回の環境
[vscode, c/c++, python, docker, online judge toolsの環境構築](https://qiita.com/RubyLrving/items/84aee1bb7fedf2077b92)
dockerfileの設定が誤っていました。
そこも改善していきたいです。

##docker
###dockerfile
「apt-get -y install --no-install-recommends」の後の記述を変更。
atcoder-cliの為に、nodejs、npmをインストールします。

```dockerfile:dockerfile
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.134.0/containers/cpp/.devcontainer/base.Dockerfile
ARG VARIANT="buster"
FROM mcr.microsoft.com/vscode/devcontainers/cpp:0-${VARIANT}
# C++, Python3, PyPy3の3つの環境想定
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
    && apt-get -y install --no-install-recommends \
    python3-pip \
    pypy3 \
    nodejs \
    npm \
    && pip3 install online-judge-tools \
    && npm install -g atcoder-cli \
    && rm -rf /var/lib/apt/lists/* \
    && rm -rf ~/.cache/pip \
    && npm cache clean --force
```

###devcontainer.json
「postCreateCommand」をコメントアウト。

```json:devcontainer.json
	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": "gcc -v",
	//"postCreateCommand": "pip3 install -r requirements.txt",
```

##vscode
###launch.json
デバッグ実行で使用するa.outのパスを変更。

```json:launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "args": [
                "<input.txt"
            ],
        },
        {
            "name": "C++: Current File",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/a.out",
            "args": [
                "<input.txt"
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Build Main"
        }
    ]
}
```

###tasks.json
online judge toolsで使用するa.outの出力先を変更。

```json:tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build Main",
            "type": "shell",
            "command": "g++",
            "args": [
                "-std=c++17",
                "-g",
                "${relativeFile}",
                "-o",
                "${fileDirname}/a.out"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
```

##atcoder cli
[atcoder-cli チュートリアル](http://tatamo.81.la/blog/2018/12/07/atcoder-cli-tutorial/)
templateの設定。
まず隠しフォルダへ移動。
cppフォルダ、pyフォルダを作成。

```cmd:cmd
cd `acc config-dir`
mkdir cpp
mkdir py
```

各フォルダにtemplate.jsonとtemplateのファイルを配置。

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

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

コマンドで確認。

```cmd:cmd
 acc templates
```

##cmd
cppとpyの使い分けは、

```cmd:cmd
 acc　　add --templates cpp
 acc　　add --templates py
```

サンプルケースの実行cmdは、下記となります。
小文字でないと動作しないです。

```cmd:cmd
#C++
oj t -c -d ./tests/
#python3
oj t -c "python3 ./main.py" -d ./tests/
#pypy3
oj t -c "pypy3 ./main.py" -d ./tests/
```

##まとめ
前回のバグ修正。
online judge toolsとatcoder-cliの連携が終わりました。

[プロジェクトはgithubにあります](https://github.com/RubyLrving/AtCoder-dve)