diff options
| -rw-r--r-- | challenge-216/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-216/arne-sommer/raku/ch-1.raku | 30 | ||||
| -rwxr-xr-x | challenge-216/arne-sommer/raku/ch-2.raku | 26 | ||||
| -rwxr-xr-x | challenge-216/arne-sommer/raku/registration-number | 30 | ||||
| -rwxr-xr-x | challenge-216/arne-sommer/raku/registration-number-bag | 30 | ||||
| -rwxr-xr-x | challenge-216/arne-sommer/raku/word-stickers | 26 | ||||
| -rwxr-xr-x | challenge-216/arne-sommer/raku/word-stickers-multi | 26 |
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; + |
