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" );