From 8f96add9955393ac2040750a7bf515f54b04740f Mon Sep 17 00:00:00 2001 From: Dave Jacoby Date: Mon, 3 Jan 2022 16:18:47 -0500 Subject: 146 --- challenge-146/dave-jacoby/blog.txt | 1 + challenge-146/dave-jacoby/perl/ch-1.pl | 26 +++++++ challenge-146/dave-jacoby/perl/ch-2.pl | 122 +++++++++++++++++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 challenge-146/dave-jacoby/blog.txt create mode 100644 challenge-146/dave-jacoby/perl/ch-1.pl create mode 100644 challenge-146/dave-jacoby/perl/ch-2.pl 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}; +} -- cgit