From 3c38fdb2e978981d7695cfbdef6c3baadeddccc1 Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 9 Jul 2023 17:51:24 +0200 Subject: Arne Sommer --- challenge-224/arne-sommer/blog.txt | 1 + challenge-224/arne-sommer/raku/additive-digits | 25 ++++++++++++ challenge-224/arne-sommer/raku/additive-number | 54 ++++++++++++++++++++++++++ challenge-224/arne-sommer/raku/ch-1.raku | 7 ++++ challenge-224/arne-sommer/raku/ch-2.raku | 54 ++++++++++++++++++++++++++ challenge-224/arne-sommer/raku/special-notes | 7 ++++ 6 files changed, 148 insertions(+) create mode 100644 challenge-224/arne-sommer/blog.txt create mode 100755 challenge-224/arne-sommer/raku/additive-digits create mode 100755 challenge-224/arne-sommer/raku/additive-number create mode 100755 challenge-224/arne-sommer/raku/ch-1.raku create mode 100755 challenge-224/arne-sommer/raku/ch-2.raku create mode 100755 challenge-224/arne-sommer/raku/special-notes diff --git a/challenge-224/arne-sommer/blog.txt b/challenge-224/arne-sommer/blog.txt new file mode 100644 index 0000000000..36a4add302 --- /dev/null +++ b/challenge-224/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/numbered-notes.html diff --git a/challenge-224/arne-sommer/raku/additive-digits b/challenge-224/arne-sommer/raku/additive-digits new file mode 100755 index 0000000000..d6248cc121 --- /dev/null +++ b/challenge-224/arne-sommer/raku/additive-digits @@ -0,0 +1,25 @@ +#! /usr/bin/env raku + +unit sub MAIN ($string where $string.chars > 2 && $string ~~ /^<[0..9]>*$/); + +say is-additive($string) ?? 'true' !! 'false'; + +sub is-additive ($string where $string.chars > 2 && $string ~~ /^<[0..9]>*$/) +{ + my @digits = $string.comb; + + my $first = @digits.shift; + my $second = @digits.shift; + + while (@digits.elems) + { + my $third = @digits.shift; + + return False unless $first + $second == $third; + + $first = $second; + $second = $third; + } + + return True; +} diff --git a/challenge-224/arne-sommer/raku/additive-number b/challenge-224/arne-sommer/raku/additive-number new file mode 100755 index 0000000000..d1bb6e267d --- /dev/null +++ b/challenge-224/arne-sommer/raku/additive-number @@ -0,0 +1,54 @@ +#! /usr/bin/env raku + +unit sub MAIN ($string where $string.chars > 2 && $string ~~ /^<[0..9]>*$/, + :v(:$verbose)); + +my $bitmap-length = $string.chars -1; + +for 0 .. Inf -> $i +{ + my $binary = $i.base(2); + + last if $binary.chars > $bitmap-length; + + my $bitmap = $binary.fmt('%0' ~ $bitmap-length ~ 'd'); + my $bitmap2 = $bitmap; + + $bitmap ~~ tr/01/ |/; + + my @bitmap = $bitmap.comb; + my $new = (roundrobin($string.comb, @bitmap)).flat.join; + $new ~~ s:g/\s//; + + my @array = $new.split("|"); + + say ":: $string -> $bitmap2 -> '$bitmap' -> $new" if $verbose; + + next unless @array.elems >= 3; + + if is-additive(@array) + { + say 'true'; + exit; + } +} + +say 'false'; + +sub is-additive (@array) +{ + my $first = @array.shift; + my $second = @array.shift; + + while (@array.elems) + { + my $third = @array.shift; + + return False unless $first + $second == $third; + + $first = $second; + $second = $third; + } + + return True; +} diff --git a/challenge-224/arne-sommer/raku/ch-1.raku b/challenge-224/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..06f2881268 --- /dev/null +++ b/challenge-224/arne-sommer/raku/ch-1.raku @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN ($source, $target); + +say $target.comb.Bag (<=) $source.comb.Bag + ?? 'true' + !! 'false'; diff --git a/challenge-224/arne-sommer/raku/ch-2.raku b/challenge-224/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..d1bb6e267d --- /dev/null +++ b/challenge-224/arne-sommer/raku/ch-2.raku @@ -0,0 +1,54 @@ +#! /usr/bin/env raku + +unit sub MAIN ($string where $string.chars > 2 && $string ~~ /^<[0..9]>*$/, + :v(:$verbose)); + +my $bitmap-length = $string.chars -1; + +for 0 .. Inf -> $i +{ + my $binary = $i.base(2); + + last if $binary.chars > $bitmap-length; + + my $bitmap = $binary.fmt('%0' ~ $bitmap-length ~ 'd'); + my $bitmap2 = $bitmap; + + $bitmap ~~ tr/01/ |/; + + my @bitmap = $bitmap.comb; + my $new = (roundrobin($string.comb, @bitmap)).flat.join; + $new ~~ s:g/\s//; + + my @array = $new.split("|"); + + say ":: $string -> $bitmap2 -> '$bitmap' -> $new" if $verbose; + + next unless @array.elems >= 3; + + if is-additive(@array) + { + say 'true'; + exit; + } +} + +say 'false'; + +sub is-additive (@array) +{ + my $first = @array.shift; + my $second = @array.shift; + + while (@array.elems) + { + my $third = @array.shift; + + return False unless $first + $second == $third; + + $first = $second; + $second = $third; + } + + return True; +} diff --git a/challenge-224/arne-sommer/raku/special-notes b/challenge-224/arne-sommer/raku/special-notes new file mode 100755 index 0000000000..06f2881268 --- /dev/null +++ b/challenge-224/arne-sommer/raku/special-notes @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN ($source, $target); + +say $target.comb.Bag (<=) $source.comb.Bag + ?? 'true' + !! 'false'; -- cgit