Initial release

This commit is contained in:
Francois JUMELLE
2021-05-03 22:32:40 +02:00
commit 20526d93c8
928 changed files with 452368 additions and 0 deletions

60
L'affaire Cicéron.py Normal file
View File

@@ -0,0 +1,60 @@
input = open("ciceron.txt").read().splitlines()
start = "Elyesa Bazna"
stop = "Ludwig Carl Moyzisch"
couples = list()
for i in input:
a,b = i.split("-")
couples.append((a.strip(), b.strip()))
chains = [[start,]]
found = False
while not found:
print(".", end='')
for chain in chains:
latest = chain[-1]
nexts = list()
#cherche les nouveaux contacts
for c in couples:
if latest==c[0] and c[1] not in nexts:
nexts.append(c[1])
elif latest==c[1] and c[0] not in nexts:
nexts.append(c[0])
#Supprime les nouveaux contacts déjà présents dans la chaine
for maillon in chain:
if maillon in nexts:
nexts.remove(maillon)
#Ajoute la liste de nouveaux contacts à la chaine
chain.append(nexts)
#Creation d'une nouvelle chaine pour optimiser la suite en évitant des boucles
new_chains = list()
#Pour chaque chaine
for chain in chains:
#Si le chaine se termine par une liste de contact
if isinstance(chain[-1], list):
#Crée une liste de contacts à garder
children = list()
#Pour chaque nouveau contact
for child in chain[-1]:
#On vérifie qu'ion n'est pas présent dans une autre chaine
for other_chain in chains:
#Si pas déjà présent, on le garde
if child not in other_chain and child not in children:
children.append(child)
#Pour chaque contact à garder, on crée une nouvelle chaine égale à l'ancienne + le nouveau contact
for child in children:
new_chains.append(chain[:-1]+[child,])
#La chaine ne se termine pas par une liste, c'est un cul de sac
else:
# new_chains.append(chain)
pass
#chains est maintenant égal à la nouvelle chain
chains = new_chains
#Si la cible est dans une chaine, c'est gagné!
for chain in chains:
if stop in chain:
solution = chain[1:-1]
found = True
print()
print('"' + '", "'.join(solution) + '"')