aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2021-09-06 12:52:10 +0200
committerLuca Ferrari <fluca1978@gmail.com>2021-09-06 12:52:10 +0200
commit71d2d3de5cbdeafc80c4324cea73a2929a497ff5 (patch)
tree72e43cc5af555a8dd305dd8e33befa1f85d9d1a3
parent6ee7e9d0a9b5f5b7bbe928a118a52d65b04e59e9 (diff)
downloadperlweeklychallenge-club-71d2d3de5cbdeafc80c4324cea73a2929a497ff5.tar.gz
perlweeklychallenge-club-71d2d3de5cbdeafc80c4324cea73a2929a497ff5.tar.bz2
perlweeklychallenge-club-71d2d3de5cbdeafc80c4324cea73a2929a497ff5.zip
Task 1 done
-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;
+}