Для помощи любому, кто ищет в Google и не может найти ответ, вот простой алгоритм perl, который я придумал для решения проблемы.
sub getPos{
my ($x,$y,$size)=@_;
my $d = $x+$y;
my $m = $d-$size;
my $p = (($d%2)?$x:$y);
my $dist = ($d*($d+1))/2;
my $index = $dist + $p;
if($d >= $size){
$index -= ($m+1)**2;
}
return $index;
}
И вы используете это так:
for(my $x = 0; $x < $size; $x++){
for(my $y = 0; $y < $size; $y++){
$OneArray[getPos($x, $y, $size)] = $TwoArray[$x][$y];
}
}
Где $OneArray
- это одномерный массив, который вы конвертируете $TwoArray
в.