5 use experimental 'multidimensional';
7 my @cubes = sort { $a->[0] <=> $b->[0] } map { [ /(\d+)/g ] } <>;
8 my %cubes = map { join(',', @$_) => 1 } @cubes;
10 my @q = ([ @{$cubes[0]}, 0, -1 ]);
14 next if $seen{join(',', @$face)}++;
16 for my $axis (0 .. 2) {
17 next if $axis == $face->[3];
19 my @neigh = @{$face}[0 .. 2];
20 $neigh[$axis] += $dir;
21 $neigh[$face->[3]] += $face->[4];
22 # say "upper? @neigh";
23 if ($cubes{join(',',@neigh)}) {
24 push @q, [ @neigh, $axis, -$dir ];
25 # say "upper cube at @{$q[-1]}";
29 $neigh[$face->[3]] -= $face->[4];
31 if ($cubes{join(',',@neigh)}) {
32 push @q, [ @neigh, $face->[3], $face->[4] ];
33 # say "side cube at @{$q[-1]}";
37 $neigh[$axis] -= $dir;
38 push @q, [ @neigh, $axis, $dir ];
39 # say "this cube at @{$q[-1]}";
44 say scalar keys %seen;