aboutsummaryrefslogtreecommitdiff
path: root/challenge-294
diff options
context:
space:
mode:
authorArne Sommer <arne@bbop.org>2024-11-09 17:15:38 +0100
committerArne Sommer <arne@bbop.org>2024-11-09 17:15:38 +0100
commit4ab4ed913afac1651b20692cf4a9d3a58805487f (patch)
tree1da703a457ad17a165f0ad9be5c6d3fa6884402a /challenge-294
parentbe5e8403232deff136cb24a6065c455dc4631b6f (diff)
downloadperlweeklychallenge-club-4ab4ed913afac1651b20692cf4a9d3a58805487f.tar.gz
perlweeklychallenge-club-4ab4ed913afac1651b20692cf4a9d3a58805487f.tar.bz2
perlweeklychallenge-club-4ab4ed913afac1651b20692cf4a9d3a58805487f.zip
Arne Sommer
Diffstat (limited to 'challenge-294')
-rw-r--r--challenge-294/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-294/arne-sommer/raku/ch-1.raku24
-rwxr-xr-xchallenge-294/arne-sommer/raku/ch-2.raku36
-rwxr-xr-xchallenge-294/arne-sommer/raku/consecutive-sequence24
-rwxr-xr-xchallenge-294/arne-sommer/raku/next-permutation34
-rwxr-xr-xchallenge-294/arne-sommer/raku/next-permutation-sort36
6 files changed, 155 insertions, 0 deletions
diff --git a/challenge-294/arne-sommer/blog.txt b/challenge-294/arne-sommer/blog.txt
new file mode 100644
index 0000000000..2811ec517a
--- /dev/null
+++ b/challenge-294/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/next-consecutive.html
diff --git a/challenge-294/arne-sommer/raku/ch-1.raku b/challenge-294/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..91cef091b7
--- /dev/null
+++ b/challenge-294/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,24 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && @ints.elems > 0, :v(:$verbose));
+
+my @sorted = @ints.sort;
+my @unique = @sorted.unique;
+
+say ": Sorted: @sorted[]" if $verbose;
+say ": Unique: @unique[]" if $verbose;
+
+my $current = @unique.shift;
+my $count = 1;
+my $max = 1;
+
+for @unique -> $next
+{
+ $count++ if $current +1 == $next;
+
+ $max = $count if $count > $max;
+
+ $current = $next;
+}
+
+say $max == 1 ?? -1 !! $max;
diff --git a/challenge-294/arne-sommer/raku/ch-2.raku b/challenge-294/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..24356f8d8d
--- /dev/null
+++ b/challenge-294/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,36 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && @ints.elems > 1,
+ :f(:$fast-fail),
+ :v(:$verbose));
+
+my @a = @ints>>.Int;
+
+if $fast-fail && [>=] @a { say -1; exit }
+
+my $end = @a.end;
+
+for $end ... 1 -> $i
+{
+ for $i -1 ... 0 -> $j
+ {
+ if @a[$i] > @a[$j]
+ {
+ say ": index:$i -> @a[$i], index:$j -> @a[$j] (swap)" if $verbose;
+ my $n = @a[$i];
+ @a[$i] = @a[$j];
+ @a[$j] = $n;
+
+ @a[$j+1 .. *] = @a[$j+1 .. *].sort if $i > $j +1;
+
+ say "({ @a.join(", ") })";
+ exit;
+ }
+ elsif $verbose
+ {
+ say ": index:$i -> @a[$i], index:$j -> @a[$j] (skip)" if $verbose;
+ }
+ }
+}
+
+say "-1";
diff --git a/challenge-294/arne-sommer/raku/consecutive-sequence b/challenge-294/arne-sommer/raku/consecutive-sequence
new file mode 100755
index 0000000000..91cef091b7
--- /dev/null
+++ b/challenge-294/arne-sommer/raku/consecutive-sequence
@@ -0,0 +1,24 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && @ints.elems > 0, :v(:$verbose));
+
+my @sorted = @ints.sort;
+my @unique = @sorted.unique;
+
+say ": Sorted: @sorted[]" if $verbose;
+say ": Unique: @unique[]" if $verbose;
+
+my $current = @unique.shift;
+my $count = 1;
+my $max = 1;
+
+for @unique -> $next
+{
+ $count++ if $current +1 == $next;
+
+ $max = $count if $count > $max;
+
+ $current = $next;
+}
+
+say $max == 1 ?? -1 !! $max;
diff --git a/challenge-294/arne-sommer/raku/next-permutation b/challenge-294/arne-sommer/raku/next-permutation
new file mode 100755
index 0000000000..8f6066d663
--- /dev/null
+++ b/challenge-294/arne-sommer/raku/next-permutation
@@ -0,0 +1,34 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && @ints.elems > 1,
+ :f(:$fast-fail),
+ :v(:$verbose));
+
+my @a = @ints>>.Int;
+
+if $fast-fail && [>=] @a { say -1; exit }
+
+my $end = @a.end;
+
+for $end ... 1 -> $i
+{
+ for $i -1 ... 0 -> $j
+ {
+ if @a[$i] > @a[$j]
+ {
+ say ": index:$i -> @a[$i], index:$j -> @a[$j] (swap)" if $verbose;
+ my $n = @a[$i];
+ @a[$i] = @a[$j];
+ @a[$j] = $n;
+
+ say "({ @a.join(", ") })";
+ exit;
+ }
+ elsif $verbose
+ {
+ say ": index:$i -> @a[$i], index:$j -> @a[$j] (skip)" if $verbose;
+ }
+ }
+}
+
+say "-1";
diff --git a/challenge-294/arne-sommer/raku/next-permutation-sort b/challenge-294/arne-sommer/raku/next-permutation-sort
new file mode 100755
index 0000000000..24356f8d8d
--- /dev/null
+++ b/challenge-294/arne-sommer/raku/next-permutation-sort
@@ -0,0 +1,36 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && @ints.elems > 1,
+ :f(:$fast-fail),
+ :v(:$verbose));
+
+my @a = @ints>>.Int;
+
+if $fast-fail && [>=] @a { say -1; exit }
+
+my $end = @a.end;
+
+for $end ... 1 -> $i
+{
+ for $i -1 ... 0 -> $j
+ {
+ if @a[$i] > @a[$j]
+ {
+ say ": index:$i -> @a[$i], index:$j -> @a[$j] (swap)" if $verbose;
+ my $n = @a[$i];
+ @a[$i] = @a[$j];
+ @a[$j] = $n;
+
+ @a[$j+1 .. *] = @a[$j+1 .. *].sort if $i > $j +1;
+
+ say "({ @a.join(", ") })";
+ exit;
+ }
+ elsif $verbose
+ {
+ say ": index:$i -> @a[$i], index:$j -> @a[$j] (skip)" if $verbose;
+ }
+ }
+}
+
+say "-1";