aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2023-01-29 20:28:49 +0100
committerarnesom <arne@bbop.org>2023-01-29 20:28:49 +0100
commita66214c0e882bcfe55cb8bc47b5716879ea64828 (patch)
treec8f64e861bcd818a6735b0357fd0e96297ef338b
parent43e51aace521869142d8a8ac87674f19d38b2777 (diff)
downloadperlweeklychallenge-club-a66214c0e882bcfe55cb8bc47b5716879ea64828.tar.gz
perlweeklychallenge-club-a66214c0e882bcfe55cb8bc47b5716879ea64828.tar.bz2
perlweeklychallenge-club-a66214c0e882bcfe55cb8bc47b5716879ea64828.zip
Arne Sommer
-rw-r--r--challenge-201/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-201/arne-sommer/raku/ch-1.raku20
-rwxr-xr-xchallenge-201/arne-sommer/raku/ch-2.raku28
-rwxr-xr-xchallenge-201/arne-sommer/raku/missing-numbers20
-rwxr-xr-xchallenge-201/arne-sommer/raku/missing-numbers-wrong18
-rwxr-xr-xchallenge-201/arne-sommer/raku/penny-piles28
6 files changed, 115 insertions, 0 deletions
diff --git a/challenge-201/arne-sommer/blog.txt b/challenge-201/arne-sommer/blog.txt
new file mode 100644
index 0000000000..f1190c8c1a
--- /dev/null
+++ b/challenge-201/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/pennies-numbers.html
diff --git a/challenge-201/arne-sommer/raku/ch-1.raku b/challenge-201/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..2588154ad2
--- /dev/null
+++ b/challenge-201/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@array where @array.elems && all(@array) ~~ /^<[0..9]>*$/, :v(:$verbose));
+
+my $n = @array.elems;
+my @sorted = @array.sort;
+my @missing = ();
+my $current = @sorted.shift;
+
+for 0 .. $n -> $i
+{
+ say ": Checking $i" if $verbose;
+
+ $current == $i
+ ?? ( $current = @sorted.shift || next )
+ !! ( @missing.push: $i );
+}
+
+say @missing.join(",");
+
diff --git a/challenge-201/arne-sommer/raku/ch-2.raku b/challenge-201/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..e2e87fcb2c
--- /dev/null
+++ b/challenge-201/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (UInt $n, :v(:$verbose));
+
+my $piles := gather
+{
+ recurse( (), +$n);
+}
+
+sub recurse (@done, $todo)
+{
+ if $todo == 0
+ {
+ say ": @done[]" if $verbose;
+ take @done;
+ return;
+ }
+
+ for 1 .. $todo -> $i
+ {
+ last if @done && $i > @done.head;
+ my @next = @done.clone;
+ @next.unshift: $i;
+ recurse(@next, $todo - $i);
+ }
+}
+
+say $piles.elems;
diff --git a/challenge-201/arne-sommer/raku/missing-numbers b/challenge-201/arne-sommer/raku/missing-numbers
new file mode 100755
index 0000000000..2588154ad2
--- /dev/null
+++ b/challenge-201/arne-sommer/raku/missing-numbers
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@array where @array.elems && all(@array) ~~ /^<[0..9]>*$/, :v(:$verbose));
+
+my $n = @array.elems;
+my @sorted = @array.sort;
+my @missing = ();
+my $current = @sorted.shift;
+
+for 0 .. $n -> $i
+{
+ say ": Checking $i" if $verbose;
+
+ $current == $i
+ ?? ( $current = @sorted.shift || next )
+ !! ( @missing.push: $i );
+}
+
+say @missing.join(",");
+
diff --git a/challenge-201/arne-sommer/raku/missing-numbers-wrong b/challenge-201/arne-sommer/raku/missing-numbers-wrong
new file mode 100755
index 0000000000..6867ac1329
--- /dev/null
+++ b/challenge-201/arne-sommer/raku/missing-numbers-wrong
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@array where @array.elems && all(@array) ~~ /^<[0..9]>*$/, :v(:$verbose));
+
+my $n = @array.elems;
+my @sorted = @array.sort;
+
+for ^$n -> $i
+{
+ say ": $i -> @sorted[$i]" if $verbose;
+ unless @sorted[$i] == $i
+ {
+ say $i;
+ exit;
+ }
+}
+
+say $n;
diff --git a/challenge-201/arne-sommer/raku/penny-piles b/challenge-201/arne-sommer/raku/penny-piles
new file mode 100755
index 0000000000..e2e87fcb2c
--- /dev/null
+++ b/challenge-201/arne-sommer/raku/penny-piles
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (UInt $n, :v(:$verbose));
+
+my $piles := gather
+{
+ recurse( (), +$n);
+}
+
+sub recurse (@done, $todo)
+{
+ if $todo == 0
+ {
+ say ": @done[]" if $verbose;
+ take @done;
+ return;
+ }
+
+ for 1 .. $todo -> $i
+ {
+ last if @done && $i > @done.head;
+ my @next = @done.clone;
+ @next.unshift: $i;
+ recurse(@next, $todo - $i);
+ }
+}
+
+say $piles.elems;