summaryrefslogtreecommitdiff
path: root/alphametiken.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-11-20 18:14:25 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2014-11-20 18:14:25 +0100
commit7ee88aae8d8cd440996fc8fec639dc55a50a3b3b (patch)
treed87f59099616b536a00bf9953d985be109945653 /alphametiken.py
parentce21fb5fae3de75cc0be7eb7143ce87a313d426c (diff)
downloadbwinf-33-7ee88aae8d8cd440996fc8fec639dc55a50a3b3b.tar.gz
bwinf-33-7ee88aae8d8cd440996fc8fec639dc55a50a3b3b.zip
kleinere Optimierungen und Dokumentation
Diffstat (limited to 'alphametiken.py')
-rwxr-xr-xalphametiken.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/alphametiken.py b/alphametiken.py
index ff13108..37c0c2e 100755
--- a/alphametiken.py
+++ b/alphametiken.py
@@ -10,12 +10,14 @@ import re, random
Alphametik = "SUCHEN-MACHT=SPASS"
Zahlen = ["EINS", "ZWEI", "DREI", "VIER", "FÜNF", "SECHS", "SIEBEN", "ACHT", "NEUN", "ZEHN"]
+#Rechenzeichen = ["+", "-", "*", "/"]
+Rechenzeichen = ["+", "-"] # schneller
# Liste der Buchstaben erstellen aus `wort`
def buchstaben_liste(wort):
buchstaben = []
for c in wort:
- if (c not in "+-*/= ") and (c not in buchstaben):
+ if (c not in Rechenzeichen) and (c not in buchstaben) and (c not in " ="):
buchstaben.append(c)
return buchstaben
@@ -51,6 +53,10 @@ def ersetze(b, wort, benutzte_zahlen = [], lösungen = [], alle_buchstaben = Non
return lösungen
+# kleiner Wrapper, der die Benutzung von `ersetze` vereinfacht
+def löse(alpham):
+ return ersetze(buchstaben_liste(alpham), alpham)
+
# gibt ein zufälliges Alphametik mit `länge` "Ziffern" vor dem Gleichheitszeichen zurück
def generiere(länge = 1):
while True:
@@ -59,7 +65,7 @@ def generiere(länge = 1):
alphametik = "x" + "_x" * länge + "=y" # Template für Rechnung
for j in range(länge + 1): # zufällige Rechenzeichen einsetzen
- alphametik = alphametik.replace("_", random.choice(["+", "-", "*", "/"]), 1)
+ alphametik = alphametik.replace("_", random.choice(Rechenzeichen), 1)
alphametik = alphametik.replace("y", str(random.randrange(1, 9))) # Ergebnis
for j in range(länge + 2):
@@ -71,12 +77,12 @@ def generiere(länge = 1):
for j in range(1, 10):
alphametik = alphametik.replace(str(j), Zahlen[j - 1])
- l = ersetze(buchstaben_liste(alphametik), alphametik)
+ l = löse(alphametik)
if len(l) > 0:
return alphametik # Geschafft, wir haben eines gefunden!
if __name__ == "__main__":
- l = ersetze(buchstaben_liste(Alphametik), Alphametik)
+ l = löse(Alphametik)
if len(l) == 0:
print("Keine Lösungen vorhanden")