AtCoder: Python: Automatisez autant que possible les tests d'échantillons.

Il est difficile de copier, coller et exécuter l'exemple d'entrée de concours avec AtCoder pour vérifier s'il correspond, je veux donc l'automatiser autant que possible. Mais je veux faire un cas d'angle par moi-même et le tester, donc je veux être en mesure d'exécuter le cas que j'ai fait.

Si python est installé dans Windows, vous pouvez le faire en suivant les étapes ci-dessous.

Après avoir terminé toutes les étapes, je vais vous expliquer comment tester dans le concours réel. ① Exécutez l'exemple de programme de téléchargement et entrez le nom du concours (par exemple "abc123") (2) Téléchargez l'exemple d'entrée et l'exemple de sortie ③ Ecrire un programme ④ Exécutez et vérifiez si l'exemple de sortie correspond à la sortie

Voici une brève description de ce que fait le programme. ① Recevez le nom du concours inscrit (2) Accédez à l'URL à partir du nom du concours avec python et extrayez l'exemple d'entrée et l'exemple de sortie de html. ③ Exportez chacun dans un fichier txt ④ Exécutez le programme avec le fichier txt enregistré comme argument (utilisez windows bat) ⑤ Afficher la sortie du résultat de l'exécution et l'exemple de sortie côte à côte

La méthode d'introduction et son utilisation sont décrites ci-dessous.

【étape 1】 À l'invite de commande pip install requests pip install BeautifulSoup Pour installer la bibliothèque utilisée pour obtenir l'URL.

[Procédure 2] Créez des dossiers appelés "Samples" et "Run". (L'endroit peut être n'importe où)

[Procédure 3] Créez un fichier appelé GetSample.py dans le dossier "Samples" et collez ce qui suit

GetSample.py


import requests,os,glob
from bs4 import BeautifulSoup

