Script Python pour obtenir une liste d'exemples d'entrée pour le concours AtCoder

Code source

Cliquez ici pour Gist https://gist.github.com/029969994cb444bef7ed

# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import sys
import os
import re
'''
Si vous passez l'URL de la première page du concours, ce sera sous le répertoire d'exécution
Créer un répertoire pour chaque problème,Exporter l'exemple d'entrée de page de problème dans un fichier
'''

INPUT_FILE_NAME = "input.txt"
DELIMITER = "---"


def main():
    # http://arc001.contest.atcoder.jp/
    try:
        url = sys.argv[1]
    except IndexError:
        print("input contest url:")
        url = input()

    m = re.search('(https?://)(?P<name>.*)\.contest?', url)
    contest_name = m.group('name')
    if not os.path.exists(contest_name):
        os.mkdir(contest_name)
    page = urlopen(url + "assignments")
    soup = BeautifulSoup(page)
    table = soup.find('table', attrs={'class': 'table-wb'}).find('tbody')
    for tr in table.find_all('tr'):
        (sharptd, qlinktd) = tr.find_all('td', limit=2)
        index = sharptd.text
        q_path = contest_name + "/" + index
        if not os.path.exists(q_path):
            os.mkdir(q_path)
        url_tail = qlinktd.find('a').get('href')
        f_path = q_path + "/" + INPUT_FILE_NAME
        if not os.path.exists(f_path):
            f = open(f_path, "w")
            f.write(soup_prets(url + url_tail[1:]))
            f.close()
            print("generate input > " + f_path)
        else:
            print("already exists: f_path")


def soup_prets(url):
    '''
récupérer le texte d'entrée
    '''

#    print(url)
    page = urlopen(url)
    soup = BeautifulSoup(page)
    inputs = []
    for pretag in soup.find_all("pre", attrs={"class": "prettyprint"})[::2]:
        inputs.append(pretag.string.strip())
    return ("\n" + DELIMITER + "\n").join(inputs)

if __name__ == '__main__':
    main()

Préparation

Nécessite Python3, BeautifulSoup4

pip install beautifulsoup4 

Exemple d'exécution

Essayez dans le concours sur http://arc001.contest.atcoder.jp/

> ls
start.py

Script de lancement

> ./start.py http://arc001.contest.atcoder.jp/
generate input > arc001/A/input.txt
generate input > arc001/B/input.txt
generate input > arc001/C/input.txt
generate input > arc001/D/input.txt

Structure du répertoire après exécution

> tree
.
├── arc001
│   ├── A
│   │   └── input.txt
│   ├── B
│   │   └── input.txt
│   ├── C
│   │   └── input.txt
│   └── D
│       └── input.txt
└── start.py

5 directories, 5 files

Vérifiez ce qui a été généré

> cat arc001/A/input.txt
9
131142143
---
20
12341234123412341234
---
4
1111

Recommended Posts

Script Python pour obtenir une liste d'exemples d'entrée pour le concours AtCoder
Python: obtenir une liste de méthodes pour un objet
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Essayez d'obtenir la liste des fonctions du paquet Python> os
Obtenez le nombre d'éléments spécifiques dans la liste python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir une liste d'exceptions intégrées pour python
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
Après avoir frappé l'API Qiita avec Python pour obtenir une liste d'articles pour les débutants, nous visiterons les articles divins
[Python] Obtenir une liste de dossiers uniquement
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
Python> sys.path> Liste de chaînes indiquant le chemin pour rechercher des modules
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
Récupérer l'appelant d'une fonction en Python
Copiez la liste en Python
amateur python tente de résumer la liste ②
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
Atcoder Beginner Contest A, B Résumé d'entrée qui a tendance à être un problème Python
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Modèle de script python pour lire le contenu du fichier
Comment obtenir le nombre de chiffres en Python
[python] Récupère la liste des classes définies dans le module
Récupérer le code retour d'un script Python depuis bat
[Python] Obtenir la liste des noms ExifTags de la bibliothèque Pillow
[Maya Python] Écraser le contenu du script 2 ~ list Notes
Script pour obtenir la date d'expiration du certificat SSL
Note Python: Le mystère de l'attribution d'une variable à une variable
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
AtCoder Beginner Contest 166 A Explication du problème "A? C" (Python3, C ++, Java)
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Examen du concours AtCoder pour débutants 159, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 163, jusqu'à la question E (Python)
Comment mélanger une partie de la liste Python (au hasard.shuffle)
[Maya Python] Écraser le contenu du script 3 ~ Liste des plugins inconnus
Examen du concours AtCoder Beginner Contest 164, jusqu'à la question E (Python)
[Commande] Commande pour obtenir une liste de fichiers contenant des caractères pleine largeur
Examen du concours AtCoder Beginner Contest 162, jusqu'à la question E (Python)
Obtenez une liste des livres électroniques DMM achetés avec Python + Selenium
Discord's Python 1.5 ou version ultérieure, je ne parviens pas à obtenir la liste des membres
Examen du concours AtCoder Beginner Contest 154, jusqu'à la question E (Python)
AtCoder Grand Contest 046: A --Takahashikun, dessin d'animation The Strider
Obtenez le nombre d'occurrences pour chaque élément de la liste
Examen de AtCoder Beginner Contest 160, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 167, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 157, jusqu'à la question E (Python)
Examen du concours AtCoder pour débutants 161, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 155, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 156, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 166, jusqu'à la question E (Python)
Comment obtenir une liste de liens à partir d'une page de wikipedia
Script Python qui compare le contenu de deux répertoires
Récupérez la source de la page à charger indéfiniment avec python.
Comment connecter le contenu de la liste dans une chaîne de caractères