diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-04-05 20:53:42 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-04-05 20:53:42 +0100 |
| commit | 36acda355e6cbc4eef682d586e6b0c78a7582143 (patch) | |
| tree | 01d9ea9798c59a89b2dce4505311e246b375cf63 | |
| parent | 9941ef6b78a2d18ff06d03b0271ca09f82dc9a38 (diff) | |
| parent | 07e792b044ad240c94e8cf9f653a66551504bb7f (diff) | |
| download | perlweeklychallenge-club-36acda355e6cbc4eef682d586e6b0c78a7582143.tar.gz perlweeklychallenge-club-36acda355e6cbc4eef682d586e6b0c78a7582143.tar.bz2 perlweeklychallenge-club-36acda355e6cbc4eef682d586e6b0c78a7582143.zip | |
Merge branch 'master' of https://github.com/manwar/perlweeklychallenge-club
| -rw-r--r-- | challenge-150/polettix/raku/ch-2.raku | 2 | ||||
| -rw-r--r-- | challenge-159/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-159/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-159/polettix/perl/ch-1.pl | 19 | ||||
| -rw-r--r-- | challenge-159/polettix/perl/ch-2.pl | 23 | ||||
| -rw-r--r-- | challenge-159/polettix/perl/cpanfile | 1 | ||||
| -rw-r--r-- | challenge-159/polettix/perl/cpanfile.snapshot | 38 | ||||
| -rw-r--r-- | challenge-159/polettix/raku/ch-1.raku | 15 | ||||
| -rw-r--r-- | challenge-159/polettix/raku/ch-2.raku | 18 |
9 files changed, 78 insertions, 40 deletions
diff --git a/challenge-150/polettix/raku/ch-2.raku b/challenge-150/polettix/raku/ch-2.raku index 35a29749b0..a7f858a3e1 100644 --- a/challenge-150/polettix/raku/ch-2.raku +++ b/challenge-150/polettix/raku/ch-2.raku @@ -18,7 +18,7 @@ sub is-square-free ($N is copy) { return False if $N %% 4; my $divisor = 3; while $N > $divisor { - if $N %% $divisor == 0 { + if $N %% $divisor { $N = ($N / $divisor).Int; return False if $N %% $divisor; } diff --git a/challenge-159/polettix/blog.txt b/challenge-159/polettix/blog.txt new file mode 100644 index 0000000000..a7d0f36761 --- /dev/null +++ b/challenge-159/polettix/blog.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2022/04/05/pwc159-farey-sequence/ diff --git a/challenge-159/polettix/blog1.txt b/challenge-159/polettix/blog1.txt new file mode 100644 index 0000000000..98e41e86c3 --- /dev/null +++ b/challenge-159/polettix/blog1.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2022/04/06/pwc159-moebius-number/ diff --git a/challenge-159/polettix/perl/ch-1.pl b/challenge-159/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..960834ecd9 --- /dev/null +++ b/challenge-159/polettix/perl/ch-1.pl @@ -0,0 +1,19 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +say join ', ', farey_sequence(shift || 4); + +sub farey_sequence ($n) { + my @retval; + my @cache = (0, 1, 1, $n); + while ($cache[2] < $n) { + my $k = int(($n + $cache[1]) / $cache[3]); + push @cache, $k * $cache[2] - $cache[0], $k * $cache[3] - $cache[1]; + push @retval, join '/', splice @cache, 0, 2; + } + push @retval, '1/1'; + return @retval; +} diff --git a/challenge-159/polettix/perl/ch-2.pl b/challenge-159/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..19dea2a0b9 --- /dev/null +++ b/challenge-159/polettix/perl/ch-2.pl @@ -0,0 +1,23 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +say $_, ' ', moebius_number($_) for (@ARGV ? @ARGV : (1 .. 10)); + +sub moebius_number ($n) { + return 0 unless $n % 4; + ($n, my $n_divisors) = $n % 2 ? ($n, 0) : ($n / 2, 1); + my $divisor = 3; + while ($n >= $divisor) { + if ($n % $divisor == 0) { + ++$n_divisors; + $n /= $divisor; + return 0 unless $n % $divisor; + } + $divisor += 2; # go through odd candidates only + } + return 1 - 2 * ($n_divisors % 2); +} + diff --git a/challenge-159/polettix/perl/cpanfile b/challenge-159/polettix/perl/cpanfile deleted file mode 100644 index 91dda9616f..0000000000 --- a/challenge-159/polettix/perl/cpanfile +++ /dev/null @@ -1 +0,0 @@ -requires 'Math::Prime::Util'; diff --git a/challenge-159/polettix/perl/cpanfile.snapshot b/challenge-159/polettix/perl/cpanfile.snapshot deleted file mode 100644 index 2fd600a3af..0000000000 --- a/challenge-159/polettix/perl/cpanfile.snapshot +++ /dev/null @@ -1,38 +0,0 @@ -# carton snapshot format: version 1.0 -DISTRIBUTIONS - Math-Prime-Util-0.73 - pathname: D/DA/DANAJ/Math-Prime-Util-0.73.tar.gz - provides: - Math::Prime::Util 0.73 - Math::Prime::Util::ChaCha 0.73 - Math::Prime::Util::Entropy 0.73 - Math::Prime::Util::MemFree 0.73 - Math::Prime::Util::PP 0.73 - Math::Prime::Util::PrimeArray 0.73 - Math::Prime::Util::PrimeIterator 0.73 - ntheory 0.73 - requirements: - Carp 0 - Config 0 - Exporter 5.57 - ExtUtils::MakeMaker 0 - Math::BigFloat 1.59 - Math::BigInt 1.88 - Math::Prime::Util::GMP 0.50 - Tie::Array 0 - XSLoader 0.01 - base 0 - constant 0 - perl 5.006002 - Math-Prime-Util-GMP-0.52 - pathname: D/DA/DANAJ/Math-Prime-Util-GMP-0.52.tar.gz - provides: - Math::Prime::Util::GMP 0.52 - requirements: - Carp 0 - Exporter 5.57 - ExtUtils::MakeMaker 0 - Fcntl 0 - XSLoader 0.01 - base 0 - perl 5.006002 diff --git a/challenge-159/polettix/raku/ch-1.raku b/challenge-159/polettix/raku/ch-1.raku new file mode 100644 index 0000000000..e2c4ec19af --- /dev/null +++ b/challenge-159/polettix/raku/ch-1.raku @@ -0,0 +1,15 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (Int:D \n = 4) { farey-sequence(n).join(', ').put } + +sub farey-sequence (Int:D \n) { + my ($a, $b, $c, $d) = (0, 1, 1, n); + gather { + take "$a/$b"; + while $c <= n { + my $k = ((n + $b) / $d).Int; + ($a, $b, $c, $d) = $c, $d, $k * $c - $a, $k * $d - $b; + take "$a/$b"; + } + } +} diff --git a/challenge-159/polettix/raku/ch-2.raku b/challenge-159/polettix/raku/ch-2.raku new file mode 100644 index 0000000000..fb37765261 --- /dev/null +++ b/challenge-159/polettix/raku/ch-2.raku @@ -0,0 +1,18 @@ +#!/usr/bin/env raku +use v6; +multi sub MAIN (*@args) { put $_, ' ', möbius-number($_) for @args} + +sub möbius-number ($n is copy) { + return 0 if $n %% 4; + ($n, my $n-divisors) = $n %% 2 ?? (($n / 2).Int, 1) !! ($n, 0); + my $divisor = 3; + while $n >= $divisor { + if $n %% $divisor { + ++$n-divisors; + $n = ($n / $divisor).Int; + return 0 if $n %% $divisor; + } + $divisor += 2; # go through odd candidates only + } + return 1 - 2 * ($n-divisors % 2); +} |
