32 lines
988 B
Text
32 lines
988 B
Text
with javascript_semantics
|
|
constant match_wp = false
|
|
|
|
function prc(integer n)
|
|
constant t = {0,2,10,18,36,54,86,118,119}
|
|
integer row = abs(binary_search(n,t,true))-1,
|
|
col = n-t[row]
|
|
if col>1+(row>1) then
|
|
col = 18-(t[row+1]-n)
|
|
if match_wp then
|
|
if col<=2 then return {row+2,col+14} end if
|
|
else -- matches above ascii:
|
|
if col<=2+(row>5) then return {row+2,col+15} end if
|
|
end if
|
|
end if
|
|
return {row,col}
|
|
end function
|
|
|
|
sequence pt = repeat(repeat(" ",19),10)
|
|
pt[1][2..$] = apply(true,sprintf,{{"%3d"},tagset(18)}) -- column headings
|
|
for i=1 to 9 do pt[i+1][1] = sprintf("%3d",i) end for -- row numbers
|
|
for i=1 to 118 do
|
|
integer {r,c} = prc(i)
|
|
pt[r+1][c+1] = sprintf("%3d",i)
|
|
end for
|
|
if not match_wp then -- (ascii only:)
|
|
pt[7][4] = " L*"
|
|
pt[8][4] = " A*"
|
|
pt[9][2..4] = {"Lanthanide:"}
|
|
pt[10][2..4] = {" Actinide:"}
|
|
end if
|
|
printf(1,"%s\n",{join(apply(true,join,{pt,{"|"}}),"\n")})
|