From 6edaf040f4bf7d5e59f897d3e7590987e71e6c32 Mon Sep 17 00:00:00 2001 From: schneefux Date: Tue, 11 Nov 2014 18:09:06 +0100 Subject: Alphametik Aufgabenteil a) gelöst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alphametiken.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 alphametiken.py (limited to 'alphametiken.py') diff --git a/alphametiken.py b/alphametiken.py new file mode 100755 index 0000000..2091627 --- /dev/null +++ b/alphametiken.py @@ -0,0 +1,50 @@ +#!/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" + +# Liste der Buchstaben erstellen +buchstaben = [] +for c in Alphametik: + if (c not in "+-*/= ") and (c not in buchstaben): + buchstaben.append(c) + +lösungen = [] + +# 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 = []): + 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) + 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 + + print(lsg) # DEBUG + lösungen.append(lsg) + +w = Alphametik.replace("=", "==") +ersetze(buchstaben, w) + +if len(valides) == 0: + print("Keine Lösungen vorhanden") +else: + print("Es konnten folgende Lösungen gefunden werden:") + print(lösungen) -- cgit v1.3.1