Cliquez ici pour plus de détails sur le problème. http://qiita.com/Nabetani/items/cba03c96d1ea55f6e861
Grâce à avoir essayé quelques problèmes du passé à l'avance, j'ai immédiatement pensé qu'il serait bon de faire un dictionnaire, et de régler le noir (allumé) du motif de points du caractère éclair sur 1 et le blanc (éteint) sur 0, et de définir les lignes supérieures et inférieures. J'ai fait un dictionnaire avec les clés arrangées et les caractères comme valeurs. Convertit la chaîne de caractères hexadécimaux d'entrée en chaîne de caractères binaires de 32 caractères, extrait plusieurs caractères du début des lignes supérieure et inférieure et recherche le dictionnaire. Cependant, j'ai dû faire attention au nombre de caractères à extraire. Quand il y a un motif «U'dot» avec 3 points au-dessus et en dessous, si vous retirez 2 points au-dessus et en dessous et recherchez le dictionnaire, il correspondra au motif de points de «L». Donc, vérifiez d'abord s'il s'agit d'un motif à 3 points, puis vérifiez s'il s'agit d'un motif à 2 points, et enfin s'il n'en atteint aucun, vérifiez s'il s'agit d'un motif délimiteur à 1 point (00).
parts = {'1011':'L', '1110':'R', '0111':'J', '111010':'T', '101111':'U',
'111101':'N', '011110':'S', '110011':'Z', '00':'' }
def solve(text):
upper, lower = (format(int(t,16),'032b') for t in text.split('/'))
answer = ''
while len(upper) > 0:
for n in xrange(3, 0, -1):
part = upper[:n] + lower[:n]
if part in parts:
answer += parts[part]
upper, lower = upper[n:], lower[n:]
break
return answer
def test(text, answer):
result = solve(text)
print '%s\t%s\t%s' % ('OK' if result == answer else 'NG', text, result)
if __name__ == '__main__':
0, test( "2ed8aeed/34b0ea5b", "LTRSUNTSJ" );
1, test( "00000200/00000300", "L" );
2, test( "00018000/00010000", "R" );
3, test( "00002000/00006000", "J" );
4, test( "00000700/00000200", "T" );
5, test( "01400000/01c00000", "U" );
6, test( "00003800/00002800", "N" );
7, test( "000c0000/00180000", "S" );
8, test( "00003000/00001800", "Z" );
9, test( "132eae6c/1a64eac6", "LRJTUNSZ" );
10, test( "637572d0/36572698", "ZSNUTJRL" );
11, test( "baddb607/d66b6c05", "LTJZTSSSN" );
12, test( "db74cd75/6dac6b57", "ZZZTJZRJNU" );
13, test( "3606c2e8/1b0d8358", "ZZSSLTJ" );
14, test( "ad98c306/e6cc6183", "UZZZZZZ" );
15, test( "4a4aaee3/db6eeaa6", "JJLLUUNNS" );
16, test( "ecd9bbb6/598cd124", "TSSZZTTRR" );
17, test( "e0000002/40000003", "TL" );
18, test( "a0000007/e0000005", "UN" );
19, test( "c0000003/80000006", "RS" );
20, test( "40000006/c0000003", "JZ" );
21, test( "01da94db/00b3b6b2", "TSUJLRSR" );
22, test( "76eeaaea/24aaeeae", "TRNNUUNU" );
23, test( "1dacaeee/1566e444", "NRJZUTTT" );
24, test( "26c9ac60/6c6d66c0", "JSZLRJZS" );
25, test( "6c977620/36da5360", "ZZLLTNZJ" );
26, test( "069aeae6/0db34eac", "SJSLTUNS" );
27, test( "06d53724/049da56c", "RRULRNJJ" );
28, test( "069b58b0/04d66da0", "RLRSLZJR" );
29, test( "1b6eced4/11b46a9c", "RZZTZNRU" );
30, test( "522e8b80/db6ad900", "JLLJNLJT" );
31, test( "6546cdd0/376c6898", "ZULSZRTL" );
32, test( "4e6d5b70/6ad9d620", "LNSSURST" );
33, test( "37367772/65635256", "SNSZNTNJ" );
34, test( "25535d58/377669cc", "LUUSLTUZ" );
35, test( "0ae6a55d/0eacedcb", "UNSUJUTJ" );
36, test( "76762edc/23536a88", "TZNZJNRT" );