diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-23 12:18:04 +0100 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-23 12:18:04 +0100 |
| commit | 5d3189d7345dd3b26a5753a16020ed4f7df0c4b1 (patch) | |
| tree | 8b260aa3116d6a2cdf58950e332726a3678754d3 /alphametiken.py | |
| parent | c8aa48924b284512075432b042ca15c31394ed14 (diff) | |
| download | bwinf-33-5d3189d7345dd3b26a5753a16020ed4f7df0c4b1.tar.gz bwinf-33-5d3189d7345dd3b26a5753a16020ed4f7df0c4b1.zip | |
Verschieben aller Dateien in Unterordner
Diffstat (limited to 'alphametiken.py')
| -rwxr-xr-x | alphametiken.py | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/alphametiken.py b/alphametiken.py deleted file mode 100755 index fb4324c..0000000 --- a/alphametiken.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# getestet mit Python 2.7.8 und 3.4.2 -'''Generiert oder löst Alphametiken''' -# Nicht als root ausführen. -# Die Ausführung dauert bis zu zwei Minuten, abhängig von der Länge des -# Alphametiks. Die Generierung dauert unter Umständen 5 Minuten oder länger. - -# Programm löst das Alphametik "SUCHEN-MACHT=SPASS" -# und generiert eines mit einem Rechenzeichen - -import re, random - -ALPHAMETIK = "SUCHEN-MACHT=SPASS" - -ZAHLEN = ["EINS", "ZWEI", "DREI", "VIER", "FÜNF", \ - "SECHS", "SIEBEN", "ACHT", "NEUN", "ZEHN"] -#RECHENZEICHEN = ["+", "-", "*", "/"] -RECHENZEICHEN = ["+", "-"] # schneller - -def buchstaben_liste(wort): - '''Erstellt eine Liste der Buchstaben''' - buchstaben = [] - for char in wort: - if (char not in RECHENZEICHEN) \ - and (char not in buchstaben) \ - and (char not in " ="): - - buchstaben.append(char) - - return buchstaben - -def ersetze(buchst, wort, \ - benutzte_zahlen=None, loesungen=None, alle_buchstaben=None): - '''Ersetzt einen Buchstaben aus `buchst` in einem Wort `wort` \ -nacheinander durch `0-9` und ruft sich selbst auf. \ -Ist `buchst` leer, wird das Alphametik auf Richtigkeit getestet -und ggf. zu `loesungen` hinzugefügt. \ -Zurückgegeben wird eine Liste mit Lösungen. \ -Element der Liste ist der Rechnungsstring und ein dict.''' - - if alle_buchstaben == None: - alle_buchstaben = buchst - if benutzte_zahlen == None: - benutzte_zahlen = [] - if loesungen == None: - loesungen = [] - - if len(buchst): - 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(buchst[0], str(j)) - ersetze(buchst[1:], m_wort, m_benutzte_zahlen, \ - loesungen, alle_buchstaben) - else: - if re.search(r"\b0", wort): - # 0 als erste Ziffer in einer Zahl ist nicht erlaubt - return - - if eval(wort.replace("=", "==")): - lsg = [wort, dict()] - for j, k in zip(alle_buchstaben, benutzte_zahlen): - lsg[1][j] = k - - loesungen.append(lsg) - - return loesungen - -def loese(alpham): - '''kleiner Wrapper, der die Benutzung von `ersetze` vereinfacht''' - return ersetze(buchstaben_liste(alpham), alpham, None, None, None) - -def generiere(laenge=1): - '''gibt ein zufälliges Alphametik mit `laenge` \ -"Ziffern" vor dem Gleichheitszeichen zurück''' - while True: - rechnung_ok = False - while rechnung_ok == False: # sucht nach wahren Gleichungen - alphametik = "x" + "_x" * laenge + "=y" # Template für Rechnung - - for j in range(laenge + 1): # zufällige Rechenzeichen einsetzen - alphametik = alphametik.replace("_", \ - random.choice(RECHENZEICHEN), 1) - - alphametik = alphametik.replace("y", str(random.randrange(1, 9))) - # Ergebnis - - for j in range(laenge + 2): - alphametik = alphametik.replace("x", \ - str(random.randrange(1, 9)), 1) - - rechnung_ok = eval(alphametik.replace("=", "==")) - - # jetzt passende Alphametiken suchen oder weitersuchen - for j in range(1, 10): - alphametik = alphametik.replace(str(j), ZAHLEN[j - 1]) - - loe = loese(alphametik) - if len(loe) > 0: - return alphametik # Geschafft, wir haben eines gefunden! - -if __name__ == "__main__": - LOESUNG = loese(ALPHAMETIK) - - if len(LOESUNG) == 0: - print("Keine Lösungen vorhanden") - else: - print("Es konnten folgende Lösungen gefunden werden:") - print(LOESUNG) - - print(generiere()) |
