aboutsummaryrefslogtreecommitdiff
path: root/challenge-056/markus-holzer/raku/ch-2.p6
blob: 2f2c0dad0b5087c4c883bb0bad182f3e17b9fe16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
my %tree =
    5 => {
        4 => {
            11 => {
                7 => Any,
                2 => Any
            },
        },
        8 => {
             9 => {
                1 => Any
             },
             7 => {
                2 => Any
             },
             13 => Any,
        }
    };

.join('→').say
    for find-path-sum( %tree, 22 );

multi sub find-path-sum( Hash:D $tree, Int $n )
{
    multi sub find-path-sum( Hash:D $tree, Int $n, Array $path ) {
        find-path-sum( $tree{ $_ }, $n - $_, $path.clone.push($_) )
            for $tree.keys; }

    multi sub find-path-sum( Any, Int $n, Array $path ) {
        take $path if $n == 0; }

    gather find-path-sum( $tree, $n, [] );
}