diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-01-07 09:52:35 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-01-07 09:52:35 +0000 |
| commit | 208b75a7c1919f3c2e3c3098fcb532d71cccfe63 (patch) | |
| tree | b3156f8cd3939c27b85bb171b0597b6c0dbdb168 /challenge-146 | |
| parent | 1b2a5e704c4f5afc159c51872b1dcab1e5186698 (diff) | |
| download | perlweeklychallenge-club-208b75a7c1919f3c2e3c3098fcb532d71cccfe63.tar.gz perlweeklychallenge-club-208b75a7c1919f3c2e3c3098fcb532d71cccfe63.tar.bz2 perlweeklychallenge-club-208b75a7c1919f3c2e3c3098fcb532d71cccfe63.zip | |
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-146')
| -rw-r--r-- | challenge-146/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/julia/ch-2.jl | 11 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/perl/ch-1.pl | 26 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/perl/ch-2.pl | 19 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/python/ch-2.py | 10 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/raku/ch-1.raku | 4 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/raku/ch-2.raku | 12 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/ring/ch-1.ring | 24 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/ring/ch-2.ring | 21 |
9 files changed, 128 insertions, 0 deletions
diff --git a/challenge-146/laurent-rosenfeld/blog.txt b/challenge-146/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..75b6bbfcdc --- /dev/null +++ b/challenge-146/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/2022/01/perl-weekly-challenge-146-prime-numbers-and-fraction-tree.html diff --git a/challenge-146/laurent-rosenfeld/julia/ch-2.jl b/challenge-146/laurent-rosenfeld/julia/ch-2.jl new file mode 100644 index 0000000000..65a5ec63df --- /dev/null +++ b/challenge-146/laurent-rosenfeld/julia/ch-2.jl @@ -0,0 +1,11 @@ +function find_parent(num, denom) + return num < denom ? [num, denom - num] : + num > denom ? [num - denom, denom] : + ("Error on node $num $denom"); +end + +for test in [ [5, 2], [2, 5], [3, 4], [3, 5], [1, 2] ] + parent = find_parent(test[1], test[2]) + gd_parent = find_parent(parent[1], parent[2]) + println("Node $test has parent $parent and grand-parent $gd_parent") +end diff --git a/challenge-146/laurent-rosenfeld/perl/ch-1.pl b/challenge-146/laurent-rosenfeld/perl/ch-1.pl new file mode 100644 index 0000000000..6d62f8471e --- /dev/null +++ b/challenge-146/laurent-rosenfeld/perl/ch-1.pl @@ -0,0 +1,26 @@ +use strict; +use warnings; +use feature "say"; +use constant MAX => 10_001; + +sub primes { + my $max = shift; + my @primes = (2, 3, 5); + my $count = 3; + my $candidate = $primes[-1]; + while ($count <= $max) { + $candidate += 2; + my $not_prime = 0; + my $sq_cand = sqrt $candidate; + for my $i (@primes) { + $not_prime = 1, last unless $candidate % $i; + last if $i > $sq_cand; + } + next if $not_prime; + push @primes, $candidate; + $count ++; + } + return $primes[$max-1]; +} +my $p = primes(MAX); +say "$p"; diff --git a/challenge-146/laurent-rosenfeld/perl/ch-2.pl b/challenge-146/laurent-rosenfeld/perl/ch-2.pl new file mode 100644 index 0000000000..c9b8f20cbe --- /dev/null +++ b/challenge-146/laurent-rosenfeld/perl/ch-2.pl @@ -0,0 +1,19 @@ +use strict; +use warnings; +use feature "say"; + +# for a node x/y less than 1, parent is x/(y-x) +# for a node x/y larger than 1, parent is (x-y)/x + +sub parent { + my ($num, $denom) = @{$_[0]}; + return ["Error"] if $num == $denom; + return $num < $denom ? [$num, $denom - $num] : [$num - $denom, $denom]; +} + +for my $fraction ([5, 2], [2, 5], [3, 4], [3, 5], [2, 1], [1, 1]) { + die "Invalid input node @$fraction" if $$fraction[0] == $$fraction[1]; + my $parent = parent $fraction; + my $gd_parent = parent $parent; + say "for child @$fraction, parent is @$parent and gd-parent is @$gd_parent"; +} diff --git a/challenge-146/laurent-rosenfeld/python/ch-2.py b/challenge-146/laurent-rosenfeld/python/ch-2.py new file mode 100644 index 0000000000..7120a602a7 --- /dev/null +++ b/challenge-146/laurent-rosenfeld/python/ch-2.py @@ -0,0 +1,10 @@ +# for a node x/y less than 1, parent is x/(y-x) +# for a node x/y larger than 1, parent is (x-y)/x + +def find_parent(num, denom): + return [num, denom - num] if num < denom else [num - denom, denom] + +for test in ([5, 2], [2, 5], [3, 4], [3, 5]): + parent = find_parent(test[0], test[1]) + gd_parent = find_parent(parent[0], parent[1]) + print("Node", test, "has parent", parent, "and grand-parent", gd_parent) diff --git a/challenge-146/laurent-rosenfeld/raku/ch-1.raku b/challenge-146/laurent-rosenfeld/raku/ch-1.raku new file mode 100644 index 0000000000..b181fb89cd --- /dev/null +++ b/challenge-146/laurent-rosenfeld/raku/ch-1.raku @@ -0,0 +1,4 @@ +use v6; + +my @primes = grep { .is-prime }, (1, 2, 3, -> $a { $a + 2} ...Inf); +say @primes[10001 - 1]; # Subtract 1 because the array starts at 0 diff --git a/challenge-146/laurent-rosenfeld/raku/ch-2.raku b/challenge-146/laurent-rosenfeld/raku/ch-2.raku new file mode 100644 index 0000000000..22976624bc --- /dev/null +++ b/challenge-146/laurent-rosenfeld/raku/ch-2.raku @@ -0,0 +1,12 @@ +use v6; + +# for a node x/y less than 1, parent is x/(y-x) +# for a node x/y larger than 1, parent is (x-y)/x + +sub parent (\num, \denom) { + return num < denom ?? (num, denom - num) !! (num - denom, denom); +} +for (5, 2), (2, 5), (3, 4), (3, 5) -> $fraction { + my $parent = parent |$fraction[0,1]; + my $gd-parent = parent |$parent[0,1]; + say "for child $fraction, parent is $parent and gd-parent is $gd-parent"; diff --git a/challenge-146/laurent-rosenfeld/ring/ch-1.ring b/challenge-146/laurent-rosenfeld/ring/ch-1.ring new file mode 100644 index 0000000000..bd5ecf2178 --- /dev/null +++ b/challenge-146/laurent-rosenfeld/ring/ch-1.ring @@ -0,0 +1,24 @@ +p = primes(10001) +see p + nl + +func primes max + primes = [2, 3, 5] + count = len(primes) + candidate = primes[count] + while count < max + candidate += 2 + is_prime = True + sqrt_cand = sqrt(candidate) + for i in primes + if candidate % i = 0 + is_prime = False + exit + ok + if i > sqrt_cand exit ok + next + if is_prime + add(primes, candidate) + count ++ + ok + end + return primes[max] diff --git a/challenge-146/laurent-rosenfeld/ring/ch-2.ring b/challenge-146/laurent-rosenfeld/ring/ch-2.ring new file mode 100644 index 0000000000..78b9092395 --- /dev/null +++ b/challenge-146/laurent-rosenfeld/ring/ch-2.ring @@ -0,0 +1,21 @@ +# for a node x/y less than 1, parent is x/(y-x) +# for a node x/y larger than 1, parent is (x-y)/x + +for test in [ [5, 2], [2, 5], [3, 4], [3,5], [6, 2], [1, 2] ] + parent = find_parent(test[1], test[2]) + gd_parent = find_parent(parent[1], parent[2]) + see "Node " + to_str(test) + " has parent " + to_str(parent) + + " and grand-parent " + to_str(gd_parent) + nl +next + +func find_parent num, denom + if num < denom + return [num, denom - num] + but denom < num + return [num - denom, denom] + else + return ["Error", ""] + ok + +func to_str input + return "" + input[1] + " " + input[2] |
