Nimber arithmetic: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: factored out print_table(), as per Julia)
Line 498: Line 498:
end function
end function
integer a, b
procedure print_table(integer n, op)
-- print a table of nim-sums or nim-products
string outstr = " + | "
printf(1," %c | "&join(repeat("%2d",n+1))&"\n",op&tagset(n,0))
for a = 0 to 15 do
printf(1,"--- -%s\n",repeat('-',(n+1)*3))
outstr &= sprintf("%2d ",a)
end for
for j=0 to n do
printf(1,"%2d |",j)
constant hdrfmt = "%s\n--- -------------------------------------------------\n"
for i=0 to n do
printf(1, hdrfmt, outstr)
printf(1,"%3d",iff(op='+' ? nimsum(i, j) : nimprod(i, j)))
for b = 0 to 15 do
outstr = sprintf("%2d | ", b)
end for
for a = 0 to 15 do
printf(1,"\n")
outstr &= sprintf("%2d ", nimsum(a,b))
end for
end for
printf(1,"%s\n", outstr)
printf(1,"\n")
end for
end procedure

printf(1,"\n")
print_table(15, '+')
outstr = " * | "
print_table(15, '*')
for a = 0 to 15 do
constant a = 21508, b = 42689
outstr &= sprintf("%2d ", a)
end for
printf(1, hdrfmt, outstr)
for b = 0 to 15 do
outstr = sprintf("%2d | ", b)
for a = 0 to 15 do
outstr &= sprintf("%2d ", nimprod(a,b))
end for
printf(1,"%s\n", outstr)
end for
printf(1,"\n")
a = 21508
b = 42689
printf(1,"%5d + %5d = %10d\n",{a,b,nimsum(a,b)})
printf(1,"%5d + %5d = %10d\n",{a,b,nimsum(a,b)})
printf(1,"%5d * %5d = %10d\n",{a,b,nimprod(a,b)})</lang>
printf(1,"%5d * %5d = %10d\n",{a,b,nimprod(a,b)})</lang>