diff options
| -rw-r--r-- | challenge-096/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/perl/ch-1.pl | 9 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/perl/ch-2.pl | 57 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/perl/edit-distance-perl | 57 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/perl/reverse-words-perl | 9 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/raku/ch-1.raku | 5 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/raku/ch-2.raku | 48 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/raku/edit-distance | 48 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/raku/reverse-words | 5 | ||||
| -rwxr-xr-x | challenge-096/arne-sommer/raku/reverse-words-oneliner | 3 |
10 files changed, 242 insertions, 0 deletions
diff --git a/challenge-096/arne-sommer/blog.txt b/challenge-096/arne-sommer/blog.txt new file mode 100644 index 0000000000..30188f7a31 --- /dev/null +++ b/challenge-096/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/reversed-distance.html diff --git a/challenge-096/arne-sommer/perl/ch-1.pl b/challenge-096/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..59402b33ba --- /dev/null +++ b/challenge-096/arne-sommer/perl/ch-1.pl @@ -0,0 +1,9 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +my $N = $ARGV[0] // die "Specify a string"; + +say '"', join(" ", reverse(split(/\s+/, $N))), '"'; diff --git a/challenge-096/arne-sommer/perl/ch-2.pl b/challenge-096/arne-sommer/perl/ch-2.pl new file mode 100755 index 0000000000..6529947019 --- /dev/null +++ b/challenge-096/arne-sommer/perl/ch-2.pl @@ -0,0 +1,57 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use List::Util 'min'; + +use feature 'say'; +use feature 'signatures'; + +no warnings qw(experimental::signatures); + +my $S1 = shift(@ARGV) // die 'Please specify $S1 and $S2'; +my $S2 = shift(@ARGV) // die 'Please specify $S2'; + +say wagner_fischer($S1, $S2); + +sub wagner_fischer ($s, $t) +{ + my $m = length $s; + my $n = length $t; + + my @s = ( "", split("", $s) ); + my @t = ( "", split("", $t) ); + + my @d; + + for my $i (1 .. $m) + { + $d[$i][0] = $i; + + for my $j (1 .. $n) + { + $d[$i][$j] = 0; + } + } + + for my $j (0 .. $n) + { + $d[0][$j] = $j; + } + + for my $i (1 .. $m) + { + for my $j (1 .. $n) + { + my $cost = $s[$i] eq $t[$j] + ? 0 + : 1; + + $d[$i][$j] = min( $d[$i-1][$j] +1, # Deletion + $d[$i][$j-1] +1, # Insertion + $d[$i-1][$j-1] +$cost); # Deletion + } + } + + return $d[$m][$n]; +} diff --git a/challenge-096/arne-sommer/perl/edit-distance-perl b/challenge-096/arne-sommer/perl/edit-distance-perl new file mode 100755 index 0000000000..6529947019 --- /dev/null +++ b/challenge-096/arne-sommer/perl/edit-distance-perl @@ -0,0 +1,57 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use List::Util 'min'; + +use feature 'say'; +use feature 'signatures'; + +no warnings qw(experimental::signatures); + +my $S1 = shift(@ARGV) // die 'Please specify $S1 and $S2'; +my $S2 = shift(@ARGV) // die 'Please specify $S2'; + +say wagner_fischer($S1, $S2); + +sub wagner_fischer ($s, $t) +{ + my $m = length $s; + my $n = length $t; + + my @s = ( "", split("", $s) ); + my @t = ( "", split("", $t) ); + + my @d; + + for my $i (1 .. $m) + { + $d[$i][0] = $i; + + for my $j (1 .. $n) + { + $d[$i][$j] = 0; + } + } + + for my $j (0 .. $n) + { + $d[0][$j] = $j; + } + + for my $i (1 .. $m) + { + for my $j (1 .. $n) + { + my $cost = $s[$i] eq $t[$j] + ? 0 + : 1; + + $d[$i][$j] = min( $d[$i-1][$j] +1, # Deletion + $d[$i][$j-1] +1, # Insertion + $d[$i-1][$j-1] +$cost); # Deletion + } + } + + return $d[$m][$n]; +} diff --git a/challenge-096/arne-sommer/perl/reverse-words-perl b/challenge-096/arne-sommer/perl/reverse-words-perl new file mode 100755 index 0000000000..59402b33ba --- /dev/null +++ b/challenge-096/arne-sommer/perl/reverse-words-perl @@ -0,0 +1,9 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +my $N = $ARGV[0] // die "Specify a string"; + +say '"', join(" ", reverse(split(/\s+/, $N))), '"'; diff --git a/challenge-096/arne-sommer/raku/ch-1.raku b/challenge-096/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..c61618a219 --- /dev/null +++ b/challenge-096/arne-sommer/raku/ch-1.raku @@ -0,0 +1,5 @@ +#! /usr/bin/env raku + +unit sub MAIN ($S); + +say '"' ~ $S.words.reverse.join(" ") ~ '"'; diff --git a/challenge-096/arne-sommer/raku/ch-2.raku b/challenge-096/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..66f7028197 --- /dev/null +++ b/challenge-096/arne-sommer/raku/ch-2.raku @@ -0,0 +1,48 @@ +#! /usr/bin/env raku + +sub MAIN ($S1, $S2) +{ + say wagner-fischer($S1, $S2); +} + +sub wagner-fischer (Str $s, Str $t) +{ + my $m = $s.chars; + my $n = $t.chars; + + my @s = " $s".comb; + my @t = " $t".comb; + + my @d; + + for 1 .. $m -> $i + { + @d[$i][0] = $i; + + for 1 .. $n -> $j + { + @d[$i][$j] = 0; + } + } + + for 0 .. $n -> $j + { + @d[0][$j] = $j; + } + + for 1 .. $m -> $i + { + for 1 .. $n -> $j + { + my $cost = @s[$i] eq @t[$j] + ?? 0 + !! 1; + + @d[$i][$j] = min( @d[$i-1][$j] +1, # Deletion + @d[$i][$j-1] +1, # Insertion + @d[$i-1][$j-1] +$cost); # Deletion + } + } + + return @d[$m][$n]; +} diff --git a/challenge-096/arne-sommer/raku/edit-distance b/challenge-096/arne-sommer/raku/edit-distance new file mode 100755 index 0000000000..66f7028197 --- /dev/null +++ b/challenge-096/arne-sommer/raku/edit-distance @@ -0,0 +1,48 @@ +#! /usr/bin/env raku + +sub MAIN ($S1, $S2) +{ + say wagner-fischer($S1, $S2); +} + +sub wagner-fischer (Str $s, Str $t) +{ + my $m = $s.chars; + my $n = $t.chars; + + my @s = " $s".comb; + my @t = " $t".comb; + + my @d; + + for 1 .. $m -> $i + { + @d[$i][0] = $i; + + for 1 .. $n -> $j + { + @d[$i][$j] = 0; + } + } + + for 0 .. $n -> $j + { + @d[0][$j] = $j; + } + + for 1 .. $m -> $i + { + for 1 .. $n -> $j + { + my $cost = @s[$i] eq @t[$j] + ?? 0 + !! 1; + + @d[$i][$j] = min( @d[$i-1][$j] +1, # Deletion + @d[$i][$j-1] +1, # Insertion + @d[$i-1][$j-1] +$cost); # Deletion + } + } + + return @d[$m][$n]; +} diff --git a/challenge-096/arne-sommer/raku/reverse-words b/challenge-096/arne-sommer/raku/reverse-words new file mode 100755 index 0000000000..c61618a219 --- /dev/null +++ b/challenge-096/arne-sommer/raku/reverse-words @@ -0,0 +1,5 @@ +#! /usr/bin/env raku + +unit sub MAIN ($S); + +say '"' ~ $S.words.reverse.join(" ") ~ '"'; diff --git a/challenge-096/arne-sommer/raku/reverse-words-oneliner b/challenge-096/arne-sommer/raku/reverse-words-oneliner new file mode 100755 index 0000000000..219d084f7a --- /dev/null +++ b/challenge-096/arne-sommer/raku/reverse-words-oneliner @@ -0,0 +1,3 @@ +#! /usr/bin/env raku + +unit sub MAIN ($S where $S.words.reverse.join(" ").map({ '"' ~ $_ ~ '"' }).join.say); |
