Comment programmez-vous lors de la résolution des problèmes AtCoder? En gros, je pense que vous allez écrire et soumettre le programme avec l'éditeur de l'environnement local.
Lorsque vous résolvez un problème, ces demandes surviennent.
«Tout est fait! Je veux tester avec les valeurs d'entrée répertoriées dans le texte de la question! ――La première valeur d'entrée était correcte, mais qu'en est-il de la deuxième et de la troisième? C'est ennuyeux de vérifier un par un ...
AtCoder Tools est un outil CLI qui répond à ces besoins. Cet article vous présentera de l'installation à l'utilisation de base.
_Terminé. Je n'expliquerai que l'utilisation minimale. _
#Installation
$ pip install atcoder-tools
#Téléchargement par lots des valeurs d'entrée / sortie et génération de code à partir du modèle
##abs est l'identifiant du concours
## --Spécifiez le chemin à télécharger dans l'espace de travail
## --Spécifiez la langue du code généré automatiquement par lang
## --without-Télécharger sans se connecter avec login
$ atcoder-tools gen abs --workspace=path/to/atcoder-workspace/ --lang=python --without-login
#Exécutez des tests ensemble pour plusieurs valeurs d'entrée
$ cd path/to/program-location
$ atcoder-tools test
#Soumission du programme
$ atcoder-tools submit
environnement | version | Source d'installation |
---|---|---|
AtCoder Tools | 1.1.7.1 | pipenv(pip) |
pipenv | 2020.8.13 | pip |
pip | 20.1.1 (python 3.8) | pyenv |
Python | 3.8.5 | pyenv |
pyenv | 1.2.20-3-g58c776a1 | anyenv |
anyenv | 1.1.1 | Homebrew |
Homebrew | 2.4.9 | n/a |
macOS | 10.15.6 | n/a |
AtCoder Tools est un outil écrit en Python. Il peut être installé à l'aide de pip. J'aimerais installer à partir de Homebrew, mais comme il n'y a pas de formule disponible, il n'y a actuellement qu'une méthode d'installation utilisant pip.
$ pip install atcoder-tools
Ou
Pipfile
[[source]]
url = 'https://pypi.python.org/simple'
verify_ssl = true
name = 'pypi'
[requires]
python_version = '3.8'
[packages]
atcoder-tools = '*'
$ pip install pipenv #Si pipenv n'est pas installé
$ pipenv install --system
AtCoder Tools semble être garanti de fonctionner uniquement avec Python 3.5 et supérieur. Par conséquent, vous devez utiliser la série pip 3 (série Python 3) lors de l'installation.
Vous devez remplacer «pip» par «pip3», «pip3.8», etc. si nécessaire. Exécutez la commande suivante pour confirmer à l'avance qu'il s'agit de la série Python 3.
#Si le résultat est la série Python 2, utilisez pip3 etc.
$ pip --version
pip 20.1.1 from /Users/noraworld/.anyenv/envs/pyenv/versions/3.8.5/lib/python3.8/site-packages/pip (python 3.8)
Vous devrez peut-être également redémarrer le shell après l'installation.
$ exec -l $SHELL
Vous pouvez copier les valeurs d'entrée / sortie répertoriées dans l'énoncé du problème et les coller dans un fichier ... mais il est difficile de le faire chaque fois que vous résolvez le problème.
Avec AtCoder Tools, vous pouvez télécharger toutes les valeurs d'entrée / sortie de toutes les questions du concours à la fois avec la commande suivante.
Par exemple, pour télécharger toutes les valeurs d'entrée / sortie des 11 questions de AtCoder Beginners Selection, ce qui est dit être la première chose à faire après l'enregistrement avec AtCoder: Exécutez la commande de.
$ atcoder-tools gen abs --workspace=path/to/atcoder-workspace/ --lang=python --without-login
Ensuite, il sera téléchargé sous chemin / vers / atcoder-workspace /
comme ceci.
<détails> Le fichier ʻin_ * .txt Utilisez la sous-commande Les «ab» suivants sont le nom du concours (identifiant du concours). C'est la partie de Spécifiez le chemin de téléchargement avec l'option Spécifiez le langage de programmation avec Si vous ajoutez En résumé, ça ressemble à ça. Le problème "Je veux faire de - sans connexion de la commande gen la commande par défaut # 99" a été soulevé, donc peut-être une version future Dans, Il peut être ennuyeux de spécifier des options telles que «--workspace» et «--lang» à chaque fois. AtCoder Tools vous permet d'écrire des paramètres dans Définissez le chemin spécifié par Je me suis demandé si je pouvais omettre À propos, les valeurs d'entrée et de sortie sont toutes définies. Vous voulez donner la valeur d'entrée au programme et comparer le résultat de sortie avec la valeur de sortie correcte. Si vous le faites honnêtement sans utiliser AtCoder Tools, cela se produira. ...... C'est ennuyeux, n'est-ce pas? Avec AtCoder Tools, vous pouvez tout vérifier à la fois avec une seule commande. C'est très pratique! Le programme testé par cette commande est un fichier avec l'autorisation d'exécution. En d'autres termes, si vous définissez shebang dans votre programme et lui donnez l'autorisation d'exécution, vous pouvez tester des programmes dans des langages que AtCoder Tools ne prend pas en charge (par exemple, Ruby)! Que la langue soit prise en charge ou non, c'est simplement le code généré à partir du modèle, et il semble qu'il n'y ait pas de restrictions particulières sur la langue dans laquelle le test est exécuté. Si vous souhaitez exécuter le test à partir d'un répertoire autre que le répertoire courant, vous pouvez le faire en ajoutant l'option De plus, le programme (fichier avec autorisation d'exécution) est automatiquement détecté, mais s'il y a plusieurs fichiers, l'un d'eux est automatiquement sélectionné. Si vous avez plusieurs programmes et que vous souhaitez spécifier un programme spécifique, je pense qu'il serait préférable d'ajouter l'option Je ne l'ai pas encore utilisé, donc je l'écris par intuition. Je suis désolé si j'ai fait une erreur: arc: Eh bien, le test a réussi et finalement soumis! Vous pouvez copier et soumettre le programme, mais AtCoder Tools dispose d'une fonction de soumission de programme. Il facilite la soumission de programmes à partir de la CLI. Seulement ça. Vous devrez probablement vous connecter (ou bien sûr avec la commande Veuillez consulter README. Il est écrit en japonais, donc même ceux qui ne sont pas bons en anglais peuvent le faire. Je suis toujours chezCoder (pro de la compétition) depuis 2 jours [^ 1], mais je me suis vite rendu compte qu'il serait plus pratique d'avoir cet outil, je l'ai donc installé à la hâte. [^ 1]: Parce que c'est "2 jours", c'est une "personne non liée" ^ 2. Depuis que je résous le problème avec Ruby jusqu'à présent, il y a des problèmes tels que la génération de code n'est pas compatible avec Ruby et les options et paramètres ne sont pas disponibles dans certains endroits, mais ceux-ci seront progressivement améliorés. (Au fait, je pensais envoyer un PR pour Ruby, mais j'étais frustré parce que je suis nouveau sur Python et que je n'ai presque aucune expérience de contribution aux bibliothèques ... w)..
├── ABC049C
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── in_3.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ ├── out_2.txt
│ └── out_3.txt
├── ABC081A
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ └── out_2.txt
├── ABC081B
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── in_3.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ ├── out_2.txt
│ └── out_3.txt
├── ABC083B
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── in_3.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ ├── out_2.txt
│ └── out_3.txt
├── ABC085B
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── in_3.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ ├── out_2.txt
│ └── out_3.txt
├── ABC085C
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── in_3.txt
│ ├── in_4.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ ├── out_2.txt
│ ├── out_3.txt
│ └── out_4.txt
├── ABC086A
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ └── out_2.txt
├── ABC086C
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── in_3.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ ├── out_2.txt
│ └── out_3.txt
├── ABC087B
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── in_3.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ ├── out_2.txt
│ └── out_3.txt
├── ABC088B
│ ├── in_1.txt
│ ├── in_2.txt
│ ├── in_3.txt
│ ├── main.py
│ ├── metadata.json
│ ├── out_1.txt
│ ├── out_2.txt
│ └── out_3.txt
└── PracticeA
├── in_1.txt
├── in_2.txt
├── main.py
├── metadata.json
├── out_1.txt
└── out_2.txt
est la valeur d'entrée et ʻout_ * .txt
est la valeur de sortie. main.py
est le code généré automatiquement à partir du modèle.Explication sur les arguments
gen
.<CONTEST_ID> '' de
https://atcoder.jp/contests/ <CONTEST_ID> `.--workspace
.--lang
. Le code (qui semble analyser le format d'entrée, etc.) est automatiquement généré à partir du modèle de la langue spécifiée ici. Veuillez consulter ici pour les langues prises en charge. Il semble que mon Ruby préféré ne soit pas encore pris en charge. Pardon!--without-login
, vous pouvez télécharger sans vous connecter. Sinon, il vous sera demandé votre identifiant et votre mot de passe. Si vous pouvez le télécharger sans vous connecter, il sera plus facile de l'ajouter.
argument
La description
Valeur par défaut si omis
gen
Nom de la sous-commande
(Ne peut pas être omis)
abs
Identifiant du concours
(Ne peut pas être omis)
--workspace
Chemin de téléchargement
~/atcoder-workspace
--lang
Langue du code de modèle généré automatiquement
cpp
(C++)
--without-login
Utiliser sans se connecter
nil
(Il vous sera demandé de vous connecter)--without-login
peut être la valeur par défaut.C'est ennuyeux de spécifier des options à chaque fois ...
~ / .atcodertools.toml
et d'omettre les options.toml:~/.atcodertools.toml
[codestyle]
workspace_dir='~/Workspace/competitive_programming/atcoder/'
lang='python'
[etc]
download_without_login=true
--workspace
sur workspace_dir
de[codestyle]
et la langue spécifiée par --lang
sur lang
de [codestyle]
.--without-login
en définissant download_without_login = true
sur[etc]
, mais je ne pouvais pas (on m'a demandé de me connecter). Il peut être utilisé de manière incorrecte ou être un bogue.Lorsque vous souhaitez tester avec plusieurs valeurs d'entrée / sortie à la fois
$ cat in_1.txt | python main.py
#Le résultat de la sortie s'affiche
$ cat out_1.txt
#Comparez si c'est le même que le résultat de sortie précédent
$ cat in_2.txt | python main.py
#Faites de même pour le deuxième cas de test
$ cat out_2.txt
#Même résultat vérifié
$ cat in_3.txt | python main.py
#Le troisième
$ cat out_3.txt
#vérifier
# ...La même chose s'applique ci-dessous
$ cd path/to/program-location #Déplacer vers le répertoire contenant le programme et les fichiers d'entrée / sortie
$ atcoder-tools test
# in_1.txt ... PASSED 163 ms
# in_2.txt ... PASSED 136 ms
# in_3.txt ... PASSED 130 ms
Passed all test cases!!!
Tout langage non compatible est OK tant qu'il s'agit d'un fichier exécutable!
main.rb
#!/usr/bin/env ruby
#↑ Ajouter shebang sur la première ligne
#Ecrire un programme
#Donner l'autorisation d'exécution
$ chmod +x main.rb
À propos des options
--dir
.--exec
, mais dans mon environnement, j'ai un FileNotFoundError
et cela n'a pas fonctionné.Lorsque vous souhaitez soumettre un programme à partir de la CLI
$ atcoder-tools submit
submit
), alors entrez votre ID et votre mot de passe AtCoder lorsque vous êtes invité à entrer un ID et un mot de passe.Je veux en savoir plus!
à la fin