#!/usr/local/bin/gawk -f # # Check magic squares by "Magic square condition" # # by F. Poyo # function help() { # print "\033[2J" printf "\033[33mUsage...\033[m\n" print " " printf " \033[36mDefault usage..\033[m\n" print " " print " gawk -f magic.awk" print " " printf " \033[36mGet seed matrix from file.\033[m\n"; print " " print " gawk -f magic.awk magic.dat" print " ~~~~~~~~~<--¹File name would be" print " vary." exit; } # # # function check_magic(i,j,x,y,ok_or_not,row_err,col_err,diagonal_err,pan_diagonal_err,seq,NN) { # Check the calculation by "Magic square condition". NN=N*N; ok_or_not=1; for(i=0;i<=NN;i++) { seq[i] = 0; } min=10000000; max=-10000000; for(i=0;imax) max=M[i,j]; seq[M[i,j]]++; x[M[i,j]]=i; y[M[i,j]]=j; } } d=(max-min)/(NN-1); for(i=min;i<=max;i+=d) { if(seq[i] != 1) { ok_or_not=0; break; } } sum=N*((NN-1)*d/2+min); printf("N=%d SUM=%d\n",N,sum); if(ok_or_not==1) printf "Check 1:OK ... Elements are sequential natural numbers(%d ... %d:d=%d)\n",min,max,d else { print "Since the elements are not sequential natural numbers," print "it's not a magic square." print "Number of appeariing time which must be all 1s." for(i=0;iN) {check_magic();count++;N=0;j=1;next;} } (j==1) && /[0-9]+ +[0-9]+ +/{ line=$0; # print line; N=split("" line,a,/ /); # printf("N=%d\n",N); for(i=1;i<=N;i++) { M[j-1,i-1]=a[i]; # printf "%d ",M[j,i]; } # printf("\n"); j++; next; } /End/{exit} {} END{if(count==0) help();}