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

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__

Replies are listed 'Best First'.
Re^2: Spiraling integers
by lidden (Curate) on Aug 29, 2005 at 12:56 UTC
Well I used this program I did over a year ago to compare numbers from diffrent programs. I would have done it diffrently now so don't complan too much about the sub optimal stuff.
```#!/usr/bin/perl -w

use strict;
use constant true  => 1;
use constant false => 0;

use Perl6::Say;
use Perl6::Variables;

exit say 'You must give at least two file names as arguments.' unless
+@ARGV > 1;

my \$tmp_path = '/tmp/same_or.tmp';
my @files;
my \$i = 0;
my @num;

foreach my \$file (@ARGV) {
open IN, \$file or die "Damn \$file: \$!";
open OUT, '>', \$tmp_path . \$i or die \$!;
my \$num = 0;
while (<IN>) {
s/^\s+//;
my @text = split /\s+/, \$_;
\$num += scalar @text;
foreach (@text) {
say OUT \$_;
}
}
close IN  or die \$!;
close OUT or die \$!;

@num[ \$i ] = \$num;
push @files, \$tmp_path . \$i;
\$i++;
}

my \$first = shift @files;
say "\@num[0] = @num[0]";
\$i = 1;

foreach my \$file (@files) {
open IN1, \$first or die \$!;
open IN2, \$file  or die \$!;

say "\@num[\$i] = @num[\$i]";
unless ( @num[ 0 ] == @num[ \$i ] ) {
exit print "Different length\n";
}
while (<IN1>) {    # (my \$i = 0; \$i < @first; \$i++){
my \$in2 = <IN2>;
unless ( \$_ == \$in2 ) {
chomp;
chomp \$in2;
exit print "Numbers \$_ == \$in2 failed\n";
}
}

close IN1 or die \$!;
close IN2 or die \$!;
\$i++;
}

print "Same \n";