diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-06-15 23:21:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-06-15 23:21:07 +0100 |
| commit | 2686058c3714ebeeafb1fb8b3e203a372e9aae91 (patch) | |
| tree | db6f158d1abbeca6a0ea5b9f8dc63c511be2f78e /challenge-012 | |
| parent | 19ce5b889816253b49a2544947f5386a19953a7e (diff) | |
| parent | 3108eb9b454aa145f154dea0060c99097b1efe67 (diff) | |
| download | perlweeklychallenge-club-2686058c3714ebeeafb1fb8b3e203a372e9aae91.tar.gz perlweeklychallenge-club-2686058c3714ebeeafb1fb8b3e203a372e9aae91.tar.bz2 perlweeklychallenge-club-2686058c3714ebeeafb1fb8b3e203a372e9aae91.zip | |
Merge pull request #253 from seaker/master
changllege #12 answers from feng chang
Diffstat (limited to 'challenge-012')
| -rwxr-xr-x | challenge-012/feng-chang/perl5/ch-1.pl | 72 | ||||
| -rwxr-xr-x | challenge-012/feng-chang/perl5/ch-2.pl | 27 | ||||
| -rw-r--r-- | challenge-012/feng-chang/perl5/paths.txt | 4 | ||||
| -rwxr-xr-x | challenge-012/feng-chang/perl6/ch-1.p6 | 12 | ||||
| -rwxr-xr-x | challenge-012/feng-chang/perl6/ch-2.p6 | 17 | ||||
| -rw-r--r-- | challenge-012/feng-chang/perl6/paths.txt | 4 |
6 files changed, 136 insertions, 0 deletions
diff --git a/challenge-012/feng-chang/perl5/ch-1.pl b/challenge-012/feng-chang/perl5/ch-1.pl new file mode 100755 index 0000000000..21129a546b --- /dev/null +++ b/challenge-012/feng-chang/perl5/ch-1.pl @@ -0,0 +1,72 @@ +#!/bin/env perl + +use Modern::Perl; +use List::Util qw(min max); +use POSIX; + +my @primes = (2, 3); + +sub more_primes { + my $to = shift; + my $from = $primes[-1] + 1; + my $P; + + do { + $P = $primes[-1]; + my @a = ($P + 1) .. min($to, $P * $P); + + for my $p (@primes) { + for (my $i = ceil($from / $p) * $p - $from; $i <= $to; $i += $p) { + $a[$i] = 0; + } + } + + for my $i (@a) { + push(@primes, $i) if $i; + } + } while ($P * $P < $to); +} + +sub is_prime { + my $n = shift; + + my $e = int(sqrt($n)); + more_primes($e) if $e > $primes[-1]; + + for my $p (@primes) { + last if $p > $e; + return 0 if $n % $p == 0; + } + + return 1; +} + +sub get_prime { + my $idx = shift; + return $primes[$idx] if $idx + 1 <= @primes; + + do { + my $n = $primes[-1]; + more_primes($n * $n); + } while ($idx + 1 > @primes); + + return $primes[$idx]; +} + +if (@ARGV) { + my $n = $ARGV[0]; + say "$n is ", is_prime($n) ? '' : 'not ', 'prime'; + exit 0; +} + +my $prod = 1; +my $i = 0; +while (1) { + $prod *= get_prime($i); + print $primes[$i], ' '; + last unless is_prime($prod + 1); + + ++$i; +} + +say $prod + 1; diff --git a/challenge-012/feng-chang/perl5/ch-2.pl b/challenge-012/feng-chang/perl5/ch-2.pl new file mode 100755 index 0000000000..c3c26e5f79 --- /dev/null +++ b/challenge-012/feng-chang/perl5/ch-2.pl @@ -0,0 +1,27 @@ +#!/bin/env perl + +use Modern::Perl; +use List::Util qw(reduce); + +sub common_prefix { + my ($a, $b) = @_; + my @a = split //, $a; + my @b = split //, $b; + + my $r = ''; + my $i = 0; + while ($a[$i] && $b[$i] && $a[$i] eq $b[$i]) { + $r .= $a[$i++]; + } + + return $r; +} + +chomp(my @paths = <>); +my $common_path = reduce { common_prefix($a, $b) } @paths; + +my @c = split //, $common_path; +pop @c while $c[-1] ne '/'; +pop @c if @c > 1; + +say 'common directory path: ', join('', @c); diff --git a/challenge-012/feng-chang/perl5/paths.txt b/challenge-012/feng-chang/perl5/paths.txt new file mode 100644 index 0000000000..1427e2dbc8 --- /dev/null +++ b/challenge-012/feng-chang/perl5/paths.txt @@ -0,0 +1,4 @@ +/a/b/c/d +/a/b/cd +/a/b/cc +/a/b/c/d/e diff --git a/challenge-012/feng-chang/perl6/ch-1.p6 b/challenge-012/feng-chang/perl6/ch-1.p6 new file mode 100755 index 0000000000..5e58b20b50 --- /dev/null +++ b/challenge-012/feng-chang/perl6/ch-1.p6 @@ -0,0 +1,12 @@ +#!/bin/env perl6 + +my $euc = (^∞).grep: *.is-prime; + +my $prod = 1; +for 0 .. ∞ -> Int $i { + $prod *= $euc[$i]; + print $euc[$i], ' '; + last unless ($prod + 1).is-prime; + + LAST { say $prod + 1 } +} diff --git a/challenge-012/feng-chang/perl6/ch-2.p6 b/challenge-012/feng-chang/perl6/ch-2.p6 new file mode 100755 index 0000000000..1ea095468d --- /dev/null +++ b/challenge-012/feng-chang/perl6/ch-2.p6 @@ -0,0 +1,17 @@ +#!/bin/env perl6 + +sub common_prefix(Str $a, Str $b) { + my @a = $a.comb; + my @b = $b.comb; + + for 0..∞ -> $i { + last unless @a[$i].defined && @b[$i].defined && @a[$i] eq @b[$i]; + LAST { return @a[0 .. $i - 1].join } + } +} + +my @c = ([[&common_prefix]] 'paths.txt'.IO.lines).comb; +@c.pop while @c[* - 1] ne '/'; +@c.pop if @c.elems > 1; + +say 'common directory path: ', @c.join; diff --git a/challenge-012/feng-chang/perl6/paths.txt b/challenge-012/feng-chang/perl6/paths.txt new file mode 100644 index 0000000000..1427e2dbc8 --- /dev/null +++ b/challenge-012/feng-chang/perl6/paths.txt @@ -0,0 +1,4 @@ +/a/b/c/d +/a/b/cd +/a/b/cc +/a/b/c/d/e |
