sub position { my($i) = @_; my $e = int sqrt (--$i); my $r = $i - $e*$e; if($e & 1) { # $e is odd if($r <= $e) { $x = ($e+1)/2; $y = ($e-1)/2 - $r; } else { $x = ($e+1)/2 - ($r-$e); $y = -($e+1)/2; } } else { # $e is even if($r <= $e) { $x = -$e/2; $y = -$e/2 + $r; } else { $x = -$e/2 + ($r-$e); $y = $e/2; } } return ($x, $y); }