diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2021-09-06 12:52:10 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2021-09-06 12:52:10 +0200 |
| commit | 71d2d3de5cbdeafc80c4324cea73a2929a497ff5 (patch) | |
| tree | 72e43cc5af555a8dd305dd8e33befa1f85d9d1a3 | |
| parent | 6ee7e9d0a9b5f5b7bbe928a118a52d65b04e59e9 (diff) | |
| download | perlweeklychallenge-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.p6 | 41 |
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; +} |
