Jeu à la main en Python (commençons avec AtCoder?)

Quel est cet article?

J'étais intéressé par AtCoder et j'ai essayé de taper le code directement dans le navigateur. Alors, bien sûr, je voulais le déplacer localement et le vérifier avant de le télécharger. Puis, six mois plus tard, j'aimerais me dire: "Quoi, je ne savais pas ça?", Donc je veux garder la source. (Eh bien, localement.) Ensuite, au fait, ayons un exemple de problème dans le code, testons-le et attendons qu'il soit OK. Donc, j'ai ajouté un mode de fonctionnement et créé un framework (?) - Comme une fonction facile à évaluer.

Histoire

J'ai entendu dire qu'il y a un casse-tête qui semble intéressant ... Non, je connaissais l'existence elle-même, mais le contenu était trop enthousiaste, et je pensais que c'était un peu comme ça, alors j'ai abandonné. Cependant, quand j'ai entendu que je pouvais participer à AtCoder on Scratch, j'ai dit: "Eh bien, n'est-ce pas un expert?" .. ..

Ensuite, j'ai pensé que je pourrais participer pour la première fois. Faux. J'ai pensé que je commencerais.

Aperçu des spécifications?

Créez un fichier .py qui peut être démarré indépendamment Fonctionnement normal (pour soumission) sans arguments Entrez 1, 2 etc. comme argument et affichez le résultat de l'implémentation du modèle de test et OK / NG présentés dans l'énoncé du problème.

code

Exemple 1: A - Bienvenue chez AtCoder

■A - Welcome to AtCoder https://atcoder.jp/contests/practice/tasks/practice_1

 practice_1.py

# répondre
def practice_1(lines):
    a = int(lines[0])
    b, c = map(int, lines[1].split(' '))
    s = lines[2]
    return [str(a+b+c) + ' ' + s]


# Obtenir l'argument
def get_input_lines(lines_count):
    lines = list()
    for _ in range(lines_count):
        lines.append(input())
    return lines


# données de test
def get_testdata(pattern):
    if pattern == 1:
        lines_input = ['1', '2 3', 'test']
        lines_export = ['6 test']
    elif pattern == 2:
        lines_input = ['72', '128 256', 'myonmyon']
        lines_export = ['456 myonmyon']
    return lines_input, lines_export


# Détermination du mode de fonctionnement
def get_mode():
    import sys
    args = sys.argv
    if len(args) == 1:
        mode = 0
    else:
        mode = int(args[1])
    return mode


# Traitement principal
def main():
    mode = get_mode()
    if mode == 0:
        lines_input = get_input_lines(3)
    else:
        lines_input, lines_export = get_testdata(mode)

    lines_result = practice_1(lines_input)

    for line_result in lines_result:
        print(line_result)

    if mode > 0:
        print(f'lines_input=[{lines_input}]')
        print(f'lines_export=[{lines_export}]')
        print(f'lines_result=[{lines_result}]')
        if lines_result == lines_export:
            print('OK')
        else:
            print('NG')


# Démarrez le processus
if __name__ == '__main__':
    main()

(Résultat de sortie)

(base) ...>python practice_1.py 1
6 test
lines_input=[['1', '2 3', 'test']]
lines_export=[['6 test']]
lines_result=[['6 test']]
OK

(base) ...>python practice_1.py 2
456 myonmyon
lines_input=[['72', '128 256', 'myonmyon']]
lines_export=[['456 myonmyon']]
lines_result=[['456 myonmyon']]
OK

(base) ...>python practice_1.py
3
5 7
abc
15 abc



Exemple 2: ABC173: A --Paiement

https://atcoder.jp/contests/abc173/tasks/abc173_a

 abc173_a.py

# répondre
def abc173_a(lines):
    N = int(lines[0])
    amari = N % 1000
    if amari == 0:
        answer = 0
    else:
        answer = 1000 - amari
    return [answer]


# Obtenir l'argument
def get_input_lines(lines_count):
    lines = list()
    for _ in range(lines_count):
        lines.append(input())
    return lines


