Last active
November 4, 2019 01:14
-
-
Save Epithumia/5709c9a246a60b85e35fec6b5ee0e44f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import datetime as dt | |
import itertools | |
def check_set(e): | |
# On reçoit une liste de liste, on la découpe par ligne | |
annee = e[0] | |
nom = e[1] | |
debut = e[2] | |
fin = e[3] | |
couleur = e[4] | |
fonction = e[5] | |
# On vérifie que pour l'année 1423, ça débute bien le 07/06, si non, on arrête de vérifier | |
if debut[2] != '07/06': | |
return None | |
# Juste après la plus ancienne, c'est vert, idem si c'est non, on arrête | |
if couleur[1] != 'vert': | |
return None | |
n=0 | |
# On vérifie des données sur trapertiplo | |
if fin[nom.index('trapertiplo')] != '20/06' or fonction[nom.index('trapertiplo')] != 'temps': | |
return None | |
# translucator démarre le 05/11 | |
if debut[nom.index('translucator')] != '05/11': | |
return None | |
# Rolamotus est rouge | |
if couleur[nom.index('rolamotus')] != 'rouge': | |
return None | |
# Discotromat pour contacter les amis | |
if fonction[nom.index('discotromat')] != 'amis': | |
return None | |
# L'invention qui commence le 18/01 finit le 13/09 | |
if debut.index('18/01') != fin.index('13/09'): | |
return None | |
# Celle commencée le 23/09 est à côté de celle finie le 13/02 | |
if not((debut.index('23/09') == fin.index('13/02') + 1) or (debut.index('23/09') == fin.index('13/02') - 1)) : | |
return None | |
# Celle commencée le 05/03 est grise | |
if debut.index('05/03') != couleur.index('grise'): | |
return None | |
# Celle qui sert à dupliquer est à côté de celle finie le 13/02 | |
if not((fin.index('13/02') == fonction.index('dupliquer') + 1) or (fin.index('13/02') == fonction.index('dupliquer') - 1)): | |
return None | |
# Bleue avant la grise | |
if couleur.index('grise') >= couleur.index('bleu'): | |
return None | |
# Celle qui rend invisible est finie le 02/10 | |
if fin.index('02/10') != fonction.index('invisible'): | |
return None | |
# Celle finie le 19/12 est jaune | |
if fin.index('19/12') != couleur.index('jaune'): | |
return None | |
# Trapertiplo est commencée et finie la même année, | |
# on vérifie que sa date de début est antérieure à la date de fin | |
trap = nom.index('trapertiplo') | |
dstart = dt.strptime(debut[trap] + '/' + str(annee[trap]), '%d/%m/%Y') | |
dend = dt.strptime(fin[trap] + '/' + str(annee[trap]), '%d/%m/%Y') | |
if dstart > dend: | |
return None | |
# Si on arrive ici, toutes les condtions sont vraies | |
return True | |
def solution(sol, inv='trapertiplo'): # On sait de l'énigme précédente que c'est Trapertiplo qui nous intéresse | |
nom = sol[1] | |
debut = sol[2] | |
fin = sol[3] | |
trap = nom.index(inv) | |
dstart = dt.strptime(debut[trap] + '/' + str(annee[trap]), '%d/%m/%Y') | |
dend = dt.strptime(fin[trap] + '/' + str(annee[trap]), '%d/%m/%Y') | |
print (str((dend-dstart).days+1) + 'JOURS') | |
# Données de base prises sur l'image | |
annee = [1407, 1412, 1423, 1428, 1432] | |
nom = ['depre', 'trapertiplo', 'translucator', 'rolamotus', 'discotromat'] | |
debut = ['07/06', '05/11', '18/01', '23/09', '05/03'] | |
fin = ['13/02', '13/09', '20/06', '19/12', '02/10'] | |
couleur = ['vert', 'rouge', 'jaune', 'bleu', 'grise'] | |
fonction = ['temps', 'dimensions', 'dupliquer', 'invisible', 'amis'] | |
l=[] | |
n = 0 | |
# Le premier nom est "Depre..." d'après un des indices, | |
# on fait donc toutes les permutations possibles des autres noms | |
pnom = list(itertools.permutations(nom[1:])) | |
pnom = [[nom[0]]+ list(x) for x in pnom] | |
for pn in pnom: | |
# Ensuite on fait toutes les permutations des autres éléments de manière itérative | |
ldeb = list(itertools.permutations(debut)) | |
ldeb = [list(x) for x in ldeb] | |
for ld in ldeb: | |
lfin = list(itertools.permutations(fin)) | |
lfin = [list(x) for x in lfin] | |
for lf in lfin: | |
lcou = list(itertools.permutations(couleur)) | |
lcou = [list(x) for x in lcou] | |
for lc in lcou: | |
# Sauf ici où on élague les possibilités pour ne pas avoir 4 miliards de tests à faire. | |
if lc[1] == 'vert' and (pn.index('rolamotus') == lc.index('rouge')): | |
lfon = list(itertools.permutations(fonction)) | |
lfon = [list(x) for x in lfon] | |
for lfo in lfon: | |
if check_set([annee, pn, ld, lf, lc, lfo]): # On vérifie si ça respecte les conditions | |
l.append([annee, pn, ld, lf, lc, lfo]) # Si oui, on l'ajoute aux solutions | |
# Affichage des solutions | |
for p in l: | |
solution(p) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment