diff options
| author | Dave Jacoby <jacoby.david@gmail.com> | 2022-04-04 13:44:03 -0400 |
|---|---|---|
| committer | Dave Jacoby <jacoby.david@gmail.com> | 2022-04-04 13:44:03 -0400 |
| commit | 647b74ecb1a645b347041cfd048e61ebfa3edd4c (patch) | |
| tree | ea6fdc422f2437c946397ddc5e6f3e37f0378b5d /challenge-159/dave-jacoby | |
| parent | 21b2771f7439710ee9a4631c40679a916ca9f723 (diff) | |
| download | perlweeklychallenge-club-647b74ecb1a645b347041cfd048e61ebfa3edd4c.tar.gz perlweeklychallenge-club-647b74ecb1a645b347041cfd048e61ebfa3edd4c.tar.bz2 perlweeklychallenge-club-647b74ecb1a645b347041cfd048e61ebfa3edd4c.zip | |
Done with 159
Diffstat (limited to 'challenge-159/dave-jacoby')
| -rw-r--r-- | challenge-159/dave-jacoby/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-159/dave-jacoby/perl/ch-1.pl | 31 | ||||
| -rw-r--r-- | challenge-159/dave-jacoby/perl/ch-2.pl | 41 |
3 files changed, 73 insertions, 0 deletions
diff --git a/challenge-159/dave-jacoby/blog.txt b/challenge-159/dave-jacoby/blog.txt new file mode 100644 index 0000000000..7e8bde9c00 --- /dev/null +++ b/challenge-159/dave-jacoby/blog.txt @@ -0,0 +1 @@ +https://jacoby.github.io/2022/04/04/mtal-perlant-weekly-challenge-159.html diff --git a/challenge-159/dave-jacoby/perl/ch-1.pl b/challenge-159/dave-jacoby/perl/ch-1.pl new file mode 100644 index 0000000000..1cbd72e7df --- /dev/null +++ b/challenge-159/dave-jacoby/perl/ch-1.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature qw{ say postderef signatures state }; +no warnings qw{ experimental }; + +use Carp; +use Getopt::Long; + +my $n = 6; +GetOptions( 'number=i' => \$n, ); +croak 'Out of range' if $n < 1; + +farey($n); + +sub farey ( $i ) { + my %farey; + for my $d ( 1 .. $i ) { + for my $n ( 0 .. $d ) { + my $k = eval( $n / $d ); + $farey{$k} = qq{$n/$d} unless defined $farey{$k}; + } + } + my $output = join ', ', map { $farey{$_} } sort { $a <=> $b } keys %farey; + + say <<"END"; +Input: \$n = $i +Output: $output. +END +} diff --git a/challenge-159/dave-jacoby/perl/ch-2.pl b/challenge-159/dave-jacoby/perl/ch-2.pl new file mode 100644 index 0000000000..8153825005 --- /dev/null +++ b/challenge-159/dave-jacoby/perl/ch-2.pl @@ -0,0 +1,41 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature qw{ say postderef signatures state }; +no warnings qw{ experimental }; + +use utf8; + +for my $n ( 1 .. 50 ) { + my $μ = möbius($n); + print join " ", " " , map { sprintf '%2d', $_ } $n, $μ; + say '' if $n % 10 == 0; +} + +sub möbius ($n) { + my @primes = prime_factors($n); + my %primes; + + # has squared prime factor + map { $primes{$_}++ } @primes; + for my $k ( keys %primes ) { + return 0 if $primes{$k} > 1; + } + + # square-free + my $p = scalar @primes; + return $p % 2 == 0 ? 1 : -1; +} + +sub prime_factors( $n ) { + my @primes; + my $nn = $n; + for my $i ( 2 .. $n ) { + while ( $nn % $i == 0 ) { + $nn = $nn / $i; + push @primes, $i; + } + } + return @primes; +} |
