Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec Python

Le problème est là. http://nabetani.sakura.ne.jp/hena/ord16boseg/ Je n'ai pas eu beaucoup de temps pour mettre en place le traitement redondant dans les directions horizontale et verticale. Je vais l'organiser plus tard.

Après l'organisation: fonction de résolution qui utilise l'opération bitmap.

def solve(data):
  h=[int(data[i:i+2],8) for i in range(0,len(data),2)]
  v=[int(''.join(y),2) for y in zip(*[format(x,'06b') for x in h])]
  c=[map(len,format(m[y]^m[y+1],'b').split('0')) for y in range(0,5) for m in(h,v)]
  return ','.join(map(str,[sum(c,[]).count(i) for i in range(1,7)]))

Commentaire:

#Création de bitmap:Découpez une chaîne de caractères octaux deux caractères à la fois pour créer un tableau numérique
h=[int(data[i:i+2],8) for i in range(0,len(data),2)]
  for i in range(0,len(data),2) #Génération de numéros d'index pour découper deux caractères à la fois
  data[i:i+2]                   #Extraire 2 caractères à la fois
  int(... ,8)                   #Quantifier les chaînes de caractères octales
  [...]                         #Faire un tableau

#Création de bitmap de remplacement vertical / horizontal:Convertir en un tableau de chaînes de caractères binaires, remplacer verticalement et horizontalement, puis convertir à nouveau en un tableau numérique
v=[int(''.join(y),2) for y in zip(*[format(x,'06b') for x in h])]
  [format(x,'06b') for x in h] #Convertir le tableau de nombres en un tableau de chaînes de caractères binaires à 6 chiffres
  zip(*[...])                  #Expansion d'argument des éléments de tableau(*)Puis zippez et remplacez chaque caractère verticalement et horizontalement
  for y in zip(...)            #Élément de tableau('0'Ou'1'Est un tableau de 6)sur
  ''.join(...)                 #Concaténer les caractères binaires pour chaque caractère pour créer une chaîne de caractères binaires
  int(... ,2)                  #Numériser la chaîne binaire
  [...]                        #Faire un tableau


#Prenez le XOR du bitmap entre chaque ligne et créez un tableau de longueurs où 1 bit est continu
c=[map(len,format(m[y]^m[y+1],'b').split('0')) for y in range(0,5) for m in(h,v)]
  for m in(h,v)          #Pour les bitmaps horizontaux et verticaux
  for y in range(0,5)    #y=0~4, 0-1,1-2,2-3,3-4,4-Prendre XOR entre 5 lignes
  m[y]^m[y+1]            #Prenez le XOR entre les lignes et réglez le bit de la partie frontière sur 1.
  format(... ,'b')       #Chaîne de bits Valeur numérique en chaîne de caractères binaires
  .split('0')            #'0'Divisé par'1'Faire un élément continu de
  map(len, ...)          #'1'Faire un tableau de longueurs
  [...]                  #Faire un tableau(Un tableau de tableaux, un tableau à deux dimensions)


#À partir du tableau de longueur, comptez le nombre d'apparitions pour chaque longueur,','Renvoie une chaîne séparée par
return ','.join(map(str,[sum(c,[]).count(i) for i in range(1,7)]))
  for i in range(1,7)    #Environ la longueur de 1 à 6
  sum(c,[])              #Aplatir c dans un tableau à deux dimensions pour en faire un tableau à une dimension
  .count(i)              #Comptez le nombre d'apparitions de longueur
  [...]                  #Faire un tableau
  map(str, ...)          #Transformez le nombre d'occurrences de 1 à 6 en un tableau de chaînes de caractères
  ','.join(...)          #Tableau de chaînes de nombre d'occurrences','Faites-en une chaîne de caractères connectée avec
  return ...             #revenir

Avant physiologie: Source rédigée en 1 heure sur place

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

def solve(data):
    data += "00"
    m = [format(int(data[i:i+2],8), "06b")+"0" for i in xrange(0,len(data),2)]
    count = [0]*7
    for x in xrange(0,5):
        n = 0
        last=(0,0)
        for y in xrange(0,7):
            z = (m[y][x], m[y][x+1])
            if z != last:
                count[n] += 1
                n = 0
            if z[0] != z[1]: n += 1
            last = z
    for y in xrange(0,5):
        n = 0
        last=(0,0)
        for x in xrange(0,7):
            z = (m[y][x], m[y+1][x])
            if z != last:
                count[n] += 1
                n = 0
            if z[0] != z[1]: n += 1
            last = z
    return ','.join(map(str,count[1:]))

def test(data, correct):
    answer = solve(data)
    print "OK" if answer==correct else "NG", answer, correct, data

