Skip to content

Commit

Permalink
Min3, Min3_Kommazahl, string metric functions added to stdlib (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
NotLe0n committed Dec 22, 2023
1 parent 5e983ba commit c225afe
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 2 deletions.
48 changes: 48 additions & 0 deletions lib/stdlib/Duden/Mathe.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -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 <a> und <b>"

[
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 <a>, <b> und <c>"

[
Wenn a <= b ist wird a zurückgegeben.
Wenn a > b ist wird b zurückgegeben.
Expand All @@ -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 <a> und <b>"

[
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 <a>, <b> und <c>"

[
Wenn wert > max ist, wird max zurückgegeben.
Wenn wert < min ist, wird min zurückgegeben.
Expand All @@ -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 <a> und <b>"

[
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 <a>, <b> und <c>"

[
Wenn a <= b ist wird a zurückgegeben.
Wenn a > b ist wird b zurückgegeben.
Expand All @@ -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 <a> und <b>"

[
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 <a>, <b> und <c>"

[
Wenn wert > max ist, wird max zurückgegeben.
Wenn wert < min ist, wird min zurückgegeben.
Expand Down
63 changes: 63 additions & 0 deletions lib/stdlib/Duden/Texte.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -547,3 +547,66 @@ Die öffentliche Funktion Verbinden_Wahrheitswert mit den Parametern liste und t
Gib ret zurück.
Und kann so benutzt werden:
"<liste> mit dem Trennzeichen <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 <t1> in <t2> umzuwandeln",
"die Hamming-Distanz zwischen <t1> und <t2>"

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 <t1> und <t2>"
10 changes: 10 additions & 0 deletions tests/testdata/stdlib/Mathe/Mathe.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
8 changes: 8 additions & 0 deletions tests/testdata/stdlib/Mathe/expected.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
3
99
0
5
5
5
0
-2
13
0
2
2
2
0
7
75
13
Expand Down
18 changes: 17 additions & 1 deletion tests/testdata/stdlib/Texte/Texte.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -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).
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").
14 changes: 13 additions & 1 deletion tests/testdata/stdlib/Texte/expected.txt
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,16 @@ abc--def
a-b-c
1-234-56789-0
1,4-nan-82
wahr-falsch-falsch
wahr-falsch-falsch
0
-1
3
3
4
0
1
2
1
3
8
19

0 comments on commit c225afe

Please sign in to comment.