def outtxt(pro):
    res=requests.get("https://atcoder.jp/contests/"+No+"/tasks/"+No+"_"+pro)
    soup=BeautifulSoup(res.text, 'html.parser')

    source=soup.find_all("pre")
    source=[str(source) for source in source]

    sample=[]
    for i in range(1,len(source)):
        if "<var>" in source[i]:
            break
        else:
            tmp=source[i]
            tmp=tmp.replace("<pre>","")
            tmp=tmp.replace("</pre>","")
            tmp=tmp.replace("\r\n","\n")
            sample.append(tmp)

    for i in range(0,len(sample),2):
        with open("Sample_Input_"+pro.upper()+"_"+str(i//2+1)+".txt", mode='w') as f:
            f.write(sample[i])

    for i in range(1,len(sample),2):
        with open("Sample_Output_"+pro.upper()+"_"+str(i//2+1)+".txt", mode='w') as f:
            f.write(sample[i])
    
No=input()

for file in glob.glob('*.txt'):
    os.remove(file)

outtxt("a")
outtxt("b")
outtxt("c")
outtxt("d")
outtxt("e")
outtxt("f")

[Procédure 4] Double-cliquez sur GetSample.py pour l'exécuter. → Entrez le nom du concours tel que "abc123" car il cessera d'attendre l'entrée. → Vous pouvez créer des fichiers txt d'exemples d'entrée et d'exemples de sortie dans le dossier "Samples".

[Procédure 5] Créez un fichier txt vide appelé «HandInput.txt» dans le dossier Exécuter.

[Procédure 6] Créez "Ans.py" dans le dossier Exécuter et collez ce qui suit

Ans.py


import io,sys,os
if len(sys.argv)>1:
    path=sys.argv[1]
else:
    os.system('cls')
    path="HandInput.txt"
try:
    with open(path) as f:
        INPUT=f.read() 
    sys.stdin = io.StringIO(INPUT)
except:
    print("Le fichier spécifié est introuvable.")
    exit()
# --------------------------------------------------------
#Le code de soumission est indiqué ci-dessous

[Procédure 7] Créez "SampleTest_A.bat" dans le dossier "Run" et collez ce qui suit (Pour "chemin du dossier d'exemples", écrivez le chemin de l'emplacement où le dossier d'exemples a été créé (C: \ Windows \ ... \ Samples))

SampleText_A.bat


echo off
echo [Case1]
Ans.py "chemin du dossier des échantillons"\Sample_Input_A_1.txt
tapez "chemin du dossier d'exemples"\Sample_Output_A_1.txt
echo [Case2]
Ans.py "chemin du dossier des échantillons"\Sample_Input_A_2.txt
tapez "chemin du dossier d'exemples"\Sample_Output_A_2.txt
echo [Case3]
Ans.py "chemin du dossier des échantillons"\Sample_Input_A_3.txt
tapez "chemin du dossier d'exemples"\Sample_Output_A_3.txt
echo [Case4]
Ans.py "chemin du dossier des échantillons"\Sample_Input_A_4.txt
tapez "chemin du dossier d'exemples"\Sample_Output_A_4.txt

Créez sampleTest_B.bat, sampleTest_C.bat, sampleTest_D.bat, sampleTest_E.bat, sampleTest_F.bat de la même manière que ci-dessus (réécrivez toutes les parties écrites en A dans la chauve-souris en B, C, D ... )

[Procédure 8] Créez SampleTest.py dans le dossier "Exécuter" et collez ce qui suit. En guise de mise en garde, écrire le chemin du dossier directement en python entraînera une erreur, doublez donc le \ dans le chemin du fichier pour la partie "chemin du dossier des échantillons". (Exemple C \ windows \ ・ ・ ・ \ Samples → C \\ windows \\ ・ ・ ・ \\ Samples)

SampleTest.py


import os,sys
os.system('cls')
pro="A"
os.system(""Chemin du dossier des échantillons"\\SampleTest_"+pro+".bat")

Ceci termine la préparation.

【comment utiliser】 Tout d'abord, écrivez le code dans la section "Entrez le code de soumission ici" d'Ans.py. Pour un problème, définissez "pro =" A "" dans SamplesTest.py, et pour le problème B, définissez "pro =" B "".

SamplesTest.py,Exemple de sortie


[Case1]
1
1      
[Case2]
0
0      
[Case3]
10
10     
[Case4]
Le fichier spécifié est introuvable.
Le fichier spécifié est introuvable.

Si vous avez un exemple d'exemple de sortie et votre propre réponse, cela ressemblera à ceci. Ci-dessus, ma réponse. Voici un exemple de sortie d'échantillon. S'ils sont comparés, soumettez-les. Si vous souhaitez essayer votre propre échantillon, écrivez l'entrée dans HandInput.txt et exécutez Ans.py tel quel.

Sommaire,

Le contenu du dossier "Exécuter" est le suivant. Ans.py GetSample.py SampleTest.py HandInput.txt

Le contenu du dossier "Samples" est le suivant. GetSample.py SampleTest_A.bat SampleTest_B.bat SampleTest_C.bat SampleTest_D.bat SampleTest_E.bat SampleTest_F.bat "Autre exemple d'entrée (Sample_Input_A_1.txt, etc.) et de sortie (Sample_Output_A_1.txt) si GetSample.py est exécuté"

Accédez à la page de problème d'atcoder avec GetSample.py → Extraire l'exemple d'entrée et l'exemple de sortie du fichier html et écrire dans un fichier texte S'il y a un argument lors de l'exécution d'Ans.py, il sera accepté comme entrée, sinon HandInput.txt sera accepté comme entrée. SampleTest_A.bat etc. est une chauve-souris qui est exécutée en passant la sortie du fichier texte par GetSample.py à Ans.py en tant qu'argument. SampleTest.py est un programme qui n'exécute que SampleTest_A.bat etc. (Vous pouvez tester en frappant directement la batte sans lui, mais je l'ai juste fait parce que je voulais tout faire sur VScode)

Recommended Posts

AtCoder: Python: Automatisez autant que possible les tests d'échantillons.
Automatiser la soumission d'AtCoder (Python)
Automatisez les tests python avec CircleCI
AtCoder: Python: Papa, l'exemple de test.
Automatise la création d'annuaire AtCoder, les tests de cas et la soumission. atcoder-cli et outils de juge en ligne
atCoder 173 Python
Trouvez des nombres premiers avec un code aussi court que possible en Python
Utilisez get autant que possible pour les références de type dictionnaire
AtCoder ABC 174 Python
Exemple de fermeture Python
AtCoder ABC 175 Python
Automatisez les tests d'interface utilisateur avec l'API Selenium | Exploration de sites Web avec python
Comment exécuter Python sous Windows sans polluer autant que possible l'environnement (édition Scoop)