Skyduino:~#
Articles
programmation, python

[Python] Cheat concours google – Release

Salut à tous !

Le concours google qui proposé de gagner plusieurs chromebook étant finis depuis longtemps je release le code source de mon script python qui permettait de trouver en quelque seconde la solution du casse-tête N°3.

C’est un bon exemple d’utilisation des permutation et de plein d’autres truc bien.

PS: je n’est pas participé au concours 😉 c’était juste pour le défis.

# -*- coding: utf-8 -*-

# Google puzzle 3 
# static cipher
# brute forcing method
# All result must be equal to 24

# permutations
def all_perms(str):
    if len(str) <=1:
        yield str
    else:
        for perm in all_perms(str[1:]):
            for i in range(len(perm)+1):
                yield perm[:i] + str[0:1] + perm[i:]

# validation
def perm_valid(str):
    result = 0
    result = eval(str)
    if (result == 24):
        return True
    else:
        return False

# lettre
#A= ''
B= [ '*', '+', '-' ]
C= [ '*', '*', '*' ]
D= [ '*', '*', '+' ]
E= [ '*', '*', '-' ]
F= [ '+', '+', '+' ]
G= [ '+', '+', '-' ]
H= [ '*', '/', '/' ]
I= [ '*', '*', '/' ]
J= [ '/', '/', '+' ]
K= [ '-', '-', '-' ]
L= [ '/', '-', '-' ]
M= [ '/', '+', '-' ]
N= [ '*', '/', '-' ]
O= [ '*', '/', '+' ]
P= [ '/', '/', '-' ]
Q= [ '/', '/', '/' ]
R= [ '+', '-', '-' ]
S= [ '*', '+', '+' ]
T= [ '*', '-', '-' ] 
U= [ '/', '+', '+' ]
letter = [B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U]
label = ['B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U']

# calcul
C1 = [ 6, 6, 6, 9 ] #ok
C2 = [ 5, 5, 9, 9 ]
C3 = [ 4, 5, 10, 11 ]
C4 = [ 10, 12, 12, 12 ]
C5 = [ 1, 1, 13, 13 ]
C6 = [ 2, 8, 9, 12 ]
C7 = [ 4, 4, 7, 13 ]
C8 = [ 2, 5, 7, 9 ]
C9 = [ 3, 5, 12, 12 ]
C10 = [ 3, 8, 8, 12 ]
C11 = [ 8, 8,12 ,13 ]
C12 = [ 4, 7, 8, 10 ]
C13 = [ 4, 5, 10, 12 ]
C14 = [ 4, 4, 5, 5 ]
C15 = [ 1, 1, 2, 11 ]
C16 = [ 3, 3, 3, 5 ]
C17 = [ 2, 3, 5, 6 ]
C18 = [ 2, 3, 12, 12 ]
C19 = [ 11, 12, 13, 13 ]
C20 = [ 3, 4, 5, 10 ]
C21 = [ 5, 9, 10, 11 ] #ok
C22 = [ 3, 3, 5, 10 ]
C23 = [ 2, 5, 8, 8 ]
C24 = [ 2, 2, 2, 3 ]
C25 = [ 2, 5, 6, 9 ]
C26 = [ 3, 9, 9, 11 ]
C27 = [ 2, 2, 5, 7 ]
C28 = [ 3, 3, 3, 11 ]
C29 = [ 2, 5, 7, 7 ]
compute = [C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29]

raw_result = ['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','']
for calcul in range(0,29):
    for cp in all_perms(compute[calcul]):
        for operator in range(0,20):
            for lp in all_perms(letter[operator]):
                posibility = str(cp[0]) + ".0" + lp[0] + str(cp[1]) + ".0" + lp[1] + str(cp[2]) + ".0" + lp[2] + str(cp[3]) + ".0"
                if perm_valid(posibility):
                    if raw_result[calcul] != label[operator]:
                        print "FOUND : CALCUL %d -> %c" % (calcul+1, label[operator])
                        raw_result[calcul] = label[operator]

print " "
print "FINAL RESULT : %s" % ''.join([ch for ch in raw_result])

Ce qui donnait :

FOUND : CALCUL 1 -> I
FOUND : CALCUL 2 -> N
FOUND : CALCUL 3 -> T
FOUND : CALCUL 4 -> E
FOUND : CALCUL 5 -> R
FOUND : CALCUL 6 -> N
FOUND : CALCUL 7 -> E
FOUND : CALCUL 8 -> T
FOUND : CALCUL 9 -> E
FOUND : CALCUL 10 -> N
FOUND : CALCUL 11 -> M
FOUND : CALCUL 12 -> O
FOUND : CALCUL 13 -> I
FOUND : CALCUL 14 -> N
FOUND : CALCUL 15 -> S
FOUND : CALCUL 16 -> D
FOUND : CALCUL 17 -> E
FOUND : CALCUL 18 -> H
FOUND : CALCUL 19 -> U
FOUND : CALCUL 20 -> I
FOUND : CALCUL 21 -> T
FOUND : CALCUL 22 -> S
FOUND : CALCUL 23 -> E
FOUND : CALCUL 24 -> C
FOUND : CALCUL 25 -> O
FOUND : CALCUL 26 -> N
FOUND : CALCUL 27 -> D
FOUND : CALCUL 28 -> E
FOUND : CALCUL 29 -> S

FINAL RESULT : INTERNETENMOINSDEHUITSECONDES

La réponse du casse-tête était : « Internet en moins de huit secondes »

Publicités

Discussion

Pas encore de commentaire.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.