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__

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 ] ) { unlink $first; unlink @files; exit print "Different length\n"; } while (<IN1>) { # (my $i = 0; $i < @first; $i++){ my $in2 = <IN2>; unless ( $_ == $in2 ) { unlink $first; unlink @files; chomp; chomp $in2; exit print "Numbers $_ == $in2 failed\n"; } } close IN1 or die $!; close IN2 or die $!; $i++; } print "Same \n"; unlink $first; unlink @files;