[PYTHON] Obtenez, testez et soumettez des cas de test dans le concours AtCoder à partir de la ligne de commande

introduction

C'est une procédure pour acquérir, tester et soumettre un cas de test sur le terminal (Mac) en utilisant ʻatcoder-cli, ʻonline-Judge-tools.

Quand j'ai démarré AtCoder, j'ai utilisé le test de code sur la page du concours sans aucune maintenance particulière de l'environnement, mais en améliorant l'environnement comme décrit dans cet article, tout sera terminé sur Visual Studio Code + iTerm2. La vitesse de soumission a augmenté.

Préparation préalable

Installation des outils nécessaires

$ pip3 install online-judge-tools
$ npm install -g atcoder-cli
$ pip3 install selenium

Connectez-vous à AtCoder avec l'outil

$ acc login
$ oj login https://atcoder.jp/

Réglage

Assurez-vous que tous les répertoires problématiques sont créés. Par exemple, pour AtCoder Begginer Contest, demandez à la nouvelle commande acc abcXXX de créer des questions a ~ f

$ acc config default-task-choice all

Afficher l'emplacement du répertoire de configuration

$ acc config-dir

Définissez le modèle. Créez un dossier avec le nom du modèle dans le répertoire de configuration et créez le code source du modèle (exemple: main.py) et le fichier de configuration du modèle ( template.json).

#Aller au répertoire de configuration
$ cd /Users/xxxxxxxxxx/Library/Preferences/atcoder-cli-nodejs
$ mkdir py
$ cd py
$ touch main.py template.json

Lorsque le répertoire de problèmes est créé, main.py est créé et pour le soumettre à main.py, écrivez comme suit.

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

Modifiez les paramètres par défaut lors de la création de main.py. #! / usr / bin / env python3 est requis. Dans mon cas, j'écris des modèles d'entrée communs supplémentaires par défaut.

$ cat main.py 
#!/usr/bin/env python3
S = input()
N = int(input()) 
S = input().split()
A, B, C = input().split()
L = list(map(int, input().split()))
H, N = map(int, input().split())

Définissez le paramètre de modèle par défaut sur py (le fichier défini dans le répertoire py s'applique)

$ acc config default-template py

Vérifiez le modèle

$ acc templates
search template directories in /Users/xxxxxxxxxx/Library/Preferences/atcoder-cli-nodejs
NAME  SUBMIT-PROGRAM
py    main.py

Créer un répertoire

L'exemple ci-dessous concerne la création d'un répertoire pour AtCoder Bergginer Contest 154. Un fichier de main.py et de test d'entrée et de sortie est créé.

$ acc new abc154
$ tree
.
├── a
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       └── sample-2.out
├── b
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       ├── sample-2.out
│       ├── sample-3.in
│       └── sample-3.out
├── c
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       ├── sample-2.out
│       ├── sample-3.in
│       └── sample-3.out
├── contest.acc.json
├── d
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       ├── sample-2.out
│       ├── sample-3.in
│       └── sample-3.out
├── e
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       ├── sample-2.out
│       ├── sample-3.in
│       ├── sample-3.out
│       ├── sample-4.in
│       └── sample-4.out
└── f
    ├── main.py
    └── tests
        ├── sample-1.in
        ├── sample-1.out
        ├── sample-2.in
        └── sample-2.out

12 directories, 41 files

tester

Lorsque le programme est terminé, testez-le en utilisant ʻonline-Judge-tools` (atcoder-cli n'a pas de commandes de test)

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

Dans mon cas, j'ai mis un alias pour pouvoir tester uniquement avec la commande test dans le répertoire cible.

$ vim ~/.bash_profile

#Ajoutez ce qui suit
alias test='oj t -c "python3 main.py" -d ./tests/'

$ source ~/.bash_profile

Exécutez la commande test dans le répertoire qui vous intéresse

$ pwd
/xxxxx/atcoder/problem/abc151/a
$ test

Si vous souhaitez effectuer un test dans un scénario de test autre que celui répertorié dans l'énoncé du problème, par exemple pendant le débogage, exécutez le programme normalement et entrez le scénario de test. Dans le cas des programmes suivants

n = int(input()) 
print(n)

Vérifiez si le résultat attendu est renvoyé en obtenant la sortie en exécutant et en entrant comme suit.

$ python main.py
1 #contribution
1 #production

Soumission

En exécutant la commande suivante dans le répertoire en question, il passera automatiquement à la page AtCoder et la soumettra.

$ acc s

référence

Recommended Posts

Obtenez, testez et soumettez des cas de test dans le concours AtCoder à partir de la ligne de commande
Continuez à recevoir RSS sur la ligne de commande
Vous recherchez commandlinefu sur la ligne de commande
Un moyen simple de saisir et d'exécuter des cas de test AtCoder dans Jupyter Notebook
Obtenez des options en Python à partir des fichiers JSON et des arguments de ligne de commande
Afficher rapidement le code QR sur la ligne de commande
Développement Arduino en ligne de commande: vim + platformio
Mise en évidence de la syntaxe sur la ligne de commande à l'aide de Pygments
Convertir XLSX en CSV sur la ligne de commande
Exécutez Route53 sur la ligne de commande à l'aide de l'AWS-CLI.
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
Pensez aux interfaces sélectives sur la ligne de commande
Recevez le dernier rendez-vous de Google Agenda et notifiez-le sur LINE tous les matins
Soyons avertis de la météo dans votre région préférée de Yahoo Weather sur LINE!
Exécuter une commande sur le serveur Web et afficher le résultat
Soyons avertis de la météo dans votre région préférée de Yahoo Weather sur LINE! ~ PART2 ~
Obtenez et créez des nœuds ajoutés et mis à jour dans la nouvelle version
Rechercher des fichiers volumineux sous Linux à partir de la ligne de commande
Obtenez le type MIME en Python et déterminez le format de fichier
[Jinja2] Changement de saut de ligne en fonction de la position du trait d'union
Recherchez le pandas.DataFrame avec une variable et obtenez la ligne correspondante.
J'ai essayé de programmer le test du chi carré en Python et Java.
Comment obtenir toutes les clés et valeurs du dictionnaire
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Comment copier et coller le contenu de la ligne de commande avec bash sous Linux ou Mac sans souris
python Remarque: déterminez si l'argument de ligne de commande est dans la liste
Créez des rendez-vous pour le concours AtCoder sur Google Agenda avec Python et GAS
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[EC2] Comment installer et télécharger chromedriver à partir de la ligne de commande
Créez des commandes Django personnalisées et exécutez-les à partir de la ligne de commande
Module standard Python utilisable en ligne de commande
Adieu l'invite de commande dans WSL, VSCode et Windows Terminal
Obtenez le titre et la date de livraison de Yahoo! News en Python
Formatez le journal Git et obtenez le nom du fichier validé au format csv
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Installez Chrome en ligne de commande sur Sakura VPS (Ubuntu) et lancez Chrome avec python à partir de l'affichage virtuel et du sélénium
Présentation de youtube-dl, un outil de téléchargement vidéo qui fonctionne sur la ligne de commande, et sa fonction de complétion zsh.