summaryrefslogtreecommitdiff
path: root/alphametiken.py
diff options
context:
space:
mode:
Diffstat (limited to 'alphametiken.py')
-rwxr-xr-xalphametiken.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/alphametiken.py b/alphametiken.py
new file mode 100755
index 0000000..2091627
--- /dev/null
+++ b/alphametiken.py
@@ -0,0 +1,50 @@
+#!/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"
+
+# Liste der Buchstaben erstellen
+buchstaben = []
+for c in Alphametik:
+ if (c not in "+-*/= ") and (c not in buchstaben):
+ buchstaben.append(c)
+
+lösungen = []
+
+# 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
+
+ if eval(wort):
+ lsg = dict()
+ for j, k in zip(buchstaben, benutzte_zahlen):
+ lsg[j] = k
+
+ print(lsg) # DEBUG
+ lösungen.append(lsg)
+
+w = Alphametik.replace("=", "==")
+ersetze(buchstaben, w)
+
+if len(valides) == 0:
+ print("Keine Lösungen vorhanden")
+else:
+ print("Es konnten folgende Lösungen gefunden werden:")
+ print(lösungen)