aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-01-04 18:24:41 +0000
committerGitHub <noreply@github.com>2022-01-04 18:24:41 +0000
commitbee16915f17fa19afb10949da81658cfa00047d6 (patch)
treee32b1f240469624fc2e7fd4527af81d11da5dc97
parent20ccf88a748f238da4cccb7e3964593da1ffe46d (diff)
parent8f96add9955393ac2040750a7bf515f54b04740f (diff)
downloadperlweeklychallenge-club-bee16915f17fa19afb10949da81658cfa00047d6.tar.gz
perlweeklychallenge-club-bee16915f17fa19afb10949da81658cfa00047d6.tar.bz2
perlweeklychallenge-club-bee16915f17fa19afb10949da81658cfa00047d6.zip
Merge pull request #5468 from jacoby/master
146
-rw-r--r--challenge-146/dave-jacoby/blog.txt1
-rw-r--r--challenge-146/dave-jacoby/perl/ch-1.pl26
-rw-r--r--challenge-146/dave-jacoby/perl/ch-2.pl122
3 files changed, 149 insertions, 0 deletions
diff --git a/challenge-146/dave-jacoby/blog.txt b/challenge-146/dave-jacoby/blog.txt
new file mode 100644
index 0000000000..c04583b202
--- /dev/null
+++ b/challenge-146/dave-jacoby/blog.txt
@@ -0,0 +1 @@
+https://jacoby.github.io/2022/01/03/fractions-trees-and-primes-weekly-challenge-146.html
diff --git a/challenge-146/dave-jacoby/perl/ch-1.pl b/challenge-146/dave-jacoby/perl/ch-1.pl
new file mode 100644
index 0000000000..da52a09f89
--- /dev/null
+++ b/challenge-146/dave-jacoby/perl/ch-1.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use feature qw{ say postderef signatures state };
+no warnings qw{ experimental };
+
+my @primes;
+my $c = 1;
+my $n = 2;
+
+while (1) {
+ if ( is_prime($n) ) {
+ if ( $c == 10001 ) {
+ say join "\t", $c, $n if $c == 10001;
+ exit;
+ }
+ $c++;
+ }
+ $n++;
+}
+
+sub is_prime ($n) {
+ for ( 2 .. sqrt $n ) { return unless $n % $_ }
+ return 1;
+}
diff --git a/challenge-146/dave-jacoby/perl/ch-2.pl b/challenge-146/dave-jacoby/perl/ch-2.pl
new file mode 100644
index 0000000000..b09ed82974
--- /dev/null
+++ b/challenge-146/dave-jacoby/perl/ch-2.pl
@@ -0,0 +1,122 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use feature qw{ say postderef signatures state };
+no warnings qw{ experimental };
+
+my %node;
+for my $i (
+ qw{
+ 1/1 1/2 2/1
+ 1/3 3/2 2/3
+ 3/1 1/4 4/3
+ 3/5 5/2 2/5
+ 5/3 3/4 4/1
+ }
+ )
+{
+ $node{$i} = Node->new($i);
+}
+
+$node{'1/1'}->left( $node{'1/2'} ); # 1
+$node{'1/1'}->right( $node{'2/1'} ); # 1
+
+$node{'1/2'}->left( $node{'1/3'} ); # 2
+$node{'1/2'}->right( $node{'3/2'} ); # 2
+
+$node{'1/3'}->left( $node{'1/4'} ); # 3
+$node{'1/3'}->right( $node{'4/3'} ); # 3
+
+$node{'2/1'}->left( $node{'2/3'} ); # 2
+$node{'2/1'}->right( $node{'3/1'} ); # 2
+
+$node{'2/3'}->left( $node{'2/5'} ); # 3
+$node{'2/3'}->right( $node{'5/3'} ); # 3
+
+$node{'3/1'}->left( $node{'3/4'} ); # 3
+$node{'3/1'}->right( $node{'4/1'} ); # 3
+
+$node{'3/2'}->left( $node{'3/5'} ); # 3
+$node{'3/2'}->right( $node{'5/2'} ); # 3
+
+for my $n ( sort keys %node ) {
+ my $node = $node{$n};
+ my $parent = '';
+ my $grandparent = '';
+ if ( defined $node->parent ) {
+ $parent = $node->parent->value;
+ if ( defined $node->parent->parent ) {
+ $grandparent = $node->parent->parent->value;
+ }
+ }
+ say <<"END";
+ INPUT: \$member = "$n"
+ OUTPUT: parent = "$parent" and grandparent = "$grandparent"
+END
+}
+
+package Node;
+
+sub new ( $class, $value = 0 ) {
+ my $self = {};
+ $self->{value} = $value;
+ $self->{left} = undef;
+ $self->{right} = undef;
+ $self->{horizontal} = undef;
+ $self->{parent} = undef;
+ return bless $self, $class;
+}
+
+sub value ( $self, $value = undef ) {
+ if ( defined $value ) {
+ $self->{value} = $value;
+ }
+ else {
+ return $self->{value};
+ }
+}
+
+sub is_root ( $self ) {
+ return defined $self->{parent} ? 0 : 1;
+}
+
+sub is_leaf ( $self ) {
+ return ( !defined $self->{left} && !defined $self->{right} )
+ ? 1
+ : 0;
+}
+
+sub left ( $self, $node = undef ) {
+ if ( defined $node ) {
+ $self->{left} = $node;
+ $node->{parent} = $self;
+ }
+ else {
+ return $self->{left};
+ }
+}
+
+sub right ( $self, $node = undef ) {
+ if ( defined $node ) {
+ $self->{right} = $node;
+ $node->{parent} = $self;
+ }
+ else {
+ return $self->{right};
+ }
+}
+
+sub horizontal ( $self, $node = undef ) {
+ if ( defined $node ) {
+ $self->{horizontal} = $node;
+ $node->{parent} = $self;
+ }
+ else {
+ return $self->{horizontal};
+ }
+}
+
+sub parent ($self ) {
+ return $self->{parent};
+}