aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-216/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-216/arne-sommer/raku/ch-1.raku30
-rwxr-xr-xchallenge-216/arne-sommer/raku/ch-2.raku26
-rwxr-xr-xchallenge-216/arne-sommer/raku/registration-number30
-rwxr-xr-xchallenge-216/arne-sommer/raku/registration-number-bag30
-rwxr-xr-xchallenge-216/arne-sommer/raku/word-stickers26
-rwxr-xr-xchallenge-216/arne-sommer/raku/word-stickers-multi26
7 files changed, 169 insertions, 0 deletions
diff --git a/challenge-216/arne-sommer/blog.txt b/challenge-216/arne-sommer/blog.txt
new file mode 100644
index 0000000000..0bd20bbaa5
--- /dev/null
+++ b/challenge-216/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/sticky-numbers.html
diff --git a/challenge-216/arne-sommer/raku/ch-1.raku b/challenge-216/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..851ac97bf5
--- /dev/null
+++ b/challenge-216/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,30 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:r(:$reg) where $reg.chars >= 3;
+ *@words where @words.elems > 0 && all(@words) ~~ /^<[a..z]>+$/,
+ :v(:$verbose));
+
+my @reg = $reg.comb.grep({ $_ eq any('A' .. 'Z') })>>.lc;
+
+say ": Reg chars: { @reg.map({ "'" ~ $_ ~ "'" }).join(", ") } " if $verbose;
+
+my @matches;
+
+for @words -> $word
+{
+ my @word = $word.comb;
+
+ print ": Word '$word' chars: { @word.map({ "'" ~ $_ ~ "'" }).join(", ") }" if $verbose;
+
+ if @reg.Bag (<=) @word.Bag
+ {
+ say " -> subset" if $verbose;
+ @matches.push: $word;
+ }
+ elsif $verbose
+ {
+ say "";
+ }
+}
+
+say "(" ~ @matches.map({ "'" ~ $_ ~ "'" }) ~ ")";
diff --git a/challenge-216/arne-sommer/raku/ch-2.raku b/challenge-216/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..5b664db0c8
--- /dev/null
+++ b/challenge-216/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,26 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:w(:$word) where $word.chars >= 1 && $word ~~ /^<[a..z]>+$/;
+ *@stickers where @stickers.elems > 0 && all(@stickers) ~~ /^<[a..z]>+$/,
+ :v(:$verbose));
+
+my @word = $word.comb;
+
+say ": Word: { @word.sort.join(",") }" if $verbose;
+
+for (@stickers xx $word.chars).flat.combinations(1 .. Inf).unique(:as(&bag)) -> @combination
+{
+ my $stickers = @combination.elems;
+ my @stickers = @combination.join.comb;
+
+ say ": $stickers Sticker(s) ({ @combination.join(",") }) - Letters: { @stickers.sort.join(",") } " if $verbose;
+
+ if @word.Bag (<=) @stickers.Bag
+ {
+ say $stickers;
+ exit;
+ }
+}
+
+say 0;
+
diff --git a/challenge-216/arne-sommer/raku/registration-number b/challenge-216/arne-sommer/raku/registration-number
new file mode 100755
index 0000000000..0d7f82bab8
--- /dev/null
+++ b/challenge-216/arne-sommer/raku/registration-number
@@ -0,0 +1,30 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:r(:$reg) where $reg.chars >= 3;
+ *@words where @words.elems > 0 && all(@words) ~~ /^<[a..z]>+$/,
+ :v(:$verbose));
+
+my @reg = $reg.comb.grep({ $_ eq any('A' .. 'Z') })>>.lc;
+
+say ": Reg chars: { @reg.map({ "'" ~ $_ ~ "'" }).join(", ") } " if $verbose;
+
+my @matches;
+
+for @words -> $word
+{
+ my @word = $word.comb;
+
+ print ": Word '$word' chars: { @word.map({ "'" ~ $_ ~ "'" }).join(", ") }" if $verbose;
+
+ if @reg (<=) @word
+ {
+ say " -> subset" if $verbose;
+ @matches.push: $word;
+ }
+ elsif $verbose
+ {
+ say "";
+ }
+}
+
+say "(" ~ @matches.map({ "'" ~ $_ ~ "'" }) ~ ")";
diff --git a/challenge-216/arne-sommer/raku/registration-number-bag b/challenge-216/arne-sommer/raku/registration-number-bag
new file mode 100755
index 0000000000..851ac97bf5
--- /dev/null
+++ b/challenge-216/arne-sommer/raku/registration-number-bag
@@ -0,0 +1,30 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:r(:$reg) where $reg.chars >= 3;
+ *@words where @words.elems > 0 && all(@words) ~~ /^<[a..z]>+$/,
+ :v(:$verbose));
+
+my @reg = $reg.comb.grep({ $_ eq any('A' .. 'Z') })>>.lc;
+
+say ": Reg chars: { @reg.map({ "'" ~ $_ ~ "'" }).join(", ") } " if $verbose;
+
+my @matches;
+
+for @words -> $word
+{
+ my @word = $word.comb;
+
+ print ": Word '$word' chars: { @word.map({ "'" ~ $_ ~ "'" }).join(", ") }" if $verbose;
+
+ if @reg.Bag (<=) @word.Bag
+ {
+ say " -> subset" if $verbose;
+ @matches.push: $word;
+ }
+ elsif $verbose
+ {
+ say "";
+ }
+}
+
+say "(" ~ @matches.map({ "'" ~ $_ ~ "'" }) ~ ")";
diff --git a/challenge-216/arne-sommer/raku/word-stickers b/challenge-216/arne-sommer/raku/word-stickers
new file mode 100755
index 0000000000..691f165d98
--- /dev/null
+++ b/challenge-216/arne-sommer/raku/word-stickers
@@ -0,0 +1,26 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:w(:$word) where $word.chars >= 1 && $word ~~ /^<[a..z]>+$/;
+ *@stickers where @stickers.elems > 0 && all(@stickers) ~~ /^<[a..z]>+$/,
+ :v(:$verbose));
+
+my @word = $word.comb;
+
+say ": Word: { @word.sort.join(",") }" if $verbose;
+
+for @stickers.combinations(1 .. Inf) -> @combination
+{
+ my $stickers = @combination.elems;
+ my @stickers = @combination.join.comb;
+
+ say ": $stickers Sticker(s) ({ @combination.join(",") }) - Letters: { @stickers.sort.join(",") } " if $verbose;
+
+ if @word.Bag (<=) @stickers.Bag
+ {
+ say $stickers;
+ exit;
+ }
+}
+
+say 0;
+
diff --git a/challenge-216/arne-sommer/raku/word-stickers-multi b/challenge-216/arne-sommer/raku/word-stickers-multi
new file mode 100755
index 0000000000..5b664db0c8
--- /dev/null
+++ b/challenge-216/arne-sommer/raku/word-stickers-multi
@@ -0,0 +1,26 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:w(:$word) where $word.chars >= 1 && $word ~~ /^<[a..z]>+$/;
+ *@stickers where @stickers.elems > 0 && all(@stickers) ~~ /^<[a..z]>+$/,
+ :v(:$verbose));
+
+my @word = $word.comb;
+
+say ": Word: { @word.sort.join(",") }" if $verbose;
+
+for (@stickers xx $word.chars).flat.combinations(1 .. Inf).unique(:as(&bag)) -> @combination
+{
+ my $stickers = @combination.elems;
+ my @stickers = @combination.join.comb;
+
+ say ": $stickers Sticker(s) ({ @combination.join(",") }) - Letters: { @stickers.sort.join(",") } " if $verbose;
+
+ if @word.Bag (<=) @stickers.Bag
+ {
+ say $stickers;
+ exit;
+ }
+}
+
+say 0;
+