diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-10-07 13:49:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-07 13:49:13 +0100 |
| commit | 9bdefa836fbaa21cd9e4227216d5db06bb0c625c (patch) | |
| tree | 35861d27d1120595d481a6d7a992471b2977edcd | |
| parent | ad24fda8aeef3488941dc1c534474cb0066d7cf6 (diff) | |
| parent | 94d1d4fbbcf0dd2d03b201fe5313dac31ff34ac1 (diff) | |
| download | perlweeklychallenge-club-9bdefa836fbaa21cd9e4227216d5db06bb0c625c.tar.gz perlweeklychallenge-club-9bdefa836fbaa21cd9e4227216d5db06bb0c625c.tar.bz2 perlweeklychallenge-club-9bdefa836fbaa21cd9e4227216d5db06bb0c625c.zip | |
Merge pull request #4981 from Scimon/master
This weeks challenges
| -rw-r--r-- | challenge-133/simon-proctor/raku/ch-1.raku | 10 | ||||
| -rw-r--r-- | challenge-133/simon-proctor/raku/ch-2.raku | 33 |
2 files changed, 43 insertions, 0 deletions
diff --git a/challenge-133/simon-proctor/raku/ch-1.raku b/challenge-133/simon-proctor/raku/ch-1.raku new file mode 100644 index 0000000000..c334ede333 --- /dev/null +++ b/challenge-133/simon-proctor/raku/ch-1.raku @@ -0,0 +1,10 @@ +#!/usr/bin/env raku + +#| For the integer N return the integer sqrt of it +sub MAIN ( Int \n ) { + say isqrt( n ); +} + +sub isqrt(UInt \n) { + (1..*).first( { $_ * $_ > n } ) - 1; +}; diff --git a/challenge-133/simon-proctor/raku/ch-2.raku b/challenge-133/simon-proctor/raku/ch-2.raku new file mode 100644 index 0000000000..38451aed62 --- /dev/null +++ b/challenge-133/simon-proctor/raku/ch-2.raku @@ -0,0 +1,33 @@ +#!/usr/bin/env raku + +use experimental :cached; + +#| Display the first n smith numbers +sub MAIN ( UInt \n = 10 ) { + .say for (2..*).grep( { is-smith-number($_) } )[^n]; +} + +multi sub is-smith-number( Int \n where n.is-prime --> False ) {} + +multi sub is-smith-number( Int \n --> Bool ) is pure { + my @factors = prime-factors( n ); + ([+] n.comb) == ([+] @factors.map( { [+] $_.comb } )); +} + +sub prime-factors( Int $n is copy --> Array ) is pure { + my @factors; + while ! $n.is-prime { + my \s = smallest-factor( $n ); + @factors.push(s); + $n = $n div s; + } + @factors.push($n); + return @factors; +} + +sub smallest-factor( Int \n --> Int ) is pure is cached { + for (2..(n div 2)).grep(*.is-prime) { + return $_ if n %% $_; + } + die "Something went wrong"; +} |
