aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-318/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-318/arne-sommer/raku/ch-1.raku30
-rwxr-xr-xchallenge-318/arne-sommer/raku/ch-2.raku39
-rwxr-xr-xchallenge-318/arne-sommer/raku/group-position30
-rwxr-xr-xchallenge-318/arne-sommer/raku/reverse-equals39
5 files changed, 139 insertions, 0 deletions
diff --git a/challenge-318/arne-sommer/blog.txt b/challenge-318/arne-sommer/blog.txt
new file mode 100644
index 0000000000..d257b5b107
--- /dev/null
+++ b/challenge-318/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/reverse-position.html
diff --git a/challenge-318/arne-sommer/raku/ch-1.raku b/challenge-318/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..26ea01e535
--- /dev/null
+++ b/challenge-318/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,30 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str ~~ /^ <[a..z]>+ $/,
+ :v(:$verbose));
+
+sub grouped ($str, :$verbose)
+{
+ my @parts = gather
+ {
+ my $curr;
+ my $count = 0;
+
+ for $str.comb -> $char
+ {
+ if $count && $curr ne $char
+ {
+ take $curr x $count;
+ $count = 0;
+ }
+ $curr = $char;
+ $count++;
+ }
+ take $curr x $count;
+ }
+
+ say ": Grouped '$str' as { @parts.raku }" if $verbose;
+ return @parts;
+}
+
+say grouped($str, :$verbose).grep(*.chars > 2).map('"' ~ * ~ '"').join(", ") || '""';
diff --git a/challenge-318/arne-sommer/raku/ch-2.raku b/challenge-318/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..2a7194284e
--- /dev/null
+++ b/challenge-318/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,39 @@
+#! /usr/bin/env raku
+
+subset NUMWORD where * ~~ /^<[0..9 \s]>+$/;
+
+unit sub MAIN (NUMWORD $source,
+ NUMWORD $target,
+ :v(:$verbose));
+
+my @source = $source.words;
+my @target = $target.words;
+
+die "Not the same elements" unless @source.sort eqv @target.sort;
+
+if @source eqv @target
+{
+ say 'true';
+ exit;
+}
+
+my $end = @target.end;
+
+for ^$end -> $i
+{
+ for $i + 1 .. $end -> $j
+ {
+ my @copy = @source.clone;
+ @copy[$i .. $j] = @copy[$i .. $j].reverse;
+
+ say ": ({ @source.join(",") }) Reverse $i..$j -> ({ @copy.join(",") })" if $verbose;
+
+ if @copy eqv @target
+ {
+ say 'true';
+ exit;
+ }
+ }
+}
+
+say 'false'; \ No newline at end of file
diff --git a/challenge-318/arne-sommer/raku/group-position b/challenge-318/arne-sommer/raku/group-position
new file mode 100755
index 0000000000..26ea01e535
--- /dev/null
+++ b/challenge-318/arne-sommer/raku/group-position
@@ -0,0 +1,30 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str ~~ /^ <[a..z]>+ $/,
+ :v(:$verbose));
+
+sub grouped ($str, :$verbose)
+{
+ my @parts = gather
+ {
+ my $curr;
+ my $count = 0;
+
+ for $str.comb -> $char
+ {
+ if $count && $curr ne $char
+ {
+ take $curr x $count;
+ $count = 0;
+ }
+ $curr = $char;
+ $count++;
+ }
+ take $curr x $count;
+ }
+
+ say ": Grouped '$str' as { @parts.raku }" if $verbose;
+ return @parts;
+}
+
+say grouped($str, :$verbose).grep(*.chars > 2).map('"' ~ * ~ '"').join(", ") || '""';
diff --git a/challenge-318/arne-sommer/raku/reverse-equals b/challenge-318/arne-sommer/raku/reverse-equals
new file mode 100755
index 0000000000..2a7194284e
--- /dev/null
+++ b/challenge-318/arne-sommer/raku/reverse-equals
@@ -0,0 +1,39 @@
+#! /usr/bin/env raku
+
+subset NUMWORD where * ~~ /^<[0..9 \s]>+$/;
+
+unit sub MAIN (NUMWORD $source,
+ NUMWORD $target,
+ :v(:$verbose));
+
+my @source = $source.words;
+my @target = $target.words;
+
+die "Not the same elements" unless @source.sort eqv @target.sort;
+
+if @source eqv @target
+{
+ say 'true';
+ exit;
+}
+
+my $end = @target.end;
+
+for ^$end -> $i
+{
+ for $i + 1 .. $end -> $j
+ {
+ my @copy = @source.clone;
+ @copy[$i .. $j] = @copy[$i .. $j].reverse;
+
+ say ": ({ @source.join(",") }) Reverse $i..$j -> ({ @copy.join(",") })" if $verbose;
+
+ if @copy eqv @target
+ {
+ say 'true';
+ exit;
+ }
+ }
+}
+
+say 'false'; \ No newline at end of file