http://www.perlmonks.org?node_id=487391


in reply to Spiraling integers

I am sure there is a mathematical equation that would simplify this

Well, here's it. I hope it works. Has someone written a test program that compares the outputs of different solutions in this thread with each other?

#!perl use warnings; use strict; my($n, $wd, $fmt, $x, $y, $r); $n = int($ARGV[-1] || 5); $wd = length($n**2); $fmt = "%${wd}d "; for $x (0 .. $n - 1) { for $y (0 .. $n - 1) { $r = $x <= $y ? $x + $y <= $n - 1 ? -4*$x**2 + 4*$n*$x - $x + $y + 1 : -4*$y**2 + 4*$n*$y - 5*$y + $x + 2*$n +- 1 : $x + $y <= $n - 1 ? -4*$y**2 + 4*$n*$y - 7*$y - $x + 4*$n +- 3 : -4*$x**2 + 4*$n*$x - 3*$x - $y + 2*$n +- 1; printf $fmt, $r; } print "\n"; } __END__