diff options
Diffstat (limited to 'alphametiken2.py')
| -rwxr-xr-x | alphametiken2.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/alphametiken2.py b/alphametiken2.py new file mode 100755 index 0000000..7b44143 --- /dev/null +++ b/alphametiken2.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +# Nicht als root ausführen. +# Die Ausführung dauert bis zu zwei Minuten, abhängig von der Länge des Alphametiks. + +import re + +Alphametik = "SUCHEN - MACHT = SPASS" +Zahlen = ["EINS", "ZWEI", "DREI", "VIER", "FÜNF", "SECHS", "SIEBEN", "ACHT", "NEUN"] + +lösungen = [] + +Alphametik_buchstaben = [] +# Liste der Buchstaben erstellen aus `wort` +def buchstaben_liste(wort): + buchstaben = [] + for c in wort: + if (c not in "+-*/= ") and (c not in buchstaben): + buchstaben.append(c) + + return buchstaben + +# Ersetzt einen Buchstaben aus `b` in einem Wort `wort` nacheinander durch `0-9` +# und ruft sich selbst auf. Ist `b` leer, wird das Alphametik auf Richtigkeit getestet +# und ggf. zu `lösungen` hinzugefügt. +def ersetze(b, wort, benutzte_zahlen = []): + if len(b): + for j in range(10): + if j in benutzte_zahlen: # jede Zahl nur einmal verwenden + continue + + m_benutzte_zahlen = benutzte_zahlen[:] + m_benutzte_zahlen.append(j) + + m_wort = wort.replace(b[0], str(j)) + ersetze(b[1:], m_wort, m_benutzte_zahlen) + else: + if re.search(r"\b0", wort): # 0 als erste Ziffer in einer Zahl ist nicht erlaubt + return + wort = wort.replace("=", "==") + + if eval(wort): + lsg = dict() + for j, k in zip(Alphametik_buchstaben, benutzte_zahlen): + lsg[j] = k + + print(lsg) # DEBUG + lösungen.append(lsg) + +Alphametik_buchstaben = buchstaben_liste(Alphametik) +ersetze(Alphametik_buchstaben, Alphametik) + +if len(lösungen) == 0: + print("Keine Lösungen vorhanden") +else: + print("Es konnten folgende Lösungen gefunden werden:") + print(lösungen) |
