summaryrefslogtreecommitdiff
path: root/alphametiken2.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-11-11 18:16:17 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2014-11-11 18:16:17 +0100
commit6255b7a2853722d854b02febb27c8d0cc6baad9a (patch)
treea7c70d58a90cc57b8e4fc42156b846b79e347169 /alphametiken2.py
parent6edaf040f4bf7d5e59f897d3e7590987e71e6c32 (diff)
downloadbwinf-33-6255b7a2853722d854b02febb27c8d0cc6baad9a.tar.gz
bwinf-33-6255b7a2853722d854b02febb27c8d0cc6baad9a.zip
Verbesserung
Diffstat (limited to 'alphametiken2.py')
-rwxr-xr-xalphametiken2.py56
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)