aboutsummaryrefslogtreecommitdiff
path: root/challenge-146
diff options
context:
space:
mode:
authorandrezgz <andrezgz@gmail.com>2022-01-04 17:48:10 -0300
committerandrezgz <andrezgz@gmail.com>2022-01-04 17:48:10 -0300
commitb133bb9d785de26a728841c0358f27fb17a30c17 (patch)
treee0d05838f4a2969620f8901806aeb713818ea307 /challenge-146
parent32ff6b7fc73fa090a86b79e18ee5bcf8e7efe614 (diff)
downloadperlweeklychallenge-club-b133bb9d785de26a728841c0358f27fb17a30c17.tar.gz
perlweeklychallenge-club-b133bb9d785de26a728841c0358f27fb17a30c17.tar.bz2
perlweeklychallenge-club-b133bb9d785de26a728841c0358f27fb17a30c17.zip
challenge-146 andrezgz solution
Diffstat (limited to 'challenge-146')
-rw-r--r--challenge-146/andrezgz/perl/ch-1.pl29
-rw-r--r--challenge-146/andrezgz/perl/ch-2.pl64
2 files changed, 93 insertions, 0 deletions
diff --git a/challenge-146/andrezgz/perl/ch-1.pl b/challenge-146/andrezgz/perl/ch-1.pl
new file mode 100644
index 0000000000..a7c3477f50
--- /dev/null
+++ b/challenge-146/andrezgz/perl/ch-1.pl
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-146/
+# TASK #1 > 10001st Prime Number
+#
+# Write a script to generate the 10001st prime number.
+
+use strict;
+use warnings;
+use feature 'say';
+
+my $n = 1;
+my $count = 0;
+
+do {} until (is_prime(++$n) && ++$count == 10001 && print $n);
+
+sub is_prime {
+ my $n = shift;
+ #every composite number has a prime factor less than or equal to its square root.
+ return 1 == grep {$n % $_ == 0} (1 .. sqrt $n);
+}
+
+__END__
+
+$ time ./ch-1.pl
+104743
+real 0m2.137s
+user 0m2.106s
+sys 0m0.030s
diff --git a/challenge-146/andrezgz/perl/ch-2.pl b/challenge-146/andrezgz/perl/ch-2.pl
new file mode 100644
index 0000000000..62e9454ad1
--- /dev/null
+++ b/challenge-146/andrezgz/perl/ch-2.pl
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-146/
+# Task #2 > Curious Fraction Tree
+#
+# You are given a fraction, member of the tree created similar to the above sample.
+#
+# Write a script to find out the parent and grandparent of the given member.
+#
+# Example 1:
+# Input: $member = '3/5';
+# Output: parent = '3/2' and grandparent = '1/2'
+# Example 2:
+# Input: $member = '4/3';
+# Output: parent = '1/3' and grandparent = '1/2'
+
+use strict;
+use warnings;
+use feature 'say';
+
+my $member = shift || die "Argument member is missing e.g. 5/3 \n";
+
+my $ftree = {
+ v => '1/1',
+ l => {
+ v => '1/2',
+ l => { v => '1/3', l => { v=> '1/4' }, r => { v=> '4/3' } },
+ r => { v => '3/2', l => { v=> '3/5' }, r => { v=> '5/2' } }
+ },
+ r => {
+ v => '2/1',
+ l => { v => '2/3', l => { v=> '2/5' }, r => { v=> '5/3' } },
+ r => { v => '3/1', l => { v=> '3/4' }, r => { v=> '4/1' } }
+ }
+};
+
+travel($ftree);
+
+exit 0;
+
+sub travel {
+ my $node = shift;
+ my $parent = shift // 'N/A';
+ my $grandparent = shift // 'N/A';
+
+ if ($member eq $node->{v}) {
+ say "parent = $parent and grandparent = $grandparent";
+ }
+ else {
+ travel($node->{l},$node->{v},$parent) if exists $node->{l};
+ travel($node->{r},$node->{v},$parent) if exists $node->{r};
+ }
+}
+
+__END__
+
+./ch-2.pl 4/1
+parent = 3/1 and grandparent = 2/1
+
+$ ./ch-2.pl 2/1
+parent = 1/1 and grandparent = N/A
+
+$./ch-2.pl 1/1
+parent = N/A and grandparent = N/A