aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-129/luca-ferrari/raku/ch-1.p641
1 files changed, 41 insertions, 0 deletions
diff --git a/challenge-129/luca-ferrari/raku/ch-1.p6 b/challenge-129/luca-ferrari/raku/ch-1.p6
new file mode 100644
index 0000000000..692ae15af4
--- /dev/null
+++ b/challenge-129/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,41 @@
+#!raku
+
+
+class Node {
+ has Node $.left is rw;
+ has Node $.right is rw;
+
+ has Int $.value;
+ has Int $.level = 0;
+
+ method is-leaf() { ! $!left && ! $!right }
+
+ method find-from-here( Int $needle ) {
+ return self if $!value == $needle;
+
+ my $r = $!right.find-from-here( $needle ) if $!right;
+ return $r if $r;
+ my $l = $!left.find-from-here( $needle ) if $!left;
+ return $l if $l;
+ return Nil if self.is-leaf;
+
+ }
+}
+
+
+sub MAIN( Int $needle = 6 ) {
+ my $level = 1;
+ my $root = Node.new( value => 1,
+ left => Node.new( value => 2, level => $level ),
+ right => Node.new( value => 3, level => $level ) );
+ $root.right.right = Node.new( value => 4, level => ++$level );
+ $level++;
+ $root.right.right.right = Node.new( value => 6, level => $level );
+ $root.right.right.left = Node.new( value => 5, level => $level );
+
+
+
+ my $current = $root.find-from-here( $needle );
+ say "Found $needle at distance { $current.level }" if $current;
+ say "Not found $needle" if ! $current;
+}