diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-11 19:40:28 +0100 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-11 19:40:28 +0100 |
| commit | 554f339b0f0090df7dcad05f082837ae44b4f6cd (patch) | |
| tree | 71bfda66c9c6273d592c289d11af2824e9152389 | |
| parent | 15389187783b9e4bff9d54bb7d92ea9deff9a695 (diff) | |
| download | bwinf-33-554f339b0f0090df7dcad05f082837ae44b4f6cd.tar.gz bwinf-33-554f339b0f0090df7dcad05f082837ae44b4f6cd.zip | |
Lösung Aufgabenteil 2
| -rwxr-xr-x | alphametiken.py | 33 |
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()) |
