aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2022-01-03 18:41:46 +0100
committerLuca Ferrari <fluca1978@gmail.com>2022-01-03 18:41:46 +0100
commit03b7084ad8cf90efa0d3b4a3c2066a87b9db8ae1 (patch)
tree4f1faf1b3d4e070166d4820880e511fc140971eb
parent696e058a930f0425dcbce580a5ac2441a25985d2 (diff)
downloadperlweeklychallenge-club-03b7084ad8cf90efa0d3b4a3c2066a87b9db8ae1.tar.gz
perlweeklychallenge-club-03b7084ad8cf90efa0d3b4a3c2066a87b9db8ae1.tar.bz2
perlweeklychallenge-club-03b7084ad8cf90efa0d3b4a3c2066a87b9db8ae1.zip
Task 2 done
-rwxr-xr-xchallenge-146/luca-ferrari/raku/ch-2.p662
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;
+}