[PYTHON] Abrufen, Testen und Senden von Testfällen im AtCoder-Wettbewerb über die Befehlszeile

Einführung

Es ist ein Verfahren zum Erfassen, Testen und Einreichen eines Testfalls auf dem Terminal (Mac) mit "atcoder-cli", "Online-Judge-Tools".

Als ich AtCoder gestartet habe, habe ich den Codetest auf der Wettbewerbsseite ohne spezielle Umgebungswartung verwendet. Durch die Verbesserung der Umgebung, wie in diesem Artikel beschrieben, wird alles in Visual Studio Code + iTerm2 abgeschlossen. Die Einreichungsgeschwindigkeit hat zugenommen.

Vorbereitungen

Installation der notwendigen Werkzeuge

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

Melden Sie sich mit dem Tool bei AtCoder an

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

Aufbau

Stellen Sie sicher, dass alle Problemverzeichnisse erstellt wurden. Lassen Sie beispielsweise für den AtCoder Begginer-Wettbewerb mit dem Befehl acc new abcXXX Fragen a ~ f erstellen

$ acc config default-task-choice all

Zeigen Sie den Speicherort des Konfigurationsverzeichnisses an

$ acc config-dir

Legen Sie die Vorlage fest. Erstellen Sie einen Ordner mit dem Vorlagennamen im Konfigurationsverzeichnis und erstellen Sie den Vorlagenquellcode (Beispiel: main.py) und die Vorlagenkonfigurationsdatei ( template.json) darin.

#Gehen Sie zum Konfigurationsverzeichnis
$ cd /Users/xxxxxxxxxx/Library/Preferences/atcoder-cli-nodejs
$ mkdir py
$ cd py
$ touch main.py template.json

Wenn das Problemverzeichnis erstellt wird, wird main.py erstellt. Um es an main.py zu senden, schreiben Sie wie folgt.

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

Bearbeiten Sie die Standardeinstellungen, wenn main.py erstellt wurde. #! / usr / bin / env python3 ist erforderlich. In meinem Fall schreibe ich standardmäßig zusätzliche allgemeine Eingabemuster.

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

Setzen Sie die Standardvorlageneinstellung auf py (die im py-Verzeichnis festgelegte Datei gilt)

$ acc config default-template py

Überprüfen Sie die Vorlage

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

Verzeichnis erstellen

Das folgende Beispiel dient zum Erstellen eines Verzeichnisses für den AtCoder Bergginer Contest 154. Eine Datei mit main.py und Testein- und -ausgabe wird erstellt.

$ 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

Prüfung

Sobald das Programm abgeschlossen ist, testen Sie es mit "Online-Judge-Tools" (atcoder-cli hat keine Testbefehle)

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

In meinem Fall habe ich einen Alias eingefügt, damit ich nur mit dem Befehl test im Zielverzeichnis testen kann.

$ vim ~/.bash_profile

#Fügen Sie Folgendes hinzu
alias test='oj t -c "python3 main.py" -d ./tests/'

$ source ~/.bash_profile

Führen Sie den Befehl test im gewünschten Verzeichnis aus

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

Wenn Sie in einem anderen Testfall als der Problemstellung testen möchten, z. B. während des Debuggens, führen Sie das Programm normal aus und geben Sie den Testfall ein. Im Fall der folgenden Programme

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

Überprüfen Sie, ob das erwartete Ergebnis zurückgegeben wird, indem Sie die Ausgabe erhalten, indem Sie Folgendes ausführen und eingeben.

$ python main.py
1 #Eingang
1 #Ausgabe

Einreichung

Durch Ausführen des folgenden Befehls in dem betreffenden Verzeichnis wird automatisch zur AtCoder-Seite gesprungen und diese gesendet.

$ acc s

Referenz

Recommended Posts

Abrufen, Testen und Senden von Testfällen im AtCoder-Wettbewerb über die Befehlszeile
Erhalten Sie weiterhin RSS in der Befehlszeile
Sie suchen in der Befehlszeile nach commandlinefu
Rufen Sie Optionen in Python sowohl aus JSON-Dateien als auch aus Befehlszeilenargumenten ab
Zeigen Sie den QR-Code schnell in der Befehlszeile an
Arduino-Entwicklung über die Kommandozeile: vim + platformio
Syntaxhervorhebung in der Befehlszeile mithilfe von Pylements
Konvertieren Sie XLSX in CSV in der Befehlszeile
Führen Sie Route53 in der Befehlszeile mit AWS-CLI aus.
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
Denken Sie an selektive Schnittstellen in der Befehlszeile
Holen Sie sich den neuesten Termin aus Google Kalender und benachrichtigen Sie jeden Morgen online
Lassen Sie uns über das Wetter in Ihrer Lieblingsgegend von Yahoo Wetter auf LINE informiert werden!
Führen Sie einen Befehl auf dem Webserver aus und zeigen Sie das Ergebnis an
Lassen Sie uns über das Wetter in Ihrer Lieblingsgegend von Yahoo Wetter auf LINE informiert werden! ~ TEIL2 ~
Abrufen und Erstellen von Knoten, die in der neuen Version hinzugefügt und aktualisiert wurden
Suchen Sie unter Linux über die Befehlszeile nach großen Dateien
Holen Sie sich den MIME-Typ in Python und bestimmen Sie das Dateiformat
[Jinja2] Änderung des Zeilenumbruchs abhängig von der Position des Bindestrichs
Durchsuche den pandas.DataFrame mit einer Variablen und erhalte die entsprechende Zeile.
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
So erhalten Sie alle Schlüssel und Werte im Wörterbuch
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Kopieren und Einfügen von Befehlszeileninhalten mit bash unter Linux oder Mac ohne Maus
Python Hinweis: Stellen Sie fest, ob das Befehlszeilenargument in der Liste enthalten ist
Erstellen Sie mit Python und GAS Termine für AtCoder-Wettbewerbe in Google Kalender
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
[EC2] So installieren und laden Sie chromedriver über die Befehlszeile herunter
Erstellen Sie benutzerdefinierte Django-Befehle und führen Sie sie über die Befehlszeile aus
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
Auf Wiedersehen zur Eingabeaufforderung in WSL, VSCode und Windows Terminal
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
Formatieren Sie das Git-Protokoll und erhalten Sie den festgeschriebenen Dateinamen im CSV-Format
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Installieren Sie Chrome in der Befehlszeile von Sakura VPS (Ubuntu) und starten Sie Chrome mit Python über das virtuelle Display und Selen
Einführung in youtube-dl, ein Video-Download-Tool, das über die Befehlszeile funktioniert, und dessen zsh-Vervollständigungsfunktion.