# données de test
def get_testdata(pattern):
    if pattern == 1:
        lines_input = ['1900']
        lines_export = [100]
    elif pattern == 2:
        lines_input = ['3000']
        lines_export = [0]
    return lines_input, lines_export


# Détermination du mode de fonctionnement
def get_mode():
    import sys
    args = sys.argv
    if len(args) == 1:
        mode = 0
    else:
        mode = int(args[1])
    return mode


# Traitement principal
def main():
    mode = get_mode()
    if mode == 0:
        lines_input = get_input_lines(1)
    else:
        lines_input, lines_export = get_testdata(mode)

    lines_result = abc173_a(lines_input)

    for line_result in lines_result:
        print(line_result)

    if mode > 0:
        print(f'lines_input=[{lines_input}]')
        print(f'lines_export=[{lines_export}]')
        print(f'lines_result=[{lines_result}]')
        if lines_result == lines_export:
            print('OK')
        else:
            print('NG')


# Démarrez le processus
if __name__ == '__main__':
    main()


(Résultat de sortie)

(base) >python abc173_a.py 1
100
lines_input=[['1900']]
lines_export=[[100]]
lines_result=[[100]]
OK

(base) >python abc173_a.py 2
0
lines_input=[['3000']]
lines_export=[[0]]
lines_result=[[0]]
OK

(base) >python abc173_a.py
2380
620

