From a66214c0e882bcfe55cb8bc47b5716879ea64828 Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 29 Jan 2023 20:28:49 +0100 Subject: Arne Sommer --- challenge-201/arne-sommer/blog.txt | 1 + challenge-201/arne-sommer/raku/ch-1.raku | 20 ++++++++++++++++ challenge-201/arne-sommer/raku/ch-2.raku | 28 ++++++++++++++++++++++ challenge-201/arne-sommer/raku/missing-numbers | 20 ++++++++++++++++ .../arne-sommer/raku/missing-numbers-wrong | 18 ++++++++++++++ challenge-201/arne-sommer/raku/penny-piles | 28 ++++++++++++++++++++++ 6 files changed, 115 insertions(+) create mode 100644 challenge-201/arne-sommer/blog.txt create mode 100755 challenge-201/arne-sommer/raku/ch-1.raku create mode 100755 challenge-201/arne-sommer/raku/ch-2.raku create mode 100755 challenge-201/arne-sommer/raku/missing-numbers create mode 100755 challenge-201/arne-sommer/raku/missing-numbers-wrong create mode 100755 challenge-201/arne-sommer/raku/penny-piles 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; -- cgit