RosettaCodeData/Task/Periodic-table/Phix/periodic-table-1.phix
2026-02-01 16:33:20 -08:00

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")})