(

Exemple 3: ABC173: B - Résumé de l'état des juges

https://atcoder.jp/contests/abc173/tasks/abc173_b

 abc173_b.py

# répondre
def abc173_b(lines):
    labels = ['AC', 'WA', 'TLE', 'RE']
    ns = [0, 0, 0, 0]
    for line in range(1, len(lines)):
        for i, label in enumerate(labels):
            if label == lines[line]:
                ns[i] += 1
    answers = list()
    for i, label in enumerate(labels):
        answers.append(label + ' x ' + str(ns[i]))
    return answers


# Obtenir l'argument
def get_input_lines_1stline_as_n_lines():
    lines = list()
    lines.append(input())
    for _ in range(int(lines[0])):
        lines.append(input())
    return lines


# données de test
def get_testdata(pattern):
    if pattern == 1:
        lines_input = ['6', 'AC', 'TLE', 'AC', 'AC', 'WA', 'TLE']
        lines_export = ['AC x 3', 'WA x 1', 'TLE x 2', 'RE x 0']
    elif pattern == 2:
        lines_input = ['10', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC']
        lines_export = ['AC x 10', 'WA x 0', 'TLE x 0', 'RE x 0']
    return lines_input, lines_export


# Détermination du mode de fonctionnement
def get_mode():
    import sys
    args = sys.argv
    if len(args) == 1:
        mode = 0
    else:
        mode = int(args[1])
    return mode


# Traitement principal
def main():
    mode = get_mode()
    if mode == 0:
        lines_input = get_input_lines_1stline_as_n_lines()
    else:
        lines_input, lines_export = get_testdata(mode)

    lines_result = abc173_b(lines_input)

    for line_result in lines_result:
        print(line_result)

    if mode > 0:
        print(f'lines_input=[{lines_input}]')
        print(f'lines_export=[{lines_export}]')
        print(f'lines_result=[{lines_result}]')
        if lines_result == lines_export:
            print('OK')
        else:
            print('NG')


# Démarrez le processus
if __name__ == '__main__':
    main()

(Résultat de sortie)

(base) >python abc173_b.py 1
AC x 3
WA x 1
TLE x 2
RE x 0
lines_input=[['6', 'AC', 'TLE', 'AC', 'AC', 'WA', 'TLE']]
lines_export=[['AC x 3', 'WA x 1', 'TLE x 2', 'RE x 0']]
lines_result=[['AC x 3', 'WA x 1', 'TLE x 2', 'RE x 0']]
OK

(base) >python abc173_b.py 2
AC x 10
WA x 0
TLE x 0
RE x 0
lines_input=[['10', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC', 'AC']]
lines_export=[['AC x 10', 'WA x 0', 'TLE x 0', 'RE x 0']]
lines_result=[['AC x 10', 'WA x 0', 'TLE x 0', 'RE x 0']]
OK

(base) >python abc173_b.py
5
AC
AC
WA
TLE
TLE
AC x 2
WA x 1
TLE x 2
RE x 0

Impressions

Eh bien, pour le moment, c'est ça. Avec l'attitude de commencer plutôt que d'en faire le meilleur. Peut-être que si je continue, je ferai beaucoup de changements.

Pour le moment, Welcome est devenu AC tel qu'il est, alors mettons cela à partir d'aujourd'hui. ABC173 a lu de A à F, mais D n'est pas très bien sorti. F était déroutant et n'avait pas envie de lire. Quand j'ai écrit le code pour E, il est devenu sobre et fastidieux et interrompu. Eh bien, je me demande s'il est normal de s'y habituer après D. C était aussi beaucoup de problèmes.

Je me demande si mon style s'améliorera en assemblant et organisant logiquement mes pensées, alors je pense que j'aimerais aborder les problèmes et prendre un peu de temps pour regarder la vidéo du commentaire ... Si vous continuez. .. ..

Recommended Posts

Jeu à la main en Python (commençons avec AtCoder?)
[Blender x Python] Commençons avec Blender Python !!
Commencez avec Python! ~ ② Grammaire ~
Commencez avec Python! ~ ① Construction de l'environnement ~
Lien pour commencer avec python
Jouons avec Excel avec Python [Débutant]
Comment démarrer avec Python
Démarrez avec Python avec Blender
Jouez avec 2016-Python
Commençons avec TopCoder en Python (version 2020)
Comment les débutants en Python commencent avec Progete
Entendons-nous bien avec Python # 0 (Construction de l'environnement)
Django 1.11 a démarré avec Python3.6
Résolvez AtCoder 167 avec python
1.1 Premiers pas avec Python
Premiers pas avec Python
[Cloud102] # 1 Commençons avec Python (Partie 2 Jupyter Notebook Construction AWS Edition)
Démarrez avec MicroPython
Obtenez date avec python
Démarrez avec Mezzanine
Premiers pas avec Python
Zubu amateur veut démarrer Python
[Cloud102] # 1 Premiers pas avec Python (première partie des premiers pas de Python)
Jeu de main Python (division)
[Cloud102] # 1 Commençons avec Python (Partie 3 Jupyter Notebook Construction GCP Cloud Shell Edition)
J'ai essayé de démarrer avec le script python de blender_Part 01
[Jouons avec Python] Créer un livre de comptes de ménage
J'ai essayé de démarrer avec le script python de blender_Partie 02
[Piyopiyokai # 1] Jouons avec Lambda: créez un compte Twitter
Python hand play (obtenir les noms de colonnes à partir du fichier CSV)
[Piyopiyokai # 1] Jouons avec Lambda: création d'un script Python
Obtenez le code du pays avec python
Jeu de main Python (liste à deux dimensions)
Jouons avec la 4e dimension 4e
Introduction aux fonctions Python
Jouons avec les données Amedas - Partie 1
Résolvez AtCoder ABC166 avec python
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Bleu clair avec AtCoder @Python
Obtenez la chronologie Twitter avec Python
Commencez avec influxDB + Grafana
Obtenez des données Youtube avec python
Premiers pas avec Python Django (1)
Lancez-vous avec Django! ~ Tutoriel ④ ~
Jouons avec les données Amedas - Partie 4
Premiers pas avec Python Django (4)
Premiers pas avec Python Django (3)
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
[Python] Jouez avec le Webhook de Discord.
Écrivons python avec cinema4d.
Obtenir l'ID de thread avec python
Introduction à Python Django (6)
Jouons avec les données Amedas - Partie 3
Obtenez des stocks avec Python
Jouons avec les données Amedas - Partie 2
Construisons git-cat avec Python
Obtenir le répertoire personnel avec python