From 151200317363d2b04a5326b12dd8cda1fbbf13f4 Mon Sep 17 00:00:00 2001 From: NotLe0n Date: Fri, 22 Dec 2023 12:18:35 +0100 Subject: [PATCH] Min3, Min3_Kommazahl, string metric functions added to stdlib (#39) --- lib/stdlib/Duden/Mathe.ddp | 48 ++++++++++++++++++ lib/stdlib/Duden/Texte.ddp | 63 ++++++++++++++++++++++++ tests/testdata/stdlib/Mathe/Mathe.ddp | 10 ++++ tests/testdata/stdlib/Mathe/expected.txt | 8 +++ tests/testdata/stdlib/Texte/Texte.ddp | 18 ++++++- tests/testdata/stdlib/Texte/expected.txt | 14 +++++- 6 files changed, 159 insertions(+), 2 deletions(-) diff --git a/lib/stdlib/Duden/Mathe.ddp b/lib/stdlib/Duden/Mathe.ddp index d5e46068..ea6c2a32 100644 --- a/lib/stdlib/Duden/Mathe.ddp +++ b/lib/stdlib/Duden/Mathe.ddp @@ -45,6 +45,18 @@ Die öffentliche Funktion Max mit den Parametern a und b vom Typ Zahl und Zahl, Und kann so benutzt werden: "die größere Zahl von und " +[ + Wenn a >= b >= c ist wird a zurückgegeben. + Wenn b >= a >= c ist wird b zurückgegeben. + Wenn a < b < c ist wird c zurückgegeben. +] +Die öffentliche Funktion Max3 mit den Parametern a, b und c vom Typ Zahl, Zahl und Zahl, gibt eine Zahl zurück, macht: + Wenn a größer als, oder b ist und a größer als, oder c ist, gib a zurück. + Wenn b größer als, oder a ist und b größer als, oder c ist, gib b zurück. + Gib c zurück. +Und kann so benutzt werden: + "die größere Zahl von , und " + [ Wenn a <= b ist wird a zurückgegeben. Wenn a > b ist wird b zurückgegeben. @@ -55,6 +67,18 @@ Die öffentliche Funktion Min mit den Parametern a und b vom Typ Zahl und Zahl, Und kann so benutzt werden: "die kleinere Zahl von und " +[ + Wenn a <= b <= c ist wird a zurückgegeben. + Wenn b <= a <= c ist wird b zurückgegeben. + Wenn a > b > c ist wird c zurückgegeben. +] +Die öffentliche Funktion Min3 mit den Parametern a, b und c vom Typ Zahl, Zahl und Zahl, gibt eine Zahl zurück, macht: + Wenn a kleiner als, oder b ist und a kleiner als, oder c ist, gib a zurück. + Wenn b kleiner als, oder a ist und b kleiner als, oder c ist, gib b zurück. + Gib c zurück. +Und kann so benutzt werden: + "die kleinere Zahl von , und " + [ Wenn wert > max ist, wird max zurückgegeben. Wenn wert < min ist, wird min zurückgegeben. @@ -77,6 +101,18 @@ Die öffentliche Funktion Max_Kommazahl mit den Parametern a und b vom Typ Komma Und kann so benutzt werden: "die größere Zahl von und " +[ + Wenn a >= b >= c ist wird a zurückgegeben. + Wenn b >= a >= c ist wird b zurückgegeben. + Wenn a < b < c ist wird c zurückgegeben. +] +Die öffentliche Funktion Max3_Kommazahl mit den Parametern a, b und c vom Typ Kommazahl, Kommazahl und Kommazahl, gibt eine Kommazahl zurück, macht: + Wenn a größer als, oder b ist und a größer als, oder c ist, gib a zurück. + Wenn b größer als, oder a ist und b größer als, oder c ist, gib b zurück. + Gib c zurück. +Und kann so benutzt werden: + "die größere Zahl von , und " + [ Wenn a <= b ist wird a zurückgegeben. Wenn a > b ist wird b zurückgegeben. @@ -87,6 +123,18 @@ Die öffentliche Funktion Min_Kommazahl mit den Parametern a und b vom Typ Komma Und kann so benutzt werden: "die kleinere Zahl von und " +[ + Wenn a <= b <= c ist wird a zurückgegeben. + Wenn b <= a <= c ist wird b zurückgegeben. + Wenn a > b > c ist wird c zurückgegeben. +] +Die öffentliche Funktion Min3_Kommazahl mit den Parametern a, b und c vom Typ Kommazahl, Kommazahl und Kommazahl, gibt eine Kommazahl zurück, macht: + Wenn a kleiner als, oder b ist und a kleiner als, oder c ist, gib a zurück. + Wenn b kleiner als, oder a ist und b kleiner als, oder c ist, gib b zurück. + Gib c zurück. +Und kann so benutzt werden: + "die kleinere Zahl von , und " + [ Wenn wert > max ist, wird max zurückgegeben. Wenn wert < min ist, wird min zurückgegeben. diff --git a/lib/stdlib/Duden/Texte.ddp b/lib/stdlib/Duden/Texte.ddp index 5d4b5ce7..3519b248 100644 --- a/lib/stdlib/Duden/Texte.ddp +++ b/lib/stdlib/Duden/Texte.ddp @@ -547,3 +547,66 @@ Die öffentliche Funktion Verbinden_Wahrheitswert mit den Parametern liste und t Gib ret zurück. Und kann so benutzt werden: " mit dem Trennzeichen zum Text verbunden" + +[ + Berechnet die Hamming_Distanz zwischen t1 und t2: + "karolin" und "kathrin" ist 3. + "karolin" und "kerstin" ist 3. + "kathrin" und "kerstin" ist 4 + + Wenn die Länge der beiden Texte ungleich ist, wird -1 zurückgegeben: + "karolin" und "karoli" ist -1. +] +Die öffentliche Funktion Hamming_Distanz mit den Parametern t1 und t2 vom Typ Text und Text, gibt eine Zahl zurück, macht: + Wenn die Länge von t1 ungleich die Länge von t2 ist, gib -1 zurück. + Die Zahl summe ist 0. + Für jede Zahl i von 1 bis die Länge von t1, mache: + Wenn t1 an der Stelle i ungleich t2 an der Stelle i ist, erhöhe summe um 1. + Gib summe zurück. +Und kann so benutzt werden: + "die Zahl der Änderungen benötigt um in umzuwandeln", + "die Hamming-Distanz zwischen und " + +Binde Min3 aus "Duden/Mathe" ein. +[ + Berechnet die Levenshtein Distanz zwischen zwei Texten: + "Bar" und "Bar" ist 0 + "Bar" und "Bir" ist 1 + "Bar" und "Bier" ist 2 + "Bar" und "Ba" ist 1 + "kitten" und "sitting" ist 3 + "Google" und "Facebook" ist 8 + "Die Deutsche Programmiersprache" und "The German Programming language" ist 19 +] +Die öffentliche Funktion Levenshtein_Distanz mit den Parametern t1 und t2 vom Typ Text und Text, gibt eine Zahl zurück, macht: + Die Zahl m ist die Länge von t1. + Die Zahl n ist die Länge von t2. + + Die Zahlen Liste cost ist n plus 1 Mal 0. + Die Zahlen Liste newCost ist n plus 1 Mal 0. + + Für jede Zahl i von 0 bis n, mache: + Speichere i in cost an der Stelle (i plus 1). + + Für jede Zahl i von 0 bis m minus 1, mache: + Speichere (i plus 1) in newCost an der Stelle 1. + + Für jede Zahl j von 0 bis n minus 1, mache: + Die Zahl deletionCost ist cost an der Stelle (j plus 2) plus 1. + Die Zahl insertionCost ist newCost an der Stelle (j plus 1) plus 1. + Die Zahl substitutionCost ist 0. + + Wenn t1 an der Stelle (i plus 1) gleich t2 an der Stelle (j plus 1) ist, dann: + Speichere cost an der Stelle (j plus 1) in substitutionCost. + Sonst: + Speichere cost an der Stelle (j plus 1) plus 1 in substitutionCost. + + + Die Zahl c ist (die kleinere Zahl von deletionCost, insertionCost und substitutionCost). + Speichere c in newCost an der Stelle (j plus 2). + Die Zahlen Liste temp ist cost. + Speichere newCost in cost. + Speichere temp in newCost. + Gib cost an der Stelle (n plus 1) zurück. +Und kann so benutzt werden: + "die Levenshtein-Distanz zwischen und " \ No newline at end of file diff --git a/tests/testdata/stdlib/Mathe/Mathe.ddp b/tests/testdata/stdlib/Mathe/Mathe.ddp index a11497aa..6ca921fa 100644 --- a/tests/testdata/stdlib/Mathe/Mathe.ddp +++ b/tests/testdata/stdlib/Mathe/Mathe.ddp @@ -5,10 +5,20 @@ Schreibe (die größere Zahl von 2 und 3) auf eine Zeile. Schreibe (die größere Zahl von 99 und 42) auf eine Zeile. Schreibe (die größere Zahl von 0 und 0) auf eine Zeile. +Schreibe (die größere Zahl von 5, 2 und 3) auf eine Zeile. +Schreibe (die größere Zahl von 2, 5 und 3) auf eine Zeile. +Schreibe (die größere Zahl von 2, 3 und 5) auf eine Zeile. +Schreibe (die größere Zahl von 0, 0 und 0) auf eine Zeile. + Schreibe (die kleinere Zahl von -2 und 5) auf eine Zeile. Schreibe (die kleinere Zahl von 60 und 13) auf eine Zeile. Schreibe (die kleinere Zahl von 0 und 0) auf eine Zeile. +Schreibe (die kleinere Zahl von 2, 5 und 3) auf eine Zeile. +Schreibe (die kleinere Zahl von 5, 2 und 3) auf eine Zeile. +Schreibe (die kleinere Zahl von 5, 3 und 2) auf eine Zeile. +Schreibe (die kleinere Zahl von 0, 0 und 0) auf eine Zeile. + Schreibe (7 zwischen -30 und 10) auf eine Zeile. Schreibe (45 zwischen 75 und 95) auf eine Zeile. Schreibe (18 zwischen 2 und 13) auf eine Zeile. diff --git a/tests/testdata/stdlib/Mathe/expected.txt b/tests/testdata/stdlib/Mathe/expected.txt index 8b71bc43..d310bd0c 100644 --- a/tests/testdata/stdlib/Mathe/expected.txt +++ b/tests/testdata/stdlib/Mathe/expected.txt @@ -1,9 +1,17 @@ 3 99 0 +5 +5 +5 +0 -2 13 0 +2 +2 +2 +0 7 75 13 diff --git a/tests/testdata/stdlib/Texte/Texte.ddp b/tests/testdata/stdlib/Texte/Texte.ddp index e370b34e..4102fbfe 100644 --- a/tests/testdata/stdlib/Texte/Texte.ddp +++ b/tests/testdata/stdlib/Texte/Texte.ddp @@ -140,4 +140,20 @@ Schreibe ((eine Liste, die aus "abc", "", "def" besteht) mit dem Trennzeichen '- Schreibe ((eine Liste, die aus 'a', 'b', 'c' besteht) mit dem Trennzeichen '-' zum Text verbunden) auf eine Zeile. Schreibe ((eine Liste, die aus 1, 234, 56789, 0 besteht) mit dem Trennzeichen '-' zum Text verbunden) auf eine Zeile. Schreibe ((eine Liste, die aus 1,4, 0 durch 0, 82,0 besteht) mit dem Trennzeichen '-' zum Text verbunden) auf eine Zeile. -Schreibe ((eine Liste, die aus wahr, falsch, falsch besteht) mit dem Trennzeichen '-' zum Text verbunden). \ No newline at end of file +Schreibe ((eine Liste, die aus wahr, falsch, falsch besteht) mit dem Trennzeichen '-' zum Text verbunden) auf eine Zeile. + +[Hamming_Distanz] +Schreibe (die Hamming-Distanz zwischen "karolin" und "karolin") auf eine Zeile. +Schreibe (die Hamming-Distanz zwischen "karolin" und "karoli") auf eine Zeile. +Schreibe (die Hamming-Distanz zwischen "karolin" und "kathrin") auf eine Zeile. +Schreibe (die Hamming-Distanz zwischen "karolin" und "kerstin") auf eine Zeile. +Schreibe (die Hamming-Distanz zwischen "kathrin" und "kerstin") auf eine Zeile. + +[Levenshtein_Distanz] +Schreibe (die Levenshtein-Distanz zwischen "Bar" und "Bar") auf eine Zeile. +Schreibe (die Levenshtein-Distanz zwischen "Bar" und "Bir") auf eine Zeile. +Schreibe (die Levenshtein-Distanz zwischen "Bar" und "Bier") auf eine Zeile. +Schreibe (die Levenshtein-Distanz zwischen "Bar" und "Ba") auf eine Zeile. +Schreibe (die Levenshtein-Distanz zwischen "kitten" und "sitting") auf eine Zeile. +Schreibe (die Levenshtein-Distanz zwischen "Google" und "Facebook") auf eine Zeile. +Schreibe (die Levenshtein-Distanz zwischen "Die Deutsche Programmiersprache" und "The German Programming language"). \ No newline at end of file diff --git a/tests/testdata/stdlib/Texte/expected.txt b/tests/testdata/stdlib/Texte/expected.txt index 1cb7f9b9..a44ccfc7 100644 --- a/tests/testdata/stdlib/Texte/expected.txt +++ b/tests/testdata/stdlib/Texte/expected.txt @@ -68,4 +68,16 @@ abc--def a-b-c 1-234-56789-0 1,4-nan-82 -wahr-falsch-falsch \ No newline at end of file +wahr-falsch-falsch +0 +-1 +3 +3 +4 +0 +1 +2 +1 +3 +8 +19 \ No newline at end of file