summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-11-11 18:41:47 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2014-11-11 18:41:47 +0100
commit15389187783b9e4bff9d54bb7d92ea9deff9a695 (patch)
treeb99cc64ff87f86b590075a3c659197e375308d75
parenta9c311c289a9bd497eeedaf93398173a5e9d888e (diff)
downloadbwinf-33-15389187783b9e4bff9d54bb7d92ea9deff9a695.tar.gz
bwinf-33-15389187783b9e4bff9d54bb7d92ea9deff9a695.zip
Datei verschieben
-rwxr-xr-xalphametiken.py44
-rwxr-xr-xalphametiken2.py58
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)