diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-11 18:41:47 +0100 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-11 18:41:47 +0100 |
| commit | 15389187783b9e4bff9d54bb7d92ea9deff9a695 (patch) | |
| tree | b99cc64ff87f86b590075a3c659197e375308d75 | |
| parent | a9c311c289a9bd497eeedaf93398173a5e9d888e (diff) | |
| download | bwinf-33-15389187783b9e4bff9d54bb7d92ea9deff9a695.tar.gz bwinf-33-15389187783b9e4bff9d54bb7d92ea9deff9a695.zip | |
Datei verschieben
| -rwxr-xr-x | alphametiken.py | 44 | ||||
| -rwxr-xr-x | alphametiken2.py | 58 |
2 files changed, 26 insertions, 76 deletions
diff --git a/alphametiken.py b/alphametiken.py index 2091627..c98f7aa 100755 --- a/alphametiken.py +++ b/alphametiken.py @@ -4,20 +4,27 @@ import re -Alphametik = "SUCHEN - MACHT = SPASS" - -# Liste der Buchstaben erstellen -buchstaben = [] -for c in Alphametik: - if (c not in "+-*/= ") and (c not in buchstaben): - buchstaben.append(c) +Alphametik = "SUCHEN-MACHT=SPASS" lösungen = [] +# 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 = []): +# Zurückgegeben wird eine Liste mit Lösungen, Element der Liste ist der Rechnungsstring und ein dict +def ersetze(b, wort, benutzte_zahlen = [], lösungen = [], alle_buchstaben = None): + if alle_buchstaben == None: + alle_buchstaben = b + if len(b): for j in range(10): if j in benutzte_zahlen: # jede Zahl nur einmal verwenden @@ -27,24 +34,25 @@ def ersetze(b, wort, benutzte_zahlen = []): m_benutzte_zahlen.append(j) m_wort = wort.replace(b[0], str(j)) - ersetze(b[1:], m_wort, m_benutzte_zahlen) + ersetze(b[1:], m_wort, m_benutzte_zahlen, lösungen, alle_buchstaben) else: if re.search(r"\b0", wort): # 0 als erste Ziffer in einer Zahl ist nicht erlaubt return - if eval(wort): - lsg = dict() - for j, k in zip(buchstaben, benutzte_zahlen): - lsg[j] = k + if eval(wort.replace("=", "==")): + lsg = [wort, dict()] + for j, k in zip(alle_buchstaben, benutzte_zahlen): + lsg[1][j] = k - print(lsg) # DEBUG lösungen.append(lsg) -w = Alphametik.replace("=", "==") -ersetze(buchstaben, w) + return lösungen + + +l = ersetze(buchstaben_liste(Alphametik), Alphametik) -if len(valides) == 0: +if len(l) == 0: print("Keine Lösungen vorhanden") else: print("Es konnten folgende Lösungen gefunden werden:") - print(lösungen) + print(l) diff --git a/alphametiken2.py b/alphametiken2.py deleted file mode 100755 index c98f7aa..0000000 --- a/alphametiken2.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/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" - -lösungen = [] - -# 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. -# Zurückgegeben wird eine Liste mit Lösungen, Element der Liste ist der Rechnungsstring und ein dict -def ersetze(b, wort, benutzte_zahlen = [], lösungen = [], alle_buchstaben = None): - if alle_buchstaben == None: - alle_buchstaben = b - - 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, lösungen, 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 - - lösungen.append(lsg) - - return lösungen - - -l = ersetze(buchstaben_liste(Alphametik), Alphametik) - -if len(l) == 0: - print("Keine Lösungen vorhanden") -else: - print("Es konnten folgende Lösungen gefunden werden:") - print(l) |
