aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-096/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-096/arne-sommer/perl/ch-1.pl9
-rwxr-xr-xchallenge-096/arne-sommer/perl/ch-2.pl57
-rwxr-xr-xchallenge-096/arne-sommer/perl/edit-distance-perl57
-rwxr-xr-xchallenge-096/arne-sommer/perl/reverse-words-perl9
-rwxr-xr-xchallenge-096/arne-sommer/raku/ch-1.raku5
-rwxr-xr-xchallenge-096/arne-sommer/raku/ch-2.raku48
-rwxr-xr-xchallenge-096/arne-sommer/raku/edit-distance48
-rwxr-xr-xchallenge-096/arne-sommer/raku/reverse-words5
-rwxr-xr-xchallenge-096/arne-sommer/raku/reverse-words-oneliner3
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);