#!/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" Zahlen = ["EINS", "ZWEI", "DREI", "VIER", "FÜNF", "SECHS", "SIEBEN", "ACHT", "NEUN"] lösungen = [] Alphametik_buchstaben = [] # 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 = []): 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 wort = wort.replace("=", "==") if eval(wort): lsg = dict() for j, k in zip(Alphametik_buchstaben, benutzte_zahlen): lsg[j] = k print(lsg) # DEBUG lösungen.append(lsg) Alphametik_buchstaben = buchstaben_liste(Alphametik) ersetze(Alphametik_buchstaben, Alphametik) if len(lösungen) == 0: print("Keine Lösungen vorhanden") else: print("Es konnten folgende Lösungen gefunden werden:") print(lösungen)