#!/usr/bin/perl -w use strict; my $n= (@ARGV,5)[0]; my @s= (((0)x$n,-1)x$n,(-1)x$n,-1); my @d= (1,$n+1,-1,-$n-1); my($p,$d,$v)=(-1,0,0); while( ! $s[$p+=$d[$d]] ) { $s[$p]= ++$v; $d= ($d+1)%@d if $s[$p+$d[$d]]; } printf $_<0?$/:" %".length($v)."d", $_ for @s[0..$v+$n-1];