aboutsummaryrefslogtreecommitdiff
path: root/challenge-159
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-04-10 16:53:09 +0100
committerGitHub <noreply@github.com>2022-04-10 16:53:09 +0100
commita37a51906a2a45a3276840a9d4eed218df692c2f (patch)
treed37814dca89f3059c49cfe7edf6d3464cb001091 /challenge-159
parentb338f1334ce67fbbdf66b7e036f1e2827ac706a2 (diff)
parent1f7f29d2e29e3d87aa552f2e4d4c15957078393b (diff)
downloadperlweeklychallenge-club-a37a51906a2a45a3276840a9d4eed218df692c2f.tar.gz
perlweeklychallenge-club-a37a51906a2a45a3276840a9d4eed218df692c2f.tar.bz2
perlweeklychallenge-club-a37a51906a2a45a3276840a9d4eed218df692c2f.zip
Merge pull request #5905 from adamcrussell/challenge-159
Challenge 159
Diffstat (limited to 'challenge-159')
-rw-r--r--challenge-159/adam-russell/blog.txt1
-rw-r--r--challenge-159/adam-russell/perl/ch-1.pl25
-rw-r--r--challenge-159/adam-russell/perl/ch-2.pl41
3 files changed, 67 insertions, 0 deletions
diff --git a/challenge-159/adam-russell/blog.txt b/challenge-159/adam-russell/blog.txt
new file mode 100644
index 0000000000..bec9274e05
--- /dev/null
+++ b/challenge-159/adam-russell/blog.txt
@@ -0,0 +1 @@
+http://www.rabbitfarm.com/cgi-bin/blosxom/perl/2022/04/10
diff --git a/challenge-159/adam-russell/perl/ch-1.pl b/challenge-159/adam-russell/perl/ch-1.pl
new file mode 100644
index 0000000000..8d36c68b9b
--- /dev/null
+++ b/challenge-159/adam-russell/perl/ch-1.pl
@@ -0,0 +1,25 @@
+use strict;
+use warnings;
+##
+# You are given a positive number, $n. Write a script
+# to compute the Farey Sequence of the order $n.
+##
+use POSIX;
+
+sub farey{
+ my($order) = @_;
+ my @farey;
+ my($s, $t, $u, $v, $x, $y) = (0, 1, 1, $order, 0, 0);
+ push @farey, "$s/$t", "$u/$v";
+ while($y != 1 && $order > 1){
+ $x = POSIX::floor(($t + $order) / $v) * $u - $s;
+ $y = POSIX::floor(($t + $order) / $v) * $v - $t;
+ push @farey, "$x/$y";
+ ($s, $t, $u, $v) = ($u, $v, $x, $y);
+ }
+ return @farey;
+}
+
+MAIN:{
+ print join(", ", farey(7)) . "\n";
+} \ No newline at end of file
diff --git a/challenge-159/adam-russell/perl/ch-2.pl b/challenge-159/adam-russell/perl/ch-2.pl
new file mode 100644
index 0000000000..725bf897af
--- /dev/null
+++ b/challenge-159/adam-russell/perl/ch-2.pl
@@ -0,0 +1,41 @@
+use strict;
+use warnings;
+##
+# You are given a positive number $n. Write a script
+# to generate the Moebius Number for the given number.
+##
+use POSIX;
+use Math::Complex;
+
+sub farey{
+ my($order) = @_;
+ my @farey;
+ my($s, $t, $u, $v, $x, $y) = (0, 1, 1, $order, 0, 0);
+ push @farey, "$s/$t", "$u/$v";
+ while($y != 1 && $order > 1){
+ $x = POSIX::floor(($t + $order) / $v) * $u - $s;
+ $y = POSIX::floor(($t + $order) / $v) * $v - $t;
+ push @farey, "$x/$y";
+ ($s, $t, $u, $v) = ($u, $v, $x, $y);
+ }
+ return @farey;
+}
+
+sub mertens{
+ my($n) = @_;
+ my @farey = farey($n);
+ my $mertens = 0;
+ map {$mertens += exp(2 * M_PI * i * eval($_))} @farey;
+ $mertens += -1;
+ return Re($mertens);
+}
+
+sub moebius{
+ my($n) = @_;
+ return 1 if $n == 1;
+ return sprintf("%.f", (mertens($n) - mertens($n - 1)));
+}
+
+MAIN:{
+ map {print moebius($_) . "\n"} (5, 10, 20);
+} \ No newline at end of file