aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-04-05 20:53:42 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-04-05 20:53:42 +0100
commit36acda355e6cbc4eef682d586e6b0c78a7582143 (patch)
tree01d9ea9798c59a89b2dce4505311e246b375cf63
parent9941ef6b78a2d18ff06d03b0271ca09f82dc9a38 (diff)
parent07e792b044ad240c94e8cf9f653a66551504bb7f (diff)
downloadperlweeklychallenge-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.raku2
-rw-r--r--challenge-159/polettix/blog.txt1
-rw-r--r--challenge-159/polettix/blog1.txt1
-rw-r--r--challenge-159/polettix/perl/ch-1.pl19
-rw-r--r--challenge-159/polettix/perl/ch-2.pl23
-rw-r--r--challenge-159/polettix/perl/cpanfile1
-rw-r--r--challenge-159/polettix/perl/cpanfile.snapshot38
-rw-r--r--challenge-159/polettix/raku/ch-1.raku15
-rw-r--r--challenge-159/polettix/raku/ch-2.raku18
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);
+}