Open10

AtCoder 環境構築

ドリクロドリクロ

Node.js のインストール

Windows の方でインストールされていない方は、下記のリンクからインストールしてください。
npm コマンドを使用するためにインストールしておく必要があります。
https://nodejs.org/ja/download/

conda 環境構築

# 仮想環境構築
conda create -n atcoder python=3.10
# 仮想環境に jupyter, notebook, ipykernel をインストール
conda install jupyter notebook ipykernel
# Jupyter に仮想環境の認識
ipython kernel install --user --name atcoder --display-name AtCoder
# 仮想環境アクティブ
conda activate atcoder

ツールの導入と初期設定

# online-judge-tools のインストール
pip3 install online-judge-tools

# atcoder-cli のインストール
npm install -g atcoder-cli
# インストール確認: online-judge-tools
oj --version

# インストール確認: atcoder-cli
acc -v
ドリクロドリクロ

AtCoder へのログイン

# online-judge-tools
oj login https://atcoder.jp

# atcoder-cli
acc login
# Ex. online-judge-tools
(atcoder) D:\GitHub-Home\AtCoder>oj login https://atcoder.jp
[INFO] online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.0)
[NETWORK] GET: https://atcoder.jp/contests/agc001/submit
[NETWORK] 302 Found
[FAILURE] You are not signed in.
[ERROR] Selenium is not installed. Please run $ pip3 install selenium
[WARNING] Switch to use CUI-based login instead of Selenium
[NETWORK] GET: https://atcoder.jp/contests/agc001/submit
[NETWORK] 302 Found
[NETWORK] GET: https://atcoder.jp/login
[NETWORK] 200 OK
Username: DriCro6663
Password: 
[NETWORK] POST: https://atcoder.jp/login
[NETWORK] redirected to: https://atcoder.jp/home
[NETWORK] 200 OK
[WARNING] AtCoder says: × Welcome, DriCro6663.
[INFO] Welcome,
[NETWORK] GET: https://atcoder.jp/contests/agc001/submit
[NETWORK] 200 OK
[SUCCESS] You have already signed in.
[INFO] save cookie to: C:\Users\XXX\AppData\Local\online-judge-tools\online-judge-tools\cookie.jar
# atcoder-cli
(atcoder) D:\GitHub-Home\AtCoder>acc login  
? username: DriCro6663        
? password: [hidden]
OK
ドリクロドリクロ

atcoder-cli の初期設定

# 全問題に対するディレクトリを既定で作成する
acc config default-task-choice all

# 入出力例のディレクトリの設定を online-judge-tools の設定と合わせる
acc config default-test-dirname-format test
ドリクロドリクロ

テンプレートの設定

acc config-dir

# Ex. dir
C:\Users\XXX\AppData\Roaming\atcoder-cli-nodejs\Config

このパスに移動して,作りたいテンプレートの名前をもつディレクトリを作成します.ここでは,python を例にします.この中に,テンプレート本体である main.py と,その設定を記す template.json を以下のように作成します.

各問題ごとに main.py の複製を作成し,これを提出にも用いるという趣旨です.

atcoder-cli の Config ディレクトリ

 ├ Config/
 │ └ python/
 │   └ main.py
 │   └ template.json
 │ └ config.json
 │ └ session.json
main.py
import sys
read = sys.stdin.read
N, *sample = read().split()
template.json
{
    "task":{
      "program": ["main.py"],
      "submit": "main.py"
    }
}
ドリクロドリクロ

コーディングと入出力例によるテスト

cmd 上で解く問題のディレクトリに移動します。

(atcoder) D:\GitHub-Home\AtCoder> cd abc106/b

その後、main.py をコーディングします。

main.py
#!/usr/bin/env python3

import sys
read = sys.stdin.read
N, = read().split()
N = int(N)
n_list = list(range(1, N+1, 2))

def make_divisors(n):
    lower_divisors, upper_divisors = [], []
    i = 1
    while i*i <= n:
        if n % i == 0:
            lower_divisors.append(i)
            if i != n // i:
                upper_divisors.append(n//i)
        i += 1
    return lower_divisors + upper_divisors[::-1]

def cal_divisors(n_list):
    result = 0
    for n in n_list:
        r = len(make_divisors(n))
        if r == 8:
            result += 1
    return result

result = cal_divisors(n_list)
print(result)

下記のコードを参考にさせていただきました。

https://qiita.com/LorseKudos/items/9eb560494862c8b4eb56

ドリクロドリクロ

コードの提出

コードの正当性を確認したら,提出に移ります.そのためには,以下のコマンドを実行します.続行するには(問題の ID から得た)特定の文字列を入力するように求められるため,これを入力します.すると,自動的にブラウザが起動し,提出結果が表示されます.

acc submit
# Ex. 
(atcoder) D:\GitHub-Home\AtCoder\abc106\b>acc submit
submit to: https://atcoder.jp/contests/abc106/tasks/abc106_b
[INFO] online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.0)
[INFO] code (643 byte):
#!/usr/bin/env_python3\r
\r
import_sys\r
read_=_sys.stdin.read\r
N,_=_read().split()\r
N_=_int(N)\r
n_list_=_list(range(1,_N+1,_2))\r
\r
def_make_divisors(n):\r
____lower_divisors,_upper_divisors_=_[],_[]\r
____i_=_1\r
____while_i*i_<=_n:\r
________if_n_%_i_==_0:\r
____________lower_divisors.append(i)\r
____________if_i_!=_n_//_i:\r
________________upper_divisors.append(n//i)\r
________i_+=_1\r
____return_lower_divisors_+_upper_divisors[::-1]\r
\r
def_cal_divisors(n_list):\r
____result_=_0\r
____for_n_in_n_list:\r
________r_=_len(make_divisors(n))\r
________if_r_==_8:\r
____________result_+=_1\r
____return_result\r
\r
result_=_cal_divisors(n_list)\r
print(result)(no trailing newline)
[INFO] load cookie from: C:\Users\XXX\AppData\Local\online-judge-tools\online-judge-tools\cookie.jar
[NETWORK] GET: https://atcoder.jp/contests/agc001/submit
[NETWORK] 200 OK
[INFO] You are logged in.
[NETWORK] GET: https://atcoder.jp/contests/abc106/tasks/abc106_b
[NETWORK] 200 OK
[INFO] PyPy is available for Python interpreter
[INFO] chosen language: 4006 (Python (3.8.2))
[WARNING] the problem "https://atcoder.jp/contests/abc106/tasks/abc106_b" is specified to submit, but no samples were downloaded in this directory. this may be mis-operation
Are you sure? Please type "abcb" abcb
[NETWORK] GET: https://atcoder.jp/contests/abc106/tasks/abc106_b
[NETWORK] 200 OK
[NETWORK] GET: https://atcoder.jp/contests/abc106/submit
[NETWORK] 200 OK
[NETWORK] POST: https://atcoder.jp/contests/abc106/submit
[NETWORK] redirected to: https://atcoder.jp/contests/abc106/submissions/me
[NETWORK] 200 OK
[SUCCESS] result: https://atcoder.jp/contests/abc106/submissions/33007619
[INFO] open the submission page with browser: <webbrowser.WindowsDefault object at 0x000001F1E6B55420>
[INFO] save cookie to: C:\Users\XXX\AppData\Local\online-judge-tools\online-judge-tools\cookie.jar