diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-07-09 19:43:58 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-09 19:43:58 +0100 |
| commit | 8c581a79d846df4132d9c957febca476fbdee61c (patch) | |
| tree | fa2fd65a13c28a2fefcca8d85a2bf3538d8704e2 | |
| parent | f18d5665cfdc58357c482fe9257b8c8c738831c9 (diff) | |
| parent | 3c38fdb2e978981d7695cfbdef6c3baadeddccc1 (diff) | |
| download | perlweeklychallenge-club-8c581a79d846df4132d9c957febca476fbdee61c.tar.gz perlweeklychallenge-club-8c581a79d846df4132d9c957febca476fbdee61c.tar.bz2 perlweeklychallenge-club-8c581a79d846df4132d9c957febca476fbdee61c.zip | |
Merge pull request #8341 from arnesom/branch-for-challenge-224
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'; |
