diff options
| author | arnesom <arne@bbop.org> | 2023-07-09 17:51:24 +0200 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2023-07-09 17:51:24 +0200 |
| commit | 3c38fdb2e978981d7695cfbdef6c3baadeddccc1 (patch) | |
| tree | bf09571709489543d35f7f5209b4f6dcc1b6ffe1 | |
| parent | 4f529614fd47ee9c7c3efadaf320a884ce5cbb43 (diff) | |
| download | perlweeklychallenge-club-3c38fdb2e978981d7695cfbdef6c3baadeddccc1.tar.gz perlweeklychallenge-club-3c38fdb2e978981d7695cfbdef6c3baadeddccc1.tar.bz2 perlweeklychallenge-club-3c38fdb2e978981d7695cfbdef6c3baadeddccc1.zip | |
Arne Sommer
| -rw-r--r-- | challenge-224/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-224/arne-sommer/raku/additive-digits | 25 | ||||
| -rwxr-xr-x | challenge-224/arne-sommer/raku/additive-number | 54 | ||||
| -rwxr-xr-x | challenge-224/arne-sommer/raku/ch-1.raku | 7 | ||||
| -rwxr-xr-x | challenge-224/arne-sommer/raku/ch-2.raku | 54 | ||||
| -rwxr-xr-x | challenge-224/arne-sommer/raku/special-notes | 7 |
6 files changed, 148 insertions, 0 deletions
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'; |
