Skip to content

Instantly share code, notes, and snippets.

@Epithumia
Last active November 4, 2019 01:14
Show Gist options
  • Save Epithumia/5709c9a246a60b85e35fec6b5ee0e44f to your computer and use it in GitHub Desktop.
Save Epithumia/5709c9a246a60b85e35fec6b5ee0e44f to your computer and use it in GitHub Desktop.
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