diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-11-05 00:44:37 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-05 00:44:37 +0000 |
| commit | e3c044079c2eee5d4d2e60e0bc197473f93d0559 (patch) | |
| tree | c693b5d7106cfc8902f9146b84b47c3832699b00 | |
| parent | 93c50a2cd01e59f678a23d4f84f99f70c8b24677 (diff) | |
| parent | a1012b9953048fbd0ab246b90745d34191592aaf (diff) | |
| download | perlweeklychallenge-club-e3c044079c2eee5d4d2e60e0bc197473f93d0559.tar.gz perlweeklychallenge-club-e3c044079c2eee5d4d2e60e0bc197473f93d0559.tar.bz2 perlweeklychallenge-club-e3c044079c2eee5d4d2e60e0bc197473f93d0559.zip | |
Merge pull request #8992 from arnesom/branch-for-challenge-241
Arne Sommer
| -rw-r--r-- | challenge-241/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-241/arne-sommer/raku/arithmetic-triplets | 29 | ||||
| -rwxr-xr-x | challenge-241/arne-sommer/raku/ch-1.raku | 29 | ||||
| -rwxr-xr-x | challenge-241/arne-sommer/raku/ch-2.raku | 33 | ||||
| -rwxr-xr-x | challenge-241/arne-sommer/raku/prime-order | 33 |
5 files changed, 125 insertions, 0 deletions
diff --git a/challenge-241/arne-sommer/blog.txt b/challenge-241/arne-sommer/blog.txt new file mode 100644 index 0000000000..e134c67cdc --- /dev/null +++ b/challenge-241/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/arithmetic-prime.html diff --git a/challenge-241/arne-sommer/raku/arithmetic-triplets b/challenge-241/arne-sommer/raku/arithmetic-triplets new file mode 100755 index 0000000000..9f4d5056fc --- /dev/null +++ b/challenge-241/arne-sommer/raku/arithmetic-triplets @@ -0,0 +1,29 @@ +#! /usr/bin/env raku + +unit sub MAIN ($diff where $diff ~~ UInt && $diff > 0, + *@nums where @nums.elems > 2 && all(@nums) ~~ Int && ( [<] @nums ), + :v(:$verbose)); + +my $end = @nums.end; +my $triplets = 0; + +for 0 .. $end -2 -> $i +{ + for $i+1 .. $end -1 -> $j + { + for $j+1 .. $end -> $k + { + if $diff == @nums[$j] - @nums[$i] == @nums[$k] - @nums[$j] + { + $triplets++; + say ":Indices: $i,$j,$k -> values: @nums[$i],@nums[$j],@nums[$k] [triplet]" if $verbose; + } + elsif $verbose + { + say ":Indices: $i,$j,$k -> values: @nums[$i],@nums[$j],@nums[$k]"; + } + } + } +} + +say $triplets; diff --git a/challenge-241/arne-sommer/raku/ch-1.raku b/challenge-241/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..9f4d5056fc --- /dev/null +++ b/challenge-241/arne-sommer/raku/ch-1.raku @@ -0,0 +1,29 @@ +#! /usr/bin/env raku + +unit sub MAIN ($diff where $diff ~~ UInt && $diff > 0, + *@nums where @nums.elems > 2 && all(@nums) ~~ Int && ( [<] @nums ), + :v(:$verbose)); + +my $end = @nums.end; +my $triplets = 0; + +for 0 .. $end -2 -> $i +{ + for $i+1 .. $end -1 -> $j + { + for $j+1 .. $end -> $k + { + if $diff == @nums[$j] - @nums[$i] == @nums[$k] - @nums[$j] + { + $triplets++; + say ":Indices: $i,$j,$k -> values: @nums[$i],@nums[$j],@nums[$k] [triplet]" if $verbose; + } + elsif $verbose + { + say ":Indices: $i,$j,$k -> values: @nums[$i],@nums[$j],@nums[$k]"; + } + } + } +} + +say $triplets; diff --git a/challenge-241/arne-sommer/raku/ch-2.raku b/challenge-241/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..5c742c8030 --- /dev/null +++ b/challenge-241/arne-sommer/raku/ch-2.raku @@ -0,0 +1,33 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ UInt && all(@int) > 0 && @int.elems == @int.unique.elems > 2, :v(:$verbose)); + +my %factor-count; + +for @int -> $int +{ + my @factors = factors($int); + %factor-count{$int} = @factors.elems; + say ":Int $int -> factors: { @factors.join(",") } -> count: { @factors.elems }" if $verbose; +} + +say @int.sort({ %factor-count{$^a} <=> %factor-count{$^b} || $^b <=> $^a }); + +sub factors ($number is copy) +{ + return (1) if $number == 1; + return ($number) if $number.is-prime; + + my @factors; + + for (2 .. $number div 2).grep( *.is-prime) -> $candidate + { + while $number %% $candidate + { + @factors.push: $candidate; + $number /= $candidate; + } + } + + return @factors; +} diff --git a/challenge-241/arne-sommer/raku/prime-order b/challenge-241/arne-sommer/raku/prime-order new file mode 100755 index 0000000000..5c742c8030 --- /dev/null +++ b/challenge-241/arne-sommer/raku/prime-order @@ -0,0 +1,33 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ UInt && all(@int) > 0 && @int.elems == @int.unique.elems > 2, :v(:$verbose)); + +my %factor-count; + +for @int -> $int +{ + my @factors = factors($int); + %factor-count{$int} = @factors.elems; + say ":Int $int -> factors: { @factors.join(",") } -> count: { @factors.elems }" if $verbose; +} + +say @int.sort({ %factor-count{$^a} <=> %factor-count{$^b} || $^b <=> $^a }); + +sub factors ($number is copy) +{ + return (1) if $number == 1; + return ($number) if $number.is-prime; + + my @factors; + + for (2 .. $number div 2).grep( *.is-prime) -> $candidate + { + while $number %% $candidate + { + @factors.push: $candidate; + $number /= $candidate; + } + } + + return @factors; +} |
