Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne

Je n'ai pas participé hors ligne, mais je l'ai implémenté en Python. Puis-je m'amuser plus avec numpy?

Addendum: Les données de test ajoutées sont NG, elles ont donc été corrigées.

Problème: http://mtsmfm.github.io/2017/06/03/doukaku-e14.html Liens de réponse: http://qiita.com/mtsmfm/items/89b6634f363bbf5b47f5 Événement: https://yhpg.doorkeeper.jp/events/59397

#!/usr/bin/env python
# -*- coding:utf-8 -*-

patterns = [    # dice patterns and the opposite surface pair numbers
    "1000,2323,1000", "1000,2323,0100", "1000,2323,0010", "1000,2323,0001",
    "0100,2323,0100", "0100,2323,0010", "1200,0313,0020", "1200,0313,0200",
    "1200,0310,0023", "1200,0313,0002", "12100,00323"]
patterns = [[list(map(int, row)) for row in p.split(',')] for p in patterns]
patterns += [[row[::-1] for row in p] for p in patterns]    # flip horizontal
patterns += [p[::-1] for p in patterns]                     # flip vertical
patterns += [list(zip(*p)) for p in patterns]               # transpose

def solve(data):
    dice = [list(map(int, row)) for row in data.split(',')]
    for dy in range(len(dice)):
        for dx in range(len(dice[dy])):
            for pattern in patterns:
                try:
                    pickup = {dice[dy + py][dx + px] : pair
                              for py, row in enumerate(pattern)
                              for px, pair in enumerate(row)
                              if pair != 0}
                    if (sorted(pickup) == [1, 2, 3, 4, 5, 6] and
                        sum(d * (10 ** p) for d, p in pickup.items()) == 7770):
                        return "true"   # sum of each pair 3,2,1,0 is 7,7,7,0
                except IndexError:  # a index of the dice array is out of range
                    pass            # so, the pattern didn't match
    return "false"

class Result:
    correct = 0
    wrong = 0

def test(data, correct):
    answer = solve(data)
    if answer == correct:
        Result.correct += 1
    else:
        print("%s, %s != %s" % (data, correct, answer))
        Result.wrong += 1

if __name__ == '__main__':
    test("44165,44516", "false");
    test("26265,31436", "true");
    test("46345,54215", "true");
    test("62143,11152", "false");
    test("4242,4314,1562", "false");
    test("5612,3656,4523", "false");
    test("5514,1311,5252", "false");
    test("5262,4631,2644", "true");
    test("6626,3324,2644", "false");
    test("4645,6314,2564", "true");
    test("54,65,23,21,14", "true");
    test("5325,3641,1335", "true");
    test("4163,2156,2553", "true");
    test("3126,6543,4352", "false");
    test("4464,5423,5216", "true");
    test("3564,3634,5631", "false");
    test("4363,3454,2126", "true");
    test("25,25,33,12,52", "false");
    test("1551,4542,3624", "true");
    test("6623,4126,6331", "false");
    test("2432,6215,1623", "true");
    test("1151,6555,3616", "false");
    test("2466,1242,4444", "false");
    test("5646,1463,4244", "true");
    test("1255,6413,4534", "true");
    test("1325,2312,2425", "false");
    test("2544,6413,4656", "true");
    test("1656,4131,3235", "true");
    test("6332,3631,4113", "false");
    test("4525,2151,2336", "true");
    test("1645,2356,4314", "true");
    test("3334,6215,1553", "true");
    test("2622,5251,5165", "false");
    test("1111,5613,3451", "false");
    test("6146,4512,6353", "true");
    test("2455,3312,6461", "false");
    test("1221,1325,1422", "false");
    test("1562,2236,5212", "false");
    test("6622,3324,5155", "true");
    test("2352,4631,1236", "true");
    test("4645,2252,6554", "false");
    test("3542,6515,1231", "true");
    test("12,61,56,45,23", "false");
    test("4643,6522,3625", "false");
    test("1151,1642,4512", "false");
    test("5423,5146,2212", "false");
    test("6224,3412,5653", "true");
    test("3122,5423,6231", "true");
    test("5421,2351,6513", "false");
    test("5652,3542,3313", "true");
    test("5524,3335,1146", "false");
    test("5311,4126,6425", "true");
    test("15,43,62,42,14", "true");
    test("3631,3542,3265", "true");
    test("1232,5364,6135", "true");
    test("2441,4644,5433", "false");
    test("2213,5621,3412", "true");
    test("6644,1264,1235", "true");
    test("5613,1423,6315", "true");
    test("6552,1546,2141", "false");
    test("5623,1461,5645", "true");
    test("1442,1436,6362", "false");
    test("3443,5145,4546", "false");
    test("1244,1313,2316", "false");
    test("2152,1463,2114", "true");
    test("1211,6234,5561", "false");
    test("4152,1252,3142", "false");
    test("6645,1231,6122", "false");
    test("353,241,121,536", "true");
    test("224,444,651,234", "true");
    test("643,214,244,343", "false");
    test("624,542,214,333", "true");
    test("441,426,536,656", "true");
    test("564,642,513,364", "true");
    test("422,136,414,416", "false");
    test("463,356,113,662", "true");
    test("464,515,435,462", "true");
    test("531,145,364,525", "false");
    test("623,564,153,633", "false");
    test("335,462,531,424", "false");
    test("131,111,535,436", "false");
    test("435,414,423,365", "true");
    test("144,512,332,346", "true");
    test("342,246,342,634", "false");
    test("246,566,431,415", "true");
    test("444,554,234,621", "true");
    test("313,624,165,652", "true");
    test("563,262,545,315", "true");
    test("213,264,154,264", "false");
    test("364,434,246,113", "false");
    test("411,656,325,225", "false");
    test("624,234,115,443", "true");
    test("252,214,635,154", "false");
    test("146,213,525,164", "false");
    test("456,423,112,352", "true");
    test("253,156,111,355", "false");
    test("252,161,562,365", "false");
    test("136,553,544,524", "true");
    test("414,351,161,525", "true");
    test("261,442,111,531", "true");
    test("323,664,454,133", "true");
    test("213,415,225,165", "false");
    test("363,162,165,533", "false");
    test("346,441,315,241", "false");
    test("121,312,155,164", "true");
    test("123,311,452,365", "true");
    test("361,145,212,431", "true");
    test("451,264,412,513", "false");
    test("311,456,263,226", "true");
    test("343,442,624,635", "false");
    test("534,644,234,251", "false");
    test("515,346,462,435", "true");
    test("445,126,165,636", "false");
    test("343,355,126,353", "false");
    test("623,533,256,144", "true");
    test("125,341,566,416", "false");
    test("354,434,621,411", "true");
    test("356,435,253,114", "false");
    test("141,265,533,514", "true");
    test("613,426,142,535", "true");
    test("366,322,413,325", "true");
    test("331,542,343,545", "false");
    test("261,512,563,123", "false");
    test("242,132,656,164", "true");
    test("133,545,441,665", "false");
    test("111,151,621,545", "false");
    test("132,154,234,653", "false");
    test("114,455,635,511", "false");
    test("14366,64254,66664,42611,41245", "false");
    test("41114,53116,13122,66613,35111", "false");
    test("22146,34244,16154,62531,51426", "true");
    test("464316,136563,136326,535655,641161,252655", "true");
    test("166255,615452,261224,533566,323335,556213", "false");
    test("126665,245653,343553,254661,365415,361154", "false");
    test("1512663,1525531,5456426,6336325,4324465,6512242,4112466", "true");
    test("2236563,6644542,4425515,6641142,4214543,1156426,3225413", "false");
    test("5545354,6566343,3525411,5356165,4625265,1535435,5522665", "false");
    test("16161,61616,16161", "false");
    test("2431,6354,2341", "false");
    print("OK:%s, NG:%s" % (Result.correct, Result.wrong))

