diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-23 12:34:00 +0100 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-23 12:34:00 +0100 |
| commit | e4a877a2400bdab3882a47bb4bed1f0777d2cd67 (patch) | |
| tree | b3f191c50118a0637d2f10c7bd437abbf32f87ab | |
| parent | 5d3189d7345dd3b26a5753a16020ed4f7df0c4b1 (diff) | |
| download | bwinf-33-e4a877a2400bdab3882a47bb4bed1f0777d2cd67.tar.gz bwinf-33-e4a877a2400bdab3882a47bb4bed1f0777d2cd67.zip | |
Korrigierung von Tippfehlern und TODOs
| -rw-r--r-- | doc/alphametiken.md | 14 | ||||
| -rw-r--r-- | doc/zahlenspiel.md | 4 | ||||
| -rwxr-xr-x | src/buffet_lotterie.py | 2 | ||||
| -rwxr-xr-x | src/zahlenspiel.py | 4 |
4 files changed, 11 insertions, 13 deletions
diff --git a/doc/alphametiken.md b/doc/alphametiken.md index de06565..dd5c6de 100644 --- a/doc/alphametiken.md +++ b/doc/alphametiken.md @@ -3,20 +3,20 @@ Alphametiken Das Programm ist in zwei Teile gegliedert: -* `löse(zu_lösendes_Alphametikum)` gibt eine Liste mit allen Lösungen eines Alphametikums in dem Format `[['Rechnung', {'Buchstabe': zugehörige_Zahl, ...}], ...]` zurück (zum Beispiel `[['8928-3164=5764', {'Ü': 9, 'F': 8, 'W': 7, 'N': 2, 'Z': 5, 'I': 4, 'E': 6, 'D': 3, 'R': 1}]]` für `FÜNF-DREI=ZWEI`). +* `loese(zu_lösendes_Alphametikum)` gibt eine Liste mit allen Lösungen eines Alphametikums in dem Format `[['Rechnung', {'Buchstabe': zugehörige_Zahl, ...}], ...]` zurück (zum Beispiel `[['8928-3164=5764', {'Ü': 9, 'F': 8, 'W': 7, 'N': 2, 'Z': 5, 'I': 4, 'E': 6, 'D': 3, 'R': 1}]]` für `FÜNF-DREI=ZWEI`). * `generiere(Länge)` gibt ein Alphametikum als String zurück (zum Beispiel `FÜNF-DREI=ZWEI`), für welches mindestens eine Lösung vorhanden ist. Alphametikum lösen ------------------ -Die Funktion `ersetze`, aufgerufen durch `löse`, ersetzt jeweils den ersten Buchstaben im Alphametikum durch eine Zahl, nacheinander 0 bis 9. Für den Rest des Alphametikum-Strings wird die Funktion rekursiv aufgerufen. Ist der letzte Buchstabe ersetzt, wird mithilfe von Pythons `eval`-Funktion überprüft, ob die ersetzten Zahlen zu einer wahren Gleichung führen. Ist dies der Fall, wird die gefundene Lösung in einer Liste festgehalten und nach Überprüfen aller Kombinationen zurückgegeben. +Die Funktion `ersetze`, aufgerufen durch `loese`, ersetzt jeweils den ersten Buchstaben im Alphametikum durch eine Zahl, nacheinander 0 bis 9. Für den Rest des Alphametikum-Strings wird die Funktion rekursiv aufgerufen. Ist der letzte Buchstabe ersetzt, wird mithilfe von Pythons `eval`-Funktion überprüft, ob die ersetzten Zahlen zu einer wahren Gleichung führen. Ist dies der Fall, wird die gefundene Lösung in einer Liste festgehalten und nach Überprüfen aller Kombinationen zurückgegeben. Der Ausnahmefall, dass die Lösung eine Null als erste Ziffer einer Zahl hat, wird durch einen regulären Ausdruck `re.search` überprüft. Um gleiche Zahlen nicht an mehrere Buchstaben zu verteilen wird in der rekursiven Funktion die Liste an bereits verwendeten Zahlen mitgegeben. Beispiel für eine Lösung: ``` >>> import alphametiken ->>> alphametiken.löse("SEND + MORE = MONEY") +>>> alphametiken.loese("SEND + MORE = MONEY") [['9567 + 1085 = 10652', {'O': 0, 'N': 6, 'M': 1, 'E': 5, 'Y': 2, 'S': 9, 'D': 7, 'R': 8}]] ``` @@ -27,7 +27,7 @@ Zum Finden von Alphametiken in der Form `FÜNF-DREI=ZWEI` ist es zuerst nötig, ``` x_x=y ``` -das nun auf Richtigkeit, wieder durch `eval`, geprüft wird. Eine Gleichung wie `5-3=2` wird schließlich mithilfe von Zahlwörtern abgebildet: `FÜNF-DREI=ZWEI`. Jetzt wird mit `löse` geprüft, ob eine Lösung vorhanden ist. Wenn ja, endet die Funktion, sonst wird nach einer neuen Gleichung gesucht. +das nun auf Richtigkeit, wieder durch `eval`, geprüft wird. Eine Gleichung wie `5-3=2` wird schließlich mithilfe von Zahlwörtern abgebildet: `FÜNF-DREI=ZWEI`. Jetzt wird mit `loese` geprüft, ob eine Lösung vorhanden ist. Wenn ja, endet die Funktion, sonst wird nach einer neuen Gleichung gesucht. `random.choice` und `random.randrange` dienen hier zum Finden zufälliger Rechenzeichen und Zahlen. @@ -36,17 +36,17 @@ Beispiel für ein Alphametikum mit mehr als 20 Zeichen: >>> import alphametiken >>> alphametiken.generiere(3) 'FÜNF-ZWEI+VIER-ZWEI=FÜNF' ->>> alphametiken.löse('FÜNF-ZWEI+VIER-ZWEI=FÜNF') +>>> alphametiken.loese('FÜNF-ZWEI+VIER-ZWEI=FÜNF') ... ['9589-3102+6204-3102=9589', {'Z': 3, 'V': 6, 'I': 2, 'Ü': 5, 'R': 4, 'E': 0, 'N': 8, 'F': 9, 'W': 1}] ... >>> alphametiken.generiere() 'SECHS-VIER=ZWEI' ->>> alphametiken.löse('SECHS-VIER=ZWEI') +>>> alphametiken.loese('SECHS-VIER=ZWEI') [['12051-3427=8624', {'H': 5, 'W': 6, 'E': 2, 'Z': 8, 'I': 4, 'S': 1, 'C': 0, 'R': 7, 'V': 3}], >>> alphametiken.generiere(2) 'ACHT-ZWEI-DREI=DREI' ->>> alphametiken.löse('ACHT-ZWEI-DREI=DREI') +>>> alphametiken.loese('ACHT-ZWEI-DREI=DREI') [['4567-2389-1089=1089', {'T': 7, 'A': 4, 'W': 3, 'E': 8, 'Z': 2, 'I': 9, 'H': 6, 'C': 5, 'D': 1, 'R': 0}], ... ``` diff --git a/doc/zahlenspiel.md b/doc/zahlenspiel.md index 50768d8..fdafa93 100644 --- a/doc/zahlenspiel.md +++ b/doc/zahlenspiel.md @@ -3,9 +3,7 @@ Zahlenspiel Die Aufgabe ließe sich mit `random`s `randrange()` lösen. Zu Beginn der Bruchsuche müssen `p` und `q` gefunden werden, die der Anforderung des Schwierigkeitsgrades entsprechen und sich, geschrieben als Bruch, nicht kürzen lassen. Das Nicht-Kürzen-Lassen lässt sich mit dem Greatest Common Divisor (größter gemeinsamer Teiler) berechnen - ist er eins, lässt sich `p/q` nicht kürzen. -Um die Zahlen `p` `q` innerhalb der Schwierigkeitsgrenzen zu halten ist es sinnvoll, nach dem Generieren einer zufälligen Zahl `Maximum > p > 1` die Zahl `q` abhängig davon zu finden: `Maximum - p > q > Minimum - p` - -TODO Minimum - p? +Um die Zahlen `p` `q` innerhalb der Schwierigkeitsgrenzen zu halten ist es sinnvoll, nach dem Generieren einer zufälligen Zahl `Maximum > p > 1` die Zahl `q` abhängig davon zu finden: `Maximum - p > q > Maximum - 10 - p` Als Nächstes gilt es, einen Bruch zu finden, der der Schwierigkeitsstufe entsprechend lang genug ist. Dazu sucht die Funktion, angefangen bei einem Wert von 2, nach einem `x` welches für eine zufriedenstellende Länge des Bruches sorgt. Schießt die Länge über das Ziel hinaus, wird ein neuer Bruch gesucht. diff --git a/src/buffet_lotterie.py b/src/buffet_lotterie.py index 82a7796..fb07213 100755 --- a/src/buffet_lotterie.py +++ b/src/buffet_lotterie.py @@ -36,7 +36,7 @@ def denke(anzahl_teilnehmer, silben): print("Es fehlten " + str(fehlt_noch) + " bis zum Geburtstagskind") if fehlt_noch < einfluss: print("Das Geburtstagskind muss erst " + str(fehlt_noch) + \ - "-mal 'zwei Silben' und dann nur noch 'eine Silbe'" + \ + "-mal 'zwei Silben' und dann nur noch 'eine Silbe' " + \ "sagen, bis es dran ist.") break diff --git a/src/zahlenspiel.py b/src/zahlenspiel.py index e8891f9..caca6de 100755 --- a/src/zahlenspiel.py +++ b/src/zahlenspiel.py @@ -12,8 +12,8 @@ def gcd(vala, valb): return vala def bruch(stufe): - '''Berechnet einen ungekürzten Bruch vala/valb -mit gekürztem Bruch valp/valq nach Schwierigkeits`stufe`. + '''Berechnet einen ungekürzten Bruch a/b +mit gekürztem Bruch p/q nach Schwierigkeits`stufe`. `stufe` ist 0 (leicht), 1 (mittel) oder 2 (schwer)''' length = 4 if stufe == 0 else 5 |
