Compétitif Pro avec Python et VSCode-Simplification de l'entrée standard et automatisation du jugement de cas d'échantillons-

J'ai récemment commencé à concourir chez AtCoder: débutant: C'est bien de commencer, mais c'est un enfer de débogage encore et encore car cela ne se résout pas rapidement: sanglot: Chaque fois que je copie un cas de test sur le terminal ... Arrêtons de faire ça: no_entry_sign:

Cet article windows10 1909 VSCode 1.45.1 Python 3.8.2 C'est le contenu confirmé dans.

1. Utilisez sys.stdin pour le débogage

Le premier est la simplification de l'entrée standard.

Lors de la recherche de conditions telles que "VS Code python standard input", teratail avait la question et la réponse suivantes. Comment recevoir une entrée standard avec VS Code (Windows10 / Python) Je ne sais pas si c'est célèbre dans le domaine professionnel de la compétition, mais c'est exactement ce que je recherchais.

import io
import sys

_INPUT = """\
2
1 2 3
aaa
"""
sys.stdin = io.StringIO(_INPUT)

print(int(input()))
print(list(map(int, input().split())))
print(list(input()))

#production
2
[1, 2, 3]
['a', 'a', 'a']

Selon la documentation Python, sys.stdin est tout interactif (y compris l'appel ʻinput () `) Utilisé pour l'entrée, io.StringIO est essentiellement une classe qui lit et écrit des chaînes comme un fichier. Il semble que.

<détails>

modèle </ summary>

test_inut.py


import io
import sys

# input here
_INPUT = """\

"""
sys.stdin = io.StringIO(_INPUT)

# your code here

</ div> Entrez un exemple de cas, un cas de test auquel vous pensez et le code que vous souhaitez déboguer. </ détails> Surtout, il est agréable de voir le cas de test en un coup d'œil, contrairement à l'écrire dans un fichier séparé (input.txt, etc.). Vous n'avez plus à vous soucier de la tempête de copype:

2. Utilisons des outils de juge en ligne

Il existe un outil pour automatiser le jugement des exemples de cas! !! C'est online-judge-tools est.

online-juge-tools est un excellent outil pour extraire des exemples de cas des sites de concours et automatiser les décisions.

Linux ou Mac OS est recommandé comme système d'exploitation, mais il fonctionne également sous Windows.

Comme il dit, cela fonctionne très bien dans mon environnement.

Comment utiliser

Pour l'utilisation, consultez la page GitHub, ainsi que Créer un environnement professionnel compétitif avec Visual Studio Code (Practice) Exemple de scénario de test automatique et exécution de test de valeur d'entrée manuelle avec VS Code avec AtCoder J'ai été autorisé à faire référence.

Structure des dossiers
AtCoder\
├── .venv\
│
├── .vscode\
│   └── tasks.json
│
├── sctipt\
│   └── cptest.ps1
│
├── src\
│   └── abc000_0.py
│
└── test\
    └── abc000_0\
        ├── sample-1.in
        └── sample-1.out

Remplacez le dossier .venv par le nom que vous avez utilisé lors de la création de l'environnement virtuel. Il ne faut pas que cela passe comme ca. Le dossier .vscode est créé automatiquement lorsque vous générez tasks.json. Les dossiers script et src ne sont pas absolument nécessaires. Le dossier de test est automatiquement créé lorsque vous exécutez cptest.ps1.

1. Installation
> pip install online-judge-tools

Facile à installer avec pip.

2. Connexion

Entrez votre nom d'utilisateur et votre mot de passe.

> oj login -nom d'utilisateur-p mot de passe"https://atcoder.jp/"

Pour vérifier si vous vous êtes connecté

> oj login --check "https://atcoder.jp/"
[*] You have already signed in.

S'il revient, c'est OK.

  1. cptest.ps1 Un script qui prend des exemples de cas du site du concours et les teste.

Ce qui suit est une version modifiée du script que j'ai appelé «.ps1».

cptest.ps1


. ".venv/Scripts/Activate.ps1"

$problem_name = $Args[0]
$problem_name_list = ($problem_name -split "_")
$base_url = ($problem_name.Replace("_", "-")).Substring(0, ($problem_name.Length) - 2)

if (! (Test-Path $test_dir)) {
    oj dl -d test/$problem_name/ https://atcoder.jp/contests/$base_url/tasks/$problem_name
}

oj test -c "python src/$problem_name.py" -d test/$problem_name/

J'ai installé des outils de juge en ligne dans l'environnement virtuel à l'intérieur du dossier AtCoder, donc la première ligne charge .venv / Scripts / Activate.ps1 et active l'environnement virtuel. Non requis si vous n'êtes pas dans un environnement virtuel.

En outre, des URL telles que 2nd National Unified Programming King Finals A-Sum of Two Integers https://atcoder.jp/contests/nikkei2019-2-qual/tasks/nikkei2019_2_qual_a Puisque le trait d'union est utilisé dans $ base_url et que le trait de soulignement est utilisé dans $ problem_name, le processus de changement de _ en - est ajouté. (Cela a changé.)

  1. tasks.json Les ** tâches ** de VSCode sont des fonctionnalités qui automatisent une variété de tâches et peuvent être exécutées avec Ctrl + Maj + B. Rendons donc possible l'exécution de cptest.ps1.

Ouvrez la palette de commandes avec Ctrl + Maj + P et tapez tâche pour voir de nombreuses commandes. À partir de là, sélectionnez "Configuration des tâches" -> "Générer les tâches.json à partir du modèle" -> "Autres" pour générer les tâches.json.

tasks.json


{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "test_atcorder_sample",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "type": "shell",
            "command": "${workspaceFolder}/script/cptest.ps1",
            "args": [
                "${fileBasenameNoExtension}"
            ]
        }
    ]
}

Maintenant, si le nom du fichier est ʻabc060_b.py, appuyez sur Ctrl + Maj + B`

> cptest.ps1 abc060_b

Vous avez exécuté.

C'est tout pour savoir comment l'utiliser. L'outil peut également être soumis et soumis à un test de résistance. Dans quelle mesure aimeriez-vous pouvoir automatiser le test des exemples de cas: joy: Je ne l'ai pas encore maîtrisé, alors je ferai de mon mieux à partir de maintenant.

à la fin

C'est vraiment plus facile à déboguer. J'espère que cet article pourra aider d'autres débutants en compétition. Bonne vie professionnelle de compétition pour tous: vague:

Recommended Posts