Competitive Pro mit Python und VSCode-Vereinfachung der Standardeingabe und Automatisierung der Beurteilung von Beispielfällen

Ich habe vor kurzem angefangen, bei AtCoder anzutreten: Anfänger: Es ist schön zu beginnen, aber es ist immer wieder eine Hölle des Debuggens, weil es sich nicht schnell löst: schluchzen: Jedes Mal, wenn ich einen Testfall auf das Terminal kopiere ... Hören wir damit auf: no_entry_sign:

Dieser Beitrag windows10 1909 VSCode 1.45.1 Python 3.8.2 Es ist der Inhalt bestätigt in.

1. Verwenden Sie zum Debuggen sys.stdin

Erstens ist die Vereinfachung der Standardeingabe.

Bei der Suche nach Bedingungen wie "VS Code Python-Standardeingabe" hatte teratail die folgende Frage und Antwort. So erhalten Sie Standardeingaben mit VS-Code (Windows 10 / Python) Ich weiß nicht, ob es im professionellen Bereich des Wettbewerbs berühmt ist, aber genau das habe ich gesucht.

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()))

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

Laut der Python-Dokumentation ist sys.stdin interaktiv (einschließlich des Aufrufs von "input ()"). Io.StringIO wird für die Eingabe verwendet und ist im Grunde eine Klasse, die Zeichenfolgen wie eine Datei liest und schreibt. Wie es scheint.

template

test_inut.py


import io
import sys

# input here
_INPUT = """\

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

# your code here

</ div> Geben Sie einen Beispielfall, einen Testfall, an den Sie denken, und den Code ein, den Sie debuggen möchten. </ details> Vor allem ist es schön, den Testfall auf einen Blick zu sehen, im Gegensatz zum Schreiben in einer separaten Datei (input.txt usw.). Jetzt müssen Sie sich keine Sorgen mehr um den Copype-Sturm machen: clap:

2. Verwenden wir Online-Richter-Tools

Es gibt ein Tool zur Automatisierung der Beurteilung von Beispielfällen! !! das ist online-judge-tools ist.

Online-Judge-Tools sind ein großartiges Tool, um Beispielfälle von Wettbewerbsseiten zu entfernen und Entscheidungen zu automatisieren.

Linux oder Mac OS wird als Betriebssystem empfohlen, funktioniert aber auch unter Windows.

Wie es heißt, funktioniert es gut in meiner Umgebung.

Wie benutzt man

Informationen zur Verwendung finden Sie auf der Seite GitHub sowie Aufbau eines wettbewerbsfähigen professionellen Umfelds mit Visual Studio Code (Practice) Automatischer Beispieltestfall und manuelle Ausführung des Eingabewerttests mit VS-Code mit AtCoder Ich durfte mich beziehen.

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

Ersetzen Sie den Ordner .venv durch den Namen, den Sie beim Erstellen der virtuellen Umgebung verwendet haben. Es muss nicht sein. Der Ordner .vscode wird automatisch erstellt, wenn Sie task.json generieren. Die Ordner script und src sind nicht unbedingt erforderlich. Der Testordner wird automatisch erstellt, wenn Sie cptest.ps1 ausführen.

1. Installation
> pip install online-judge-tools

Einfach mit pip zu installieren.

2. Melden Sie sich an

Geben Sie Ihren Benutzernamen und Ihr Passwort ein.

> oj login -u Benutzername-p Passwort"https://atcoder.jp/"

Um zu überprüfen, ob Sie angemeldet sind

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

Wenn es zurückkommt, ist es OK.

  1. cptest.ps1 Ein Skript, das Beispielfälle von der Wettbewerbsseite nimmt und sie testet.

Das Folgende ist eine modifizierte Version des Skripts, das ich als ".ps1" bezeichnet habe.

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/

Ich habe Online-Judge-Tools in der virtuellen Umgebung im AtCoder-Ordner installiert, daher lädt die erste Zeile ".venv / Scripts / Activate.ps1" und aktiviert die virtuelle Umgebung. Nicht erforderlich, wenn Sie sich nicht in einer virtuellen Umgebung befinden.

Außerdem URLs wie 2. National Unified Programming King Finale A-Summe zweier Ganzzahlen https://atcoder.jp/contests/nikkei2019-2-qual/tasks/nikkei2019_2_qual_a Da der Bindestrich in "$ base_url" und der Unterstrich in "$ problem_name" verwendet wird, wird der Vorgang des Änderns von "_" in "-" hinzugefügt. (es hat sich geändert.)

  1. tasks.json Die ** Aufgaben ** von VSCode sind Funktionen, die eine Vielzahl von Aufgaben automatisieren und mit Strg + Umschalt + B ausgeführt werden können. Machen wir es also möglich, cptest.ps1 auszuführen.

Öffnen Sie die Befehlspalette mit "Strg + Umschalt + P" und geben Sie "task" ein, um viele Befehle anzuzeigen. Wählen Sie "Task Configuration" -> "Task.json aus Vorlage generieren" -> "Andere", um task.json zu generieren.

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}"
            ]
        }
    ]
}

Wenn der Dateiname "abc060_b.py" lautet, drücken Sie "Strg + Umschalt + B"

> cptest.ps1 abc060_b

Sie haben ausgeführt.

Das ist alles für die Verwendung. Das Tool kann auch eingereicht und einem Stresstest unterzogen werden. Wie sehr möchten Sie das Testen von Beispielfällen automatisieren können: Freude: Ich habe es noch nicht gemeistert, also werde ich von nun an mein Bestes geben.

schließlich

Das Debuggen ist wirklich einfacher. Ich hoffe, dieser Artikel kann anderen Anfängern im Wettbewerb helfen. Gutes Wettbewerbsberufsleben für alle: Welle:

Recommended Posts