Résultat d'exécution


OK:139, NG:0

Recommended Posts

Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne
Comment écrire un exemple d'implémentation Python du problème E15 en temps réel hors ligne
Comment écrire un exemple d'implémentation E11 Ruby et Python en temps réel hors ligne
Comment écrire hors ligne en temps réel Résolution des problèmes E05 avec Python
Réponse au "Problème d'écriture en temps réel hors ligne E13"
20e Comment écrire des problèmes en temps réel hors ligne en Python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Le 15e comment écrire un problème de référence en temps réel hors ligne en Python
Comment écrire en temps réel hors ligne Résolution des problèmes E04 avec Python
Le 14ème problème de référence d'écriture en temps réel hors ligne en python
Le 18ème comment écrire un problème de référence en temps réel hors ligne en Python
Réponse à "Comment écrire le problème F02 en temps réel hors ligne"
Réponse à "Comment écrire un problème F01 en temps réel hors ligne"
Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec Python
17ème problème de référence d'écriture en temps réel hors ligne implémenté en Python
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python
Le 16ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Le 19ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Le 15e problème d'écriture en temps réel hors ligne a été résolu avec python
Comment écrire en temps réel hors ligne J'ai essayé de résoudre E12 avec python
Comment écrire un type liste / dictionnaire de Python3
Partie 1 J'ai écrit un exemple de la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
13th Offline en temps réel Comment résoudre les problèmes d'écriture avec Python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
17e comment résoudre les problèmes d'écriture en temps réel hors ligne avec Python
Le 10ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par Python.
Le 11ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par python.
Comment écrire hors ligne en temps réel Résolution des problèmes F01 avec Python
[Python] Résumé de l'utilisation des pandas
Comment écrire des commentaires de document Python (Docstrings)
Réponse à "Comment écrire un problème E12 en temps réel hors ligne"
[Python2.7] Résumé de l'utilisation d'unittest
Résumé de l'utilisation de la liste Python
[Python2.7] Résumé de l'utilisation du sous-processus
Comment écrire Ruby to_s en Python
Résumé de l'écriture d'AWS Lambda
[Question] Comment utiliser plot_surface de python
Partie 1 J'ai écrit la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
[Python] Comment utiliser deux types de type ()
Résumé de la façon d'importer des fichiers dans Python 3
Résumé de l'utilisation de MNIST avec Python
Comment spécifier des attributs avec Mock of Python
Comment obtenir des éléments de type dictionnaire de Python 2.7
Comment installer python
Exemple d'implémentation d'un système de traitement LISP simple (version Python)
Comment obtenir le nombre de chiffres en Python
J'ai essayé de résumer comment utiliser matplotlib de python
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
Comment utiliser Python Kivy ① ~ Bases du langage Kv ~
[Python] Comment écrire une docstring conforme à PEP8
[Python] Comment fractionner et modulariser des fichiers (simple, exemple)
Examen de atcoder ABC158, jusqu'à la question E (Python)
[Python] Résumé de la façon de spécifier la couleur de la figure
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
[Python] Résumé des fonctions eval / exec + Comment écrire une chaîne de caractères avec des sauts de ligne
[2020.8 dernière] Comment installer Python
Comment installer Python [Windows]
[Introduction à Python] Comment écrire des branches conditionnelles en utilisant des instructions if
python3: Comment utiliser la bouteille (2)