From 875a4d6a86955b958217169be7209f1f079e98c0 Mon Sep 17 00:00:00 2001 From: Kang-min Liu Date: Wed, 20 Jan 2021 09:31:52 +0900 Subject: a solution to pwc 096.2 in Raku. (Levinstein edit distance) --- challenge-096/gugod/raku/ch-2.raku | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 challenge-096/gugod/raku/ch-2.raku diff --git a/challenge-096/gugod/raku/ch-2.raku b/challenge-096/gugod/raku/ch-2.raku new file mode 100644 index 0000000000..bf2e2a1357 --- /dev/null +++ b/challenge-096/gugod/raku/ch-2.raku @@ -0,0 +1,26 @@ +sub MAIN { + my @examples = ( + [ 'kitten', 'sitting' ], + [ 'sunday', 'monday' ], + ); + + for @examples -> ($S1, $S2) { + say "Input: \$S1 = $S1, \$S2 = $S2"; + say "Output: " ~ edit-distance($S1, $S2); + } +} + +sub edit-distance (Str $S1, Str $S2 --> Int) { + my sub lev ($a, $b) { + return $a.chars if $b.chars == 0; + return $b.chars if $a.chars == 0; + return lev( $a.substr(1), $b.substr(1) ) if $a.substr(0,1) eq $b.substr(0,1); + return 1 + ( + lev($a, $b.substr(1)), + lev($a.substr(1), $b), + lev($a.substr(1), $b.substr(1)), + ).min; + }; + + return lev($S1, $S2); +} -- cgit