$paths->[0][0][0] = [
[ 3, 0, 0 ],
];
$paths->[0][1][0] = [
[ 0, 2, 0 ],
];
...
####
$paths->{0,0,0} = [
join($;, 3,0,0),
];
$paths->{0,1,0} = [
join($;, 0,2,0),
];
...
##
##
sub to_key {
my ($x, $y, $s) = @_;
return pack 'L', ($x-MIN_X) * (MAX_Y-MIN_Y) * (MAX_S-MIN_S)
+ ($y-MIN_Y) * (MAX_S-MIN_S)
+ ($s-MIN_S)
}
sub fr_key {
my $key = unpack 'L', $_[0];
return (
int( $key / (MAX_Y-MIN_Y) / (MAX_S-MIN_S) ) + MIN_X,
int( $key / (MAX_S-MIN_S) ) % (MAX_Y-MIN_Y) + MIN_Y,
int( $key ) % (MAX_S-MIN_S) + MIN_S,
);
}
$paths->{to_key(0,0,0)} = join '',
to_key(3,0,0),
);
$paths->{to_key(0,1,0)} = join '',
to_key(0,2,0),
);
...