Open10
AtCoder 環境構築
ピン留めされたアイテム
参考
Node.js のインストール
Windows の方でインストールされていない方は、下記のリンクからインストールしてください。
npm コマンドを使用するためにインストールしておく必要があります。
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"
}
}
コンテストのプロジェクトの作成
適当なディレクトリ内で,以下のようにコンテストのプロジェクトを作成します。
AtCoder Beginner Contest 106 B - 105
(atcoder) D:\GitHub-Home\AtCoder> acc new abc106 --template python
コーディングと入出力例によるテスト
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)
下記のコードを参考にさせていただきました。
コードの提出
コードの正当性を確認したら,提出に移ります.そのためには,以下のコマンドを実行します.続行するには(問題の 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
何とか、使い方が分かった。