summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-11-11 19:40:28 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2014-11-11 19:40:28 +0100
commit554f339b0f0090df7dcad05f082837ae44b4f6cd (patch)
tree71bfda66c9c6273d592c289d11af2824e9152389
parent15389187783b9e4bff9d54bb7d92ea9deff9a695 (diff)
downloadbwinf-33-554f339b0f0090df7dcad05f082837ae44b4f6cd.tar.gz
bwinf-33-554f339b0f0090df7dcad05f082837ae44b4f6cd.zip
Lösung Aufgabenteil 2
-rwxr-xr-xalphametiken.py33
1 files changed, 31 insertions, 2 deletions
diff --git a/alphametiken.py b/alphametiken.py
index c98f7aa..aeeb8e7 100755
--- a/alphametiken.py
+++ b/alphametiken.py
@@ -1,12 +1,15 @@
#!/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.
+# Die Generierung dauert 5 Minuten oder länger.
-import re
+# Programm löst das Alphametik "SUCHEN - MACHT = SPASS" und generiert eines mit einem Rechenzeichen
+
+import re, random
Alphametik = "SUCHEN-MACHT=SPASS"
-lösungen = []
+Zahlen = ["NULL", "EINS", "ZWEI", "DREI", "VIER", "FÜNF", "SECHS", "SIEBEN", "ACHT", "NEUN"]
# Liste der Buchstaben erstellen aus `wort`
def buchstaben_liste(wort):
@@ -48,6 +51,30 @@ def ersetze(b, wort, benutzte_zahlen = [], lösungen = [], alle_buchstaben = Non
return lösungen
+# gibt ein zufälliges Alphametik mit `länge` "Ziffern" vor dem Gleichheitszeichen zurück
+def generiere(länge = 1):
+ while True:
+ rechnung_ok = False
+ while rechnung_ok == False: # sucht nach wahren Gleichungen
+ 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("y", str(random.randrange(0, 9))) # Ergebnis
+ for j in range(länge + 2):
+ alphametik = alphametik.replace("x", str(random.randrange(0, 9)), 1)
+
+ if not "/0" in alphametik: # div by zero vermeiden
+ rechnung_ok = eval(alphametik.replace("=", "=="))
+
+ # jetzt passende Alphametiken suchen oder weitersuchen
+ for j in range(0, 9):
+ alphametik = alphametik.replace(str(j), Zahlen[j])
+
+ l = ersetze(buchstaben_liste(alphametik), alphametik)
+ if len(l) > 0:
+ return alphametik # Geschafft, wir haben eines gefunden!
l = ersetze(buchstaben_liste(Alphametik), Alphametik)
@@ -56,3 +83,5 @@ if len(l) == 0:
else:
print("Es konnten folgende Lösungen gefunden werden:")
print(l)
+
+print(generiere())