From 71d2d3de5cbdeafc80c4324cea73a2929a497ff5 Mon Sep 17 00:00:00 2001 From: Luca Ferrari Date: Mon, 6 Sep 2021 12:52:10 +0200 Subject: Task 1 done --- challenge-129/luca-ferrari/raku/ch-1.p6 | 41 +++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 challenge-129/luca-ferrari/raku/ch-1.p6 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; +} -- cgit