diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2022-01-03 18:41:46 +0100 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2022-01-03 18:41:46 +0100 |
| commit | 03b7084ad8cf90efa0d3b4a3c2066a87b9db8ae1 (patch) | |
| tree | 4f1faf1b3d4e070166d4820880e511fc140971eb | |
| parent | 696e058a930f0425dcbce580a5ac2441a25985d2 (diff) | |
| download | perlweeklychallenge-club-03b7084ad8cf90efa0d3b4a3c2066a87b9db8ae1.tar.gz perlweeklychallenge-club-03b7084ad8cf90efa0d3b4a3c2066a87b9db8ae1.tar.bz2 perlweeklychallenge-club-03b7084ad8cf90efa0d3b4a3c2066a87b9db8ae1.zip | |
Task 2 done
| -rwxr-xr-x | challenge-146/luca-ferrari/raku/ch-2.p6 | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/challenge-146/luca-ferrari/raku/ch-2.p6 b/challenge-146/luca-ferrari/raku/ch-2.p6 new file mode 100755 index 0000000000..6093592af2 --- /dev/null +++ b/challenge-146/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,62 @@ +#!raku + + +class Node { + has Rat $.member; + has Int $.level; + has Node $.left; + has Node $.right; + has Node $.parent is rw; + + submethod BUILD( Rat :$member, Int :$level = 1, Int :$stop-at = 4 ) { + $!member = $member; + $!level = $level; + + if ( $level < $stop-at ) { + my $sum = $!member.numerator + $!member.denominator; + $!left = Node.new: member => $member.numerator / $sum, + level => $level + 1, + stop-at => $stop-at; + $!right = Node.new: member => $sum / $member.denominator, + level => $level + 1, + stop-at => $stop-at; + } + } + + + method adjust() { + $!left.parent = self if $!left; + $!right.parent = self if $!right; + $!left.adjust if $!left; + $!right.adjust if $!right; + } + + method search-from-here ( Rat $needle ) { + return self if $!member ~~ $needle; + + if ( $!left ) { + my $left = $!left.search-from-here( $needle ); + return $left if $left; + } + if ( $!right ) { + my $right = $!right.search-from-here( $needle ); + return $right if $right; + } + return Nil; + } + + method Str(){ $!member.numerator ~ '/' ~ $!member.denominator } +} + +sub MAIN( Rat $member ) { + say $member; + + my $level = 1; + my $root = Node.new: member => 1.Rat; + $root.adjust; + + + my Node $which = $root.search-from-here( $member ); + "Not found $member " and exit if ! $which; + "Node $member found: { $which.Str } with parent { $which.parent.Str } and grandparent { $which.parent.parent.Str }".say; +} |