if __name__ == '__main__':
    0, test( "060276724276", "6,2,1,1,0,1" );
    1, test( "770175454177", "2,3,0,3,1,0" );    
    2, test( "743733377170", "9,3,1,0,0,0" );    
    3, test( "724212121273", "5,2,1,1,1,1" );    
    4, test( "100000000000", "3,0,0,0,0,0" );    
    5, test( "000002000000", "4,0,0,0,0,0" );    
    6, test( "003622223600", "0,4,0,4,0,0" );    
    7, test( "520073737070", "8,3,1,1,0,0" );    
    8, test( "770077007700", "0,0,0,0,0,5" );    
    9, test( "555555555514", "2,0,0,0,2,2" );    
    10, test( "764252427600", "4,0,4,0,2,0" );    
    11, test( "774555554177", "3,3,1,3,0,0" );    
    12, test( "674574754557", "11,5,0,1,0,0" );    
    13, test( "000000000000", "0,0,0,0,0,0" );    
    14, test( "777777777777", "0,0,0,0,0,0" );    
    15, test( "774377777577", "6,0,2,0,0,0" );    
    16, test( "070777777777", "0,1,1,0,0,0" );    
    17, test( "373737373737", "0,0,0,0,0,1" );    
    18, test( "603260327725", "30,0,0,0,0,0" );    
    19, test( "466331144663", "30,0,0,0,0,0" );    
    20, test( "000000000242", "3,2,0,0,0,0" );    
    21, test( "567656043772", "18,2,1,0,0,0" );    
    22, test( "200763012420", "15,4,1,0,0,0" );    
    23, test( "400101140052", "14,3,0,0,0,0" );    
    24, test( "764767476476", "13,2,0,1,0,0" );    
    25, test( "001110140110", "12,2,1,0,0,0" );    
    26, test( "765405076527", "16,3,0,1,0,0" );    
    27, test( "377323370373", "8,4,2,0,0,0" );    
    28, test( "250541131216", "11,5,2,0,0,0" );    
    29, test( "744165741476", "12,3,2,0,0,0" );    
    30, test( "042101000300", "10,3,0,0,0,0" );    
    31, test( "002004554101", "11,3,1,0,0,0" );    
    32, test( "371707762706", "15,1,1,0,0,0" );    
    33, test( "130371310175", "7,3,1,2,0,0" );    
    34, test( "212537003613", "13,2,1,1,1,0" );    
    35, test( "157700063411", "15,3,0,0,0,1" );    
    36, test( "011500036007", "6,7,1,0,0,0" );    
    37, test( "743113313517", "17,2,1,0,0,0" );    
    38, test( "174105270405", "13,3,1,1,0,0" );    
    39, test( "427272200311", "13,3,2,0,0,0" );    
    40, test( "725370332237", "12,5,1,1,0,0" );    
    41, test( "005640420046", "12,1,3,0,0,0" );    
    42, test( "700350001101", "14,3,1,0,0,0" );    
    43, test( "577627744076", "16,1,1,1,0,0" );    
    44, test( "620332232007", "10,4,2,1,0,0" );    
    45, test( "260406401000", "15,1,1,0,0,0" );    
    46, test( "737272723276", "5,0,0,0,3,0" );    
    47, test( "000400040444", "7,0,2,0,0,0" );    
    48, test( "370222002177", "13,2,2,0,0,0" );    
    49, test( "372236024656", "9,3,2,0,1,0" );    
    50, test( "276131137003", "11,6,2,0,0,0" );    
    51, test( "742134007240", "13,4,2,0,0,0" );    
    52, test( "777721775571", "13,1,2,0,0,0" );    
    53, test( "700301232233", "11,2,3,0,0,0" );

Recommended Posts

Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec Python
Le 15e problème d'écriture en temps réel hors ligne a été résolu 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 comment écrire un problème de référence en temps réel hors ligne en 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
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
17ème problème de référence d'écriture en temps réel hors ligne implémenté en Python
20e Comment écrire des problèmes en temps réel hors ligne en Python
Le 14ème problème de référence d'écriture en temps réel hors ligne avec Python
Comment écrire hors ligne en temps réel Résolution des problèmes E05 avec Python
17e comment résoudre les problèmes d'écriture en temps réel hors ligne avec Python
Comment écrire un exemple d'implémentation Python du problème E15 en temps réel hors ligne
Réponse à "Comment écrire le problème F02 en temps réel hors ligne"
Le 18ème problème d'écriture en temps réel hors ligne en Python
Réponse à "Comment écrire un problème F01 en temps réel hors ligne"
Réponse au "Problème d'écriture en temps réel hors ligne E13"
Le 19ème problème d'écriture en temps réel hors ligne en Python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne
13th Offline en temps réel Comment résoudre les problèmes d'écriture avec Python
Comment écrire un exemple d'implémentation E11 Ruby et Python en temps réel hors ligne
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
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
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
Comment écrire en temps réel hors ligne J'ai essayé de résoudre E12 avec python
[Introduction à Python] Comment itérer avec la fonction range?
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
J'ai essayé de résoudre le problème avec Python Vol.1
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Écrire en csv avec Python
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
J'ai essayé de simuler la propagation de l'infection avec Python
Une histoire sur la façon de traiter le problème CORS
Comment entrer dans l'environnement de développement Python avec Vagrant
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Le douzième problème de référence d'écriture en temps réel hors ligne. Implémenté par python
Python: comment utiliser async avec
[Python] Ecrire dans un fichier csv avec Python
Comment obtenir la version Python
Comment démarrer avec Python
Comment calculer la date avec python
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Comment écrire en temps réel hors ligne Résolution des problèmes E04 avec Python
[Python] Explique comment utiliser la fonction format avec un exemple
Je voulais résoudre le problème ABC164 A ~ D avec Python
Comment envoyer une requête à l'API DMM (FANZA) avec python
Comment gérer le problème du déplacement du répertoire actuel lorsque Python est exécuté depuis Atom
Réponse à "Comment écrire le problème F04 en temps réel hors ligne"
Comment résoudre le problème d'emballage du bac
Comment écrire des commentaires de document Python (Docstrings)