Jump to content

Peaceful chess queen armies: Difference between revisions

m
→‎{{header|Phix}}: syntax coloured, added online link
m (→‎{{header|Phix}}: syntax coloured, added online link)
Line 5,392:
{{trans|Go}}
{{trans|Python}}
You can run this online [http://phix.x10.mx/p2js/QueenArmies.htm here].
<lang Phix>-- demo\rosetta\Queen_Armies.exw
<!--<lang Phix>(phixonline)-->
string html = ""
<span style="color: #000080;font-style:italic;">--
constant as_html = true
-- demo\rosetta\Queen_Armies.exw
constant queens = {``,
-- =============================
`&#x265b;`,
--</span>
`<font color="green">&#x2655;</font>`,
<span style="color: #008080;">with</span> `<span style="color:red #008080;">?javascript_semantics</span>`}
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"1.0.2"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (puts(fn,x,false) for p2js.js)</span>
 
<span style="color: #004080;">string</span> <span style="color: #000000;">html</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span>
procedure showboard(integer n, sequence blackqueens, whitequeens)
<span style="color: #008080;">constant</span> <span style="color: #000000;">as_html</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
sequence board = repeat(repeat('-',n),n)
<span style="color: #008080;">constant</span> <span style="color: #000000;">queens</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">``</span><span style="color: #0000FF;">,</span>
for i=1 to length(blackqueens) do
<span style="color: #008000;">`&#x265b;`</span><span style="color: #0000FF;">,</span>
integer {qi,qj} = blackqueens[i]
<span style="color: #008000;">`&lt;font color="green"&gt;&#x2655;&lt;/font&gt;`</span><span style="color: #0000FF;">,</span>
board[qi,qj] = 'B'
<span style="color: #008000;">`&lt;span style="color:red"&gt;?&lt;/span&gt;`</span><span style="color: #0000FF;">}</span>
{qi,qj} = whitequeens[i]
board[qi,qj] = 'W'
<span style="color: #008080;">procedure</span> <span style="color: #000000;">showboard</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">sequence</span> <span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">)</span>
end for
<span style="color: #004080;">sequence</span> <span style="color: #000000;">board</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #008000;">'-'</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">),</span><span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
if as_html then
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
string out = sprintf("<br><b>## %d black and %d white queens on a %d-by-%d board</b><br>\n",
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">qi</span><span style="color: #0000FF;">,</span><span style="color: #000000;">qj</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
{length(blackqueens),length(whitequeens),n,n}),
<span style="color: #000000;">board</span><span style="color: #0000FF;">[</span><span style="color: #000000;">qi</span><span style="color: #0000FF;">,</span><span style="color: #000000;">qj</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'B'</span>
tbl = ""
<span style="color: #0000FF;">{</span><span style="color: #000000;">qi</span><span style="color: #0000FF;">,</span><span style="color: #000000;">qj</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
out &= "<table style=\"font-weight:bold\">\n "
<span style="color: #000000;">board</span><span style="color: #0000FF;">[</span><span style="color: #000000;">qi</span><span style="color: #0000FF;">,</span><span style="color: #000000;">qj</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'W'</span>
for x=1 to n do
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
for y=1 to n do
<span style="color: #008080;">if</span> <span style="color: #000000;">as_html</span> <span style="color: #008080;">then</span>
if y=1 then tbl &= " </tr>\n <tr valign=\"middle\" align=\"center\">\n" end if
<span style="color: #004080;">string</span> <span style="color: #000000;">out</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;br&gt;&lt;b&gt;## %d black and %d white queens on a %d-by-%d board&lt;/b&gt;&lt;br&gt;\n"</span><span style="color: #0000FF;">,</span>
integer xw = find({x,y},blackqueens)!=0,
<span style="color: #0000FF;">{</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">),</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">),</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">}),</span>
xb = find({x,y},whitequeens)!=0,
<span style="color: #000000;">tbl</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span>
dx = xw+xb*2+1
<span style="color: #000000;">out</span> <span style="color: #0000FF;">&=</span> <span style="color: #008000;">"&lt;table style=\"font-weight:bold\"&gt;\n "</span>
string ch = queens[dx],
<span style="color: #008080;">for</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
bg = iff(mod(x+y,2)?"":` bgcolor="silver"`)
<span style="color: #008080;">for</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
tbl &= sprintf(" <td style=\"width:14pt; height:14pt;\"%s>%s</td>\n",{bg,ch})
<span style="color: #008080;">if</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #000000;">tbl</span> <span style="color: #0000FF;">&=</span> <span style="color: #008000;">" &lt;/tr&gt;\n &lt;tr valign=\"middle\" align=\"center\"&gt;\n"</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end for
<span style="color: #004080;">integer</span> <span style="color: #000000;">xw</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">({</span><span style="color: #000000;">x</span><span style="color: #0000FF;">,</span><span style="color: #000000;">y</span><span style="color: #0000FF;">},</span><span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">)!=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span>
end for
<span style="color: #000000;">xb</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">({</span><span style="color: #000000;">x</span><span style="color: #0000FF;">,</span><span style="color: #000000;">y</span><span style="color: #0000FF;">},</span><span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">)!=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span>
out &= tbl[11..$]
<span style="color: #000000;">dx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xw</span><span style="color: #0000FF;">+</span><span style="color: #000000;">xb</span><span style="color: #0000FF;">*</span><span style="color: #000000;">2</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span>
out &= " </tr>\n</table>\n<br>\n"
<span style="color: #004080;">string</span> <span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">queens</span><span style="color: #0000FF;">[</span><span style="color: #000000;">dx</span><span style="color: #0000FF;">],</span>
html &= out
<span style="color: #000000;">bg</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">mod</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">y</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)?</span><span style="color: #008000;">""</span><span style="color: #0000FF;">:</span><span style="color: #008000;">` bgcolor="silver"`</span><span style="color: #0000FF;">)</span>
else
<span style="color: #000000;">tbl</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">" &lt;td style=\"width:14pt; height:14pt;\"%s&gt;%s&lt;/td&gt;\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">bg</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">})</span>
integer b = length(blackqueens),
<span style="color: #008080;">end</span> w<span style="color: length(whitequeens)#008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
printf(1,"%d black and %d white queens on a %d x %d board:\n", {b, w, n, n})
<span style="color: #000000;">out</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">tbl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">11</span><span style="color: #0000FF;">..$]</span>
puts(1,join(board,"\n")&"\n")
<span style="color: #000000;">out</span> <span style="color: #0000FF;">&=</span> <span style="color: #008000;">" &lt;/tr&gt;\n&lt;/table&gt;\n&lt;br&gt;\n"</span>
-- ?{n,blackqueens, whitequeens}
<span style="color: #000000;">html</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">out</span>
end if
<span style="color: #008080;">else</span>
end procedure
<span style="color: #004080;">integer</span> <span style="color: #000000;">b</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">),</span>
 
<span style="color: #000000;">w</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">)</span>
function isAttacking(sequence queen, pos)
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%d black and %d white queens on a %d x %d board:\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">w</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">})</span>
integer {qi,qj} = queen, {pi,pj} = pos
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #000000;">board</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)&</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
return qi=pi or qj=pj or abs(qi-pi)=abs(qj-pj)
<span style="color: #000080;font-style:italic;">-- ?{n,blackqueens, whitequeens}</span>
end function
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
function place(integer m, n, sequence blackqueens = {}, whitequeens = {})
if m == 0 then showboard(n,blackqueens,whitequeens) return true end if
<span style="color: #008080;">function</span> <span style="color: #000000;">isAttacking</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">queen</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">pos</span><span style="color: #0000FF;">)</span>
bool placingBlack := true
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">qi</span><span style="color: #0000FF;">,</span><span style="color: #000000;">qj</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">queen</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">pi</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pj</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">pos</span>
for i=1 to n do
<span style="color: #008080;">return</span> <span style="color: #000000;">qi</span><span style="color: #0000FF;">=</span><span style="color: #000000;">pi</span> <span style="color: #008080;">or</span> <span style="color: #000000;">qj</span><span style="color: #0000FF;">=</span><span style="color: #000000;">pj</span> <span style="color: #008080;">or</span> <span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #000000;">qi</span><span style="color: #0000FF;">-</span><span style="color: #000000;">pi</span><span style="color: #0000FF;">)=</span><span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #000000;">qj</span><span style="color: #0000FF;">-</span><span style="color: #000000;">pj</span><span style="color: #0000FF;">)</span>
for j=1 to n do
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
sequence pos := {i, j}
for q=1 to length(blackqueens) do
<span style="color: #008080;">function</span> <span style="color: #000000;">place</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">m</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">sequence</span> <span style="color: #000000;">blackqueens</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span> <span style="color: #000000;">whitequeens</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{})</span>
sequence queen := blackqueens[q]
<span style="color: #008080;">if</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #000000;">showboard</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">,</span><span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">return</span> <span style="color: #004600;">true</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if queen == pos or ((not placingBlack) and isAttacking(queen, pos)) then
<span style="color: #004080;">bool</span> <span style="color: #000000;">placingBlack</span> <span style="color: #0000FF;">:=</span> <span style="color: #004600;">true</span>
pos = {}
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
exit
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
end if
<span style="color: #004080;">sequence</span> <span style="color: #000000;">pos</span> <span style="color: #0000FF;">:=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">}</span>
end for
<span style="color: #008080;">for</span> <span style="color: #000000;">q</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
if pos!={} then
<span style="color: #004080;">sequence</span> <span style="color: #000000;">queen</span> <span style="color: #0000FF;">:=</span> <span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">[</span><span style="color: #000000;">q</span><span style="color: #0000FF;">]</span>
for q=1 to length(whitequeens) do
<span style="color: #008080;">if</span> <span style="color: #000000;">queen</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">pos</span> <span style="color: #008080;">or</span> <span style="color: #0000FF;">((</span><span style="color: #008080;">not</span> <span style="color: #000000;">placingBlack</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">and</span> <span style="color: #000000;">isAttacking</span><span style="color: #0000FF;">(</span><span style="color: #000000;">queen</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">pos</span><span style="color: #0000FF;">))</span> <span style="color: #008080;">then</span>
sequence queen := whitequeens[q]
if queen<span style=="color: #000000;">pos</span> or<span (placingBlackstyle="color: and#0000FF;">=</span> isAttacking(queen,<span pos))style="color: then#0000FF;">{}</span>
<span pos style="color: {}#008080;">exit</span>
<span style="color: #008080;">end</span> <span style="color: exit#008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end if
<span style="color: #008080;">if</span> <span style="color: #000000;">pos</span><span style="color: #0000FF;">!={}</span> <span style="color: #008080;">then</span>
end for
<span style="color: #008080;">for</span> <span style="color: #000000;">q</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
if pos!={} then
<span style="color: #004080;">sequence</span> <span style="color: #000000;">queen</span> <span style="color: #0000FF;">:=</span> <span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">[</span><span style="color: #000000;">q</span><span style="color: #0000FF;">]</span>
if placingBlack then
<span style="color: #008080;">if</span> <span style="color: #000000;">queen</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">pos</span> <span style="color: #008080;">or</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">placingBlack</span> <span style="color: #008080;">and</span> <span style="color: #000000;">isAttacking</span><span style="color: #0000FF;">(</span><span style="color: #000000;">queen</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">pos</span><span style="color: #0000FF;">))</span> <span style="color: #008080;">then</span>
blackqueens = append(blackqueens, pos)
<span style="color: #000000;">pos</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
placingBlack = false
else <span style="color: #008080;">exit</span>
<span style="color: #008080;">end</span> whitequeens<span style="color: append(whitequeens, pos)#008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
if place(m-1, n, blackqueens, whitequeens) then return true end if
<span style="color: #008080;">if</span> <span style="color: #000000;">pos</span><span style="color: #0000FF;">!={}</span> <span style="color: #008080;">then</span>
blackqueens = blackqueens[1..$-1]
<span style="color: #008080;">if</span> <span style="color: #000000;">placingBlack</span> <span style="color: #008080;">then</span>
whitequeens = whitequeens[1..$-1]
<span style="color: #000000;">blackqueens</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">pos</span><span style="color: #0000FF;">)</span>
placingBlack = true
<span style="color: #000000;">placingBlack</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
end if
end if <span style="color: #008080;">else</span>
<span style="color: #000000;">whitequeens</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">pos</span><span style="color: #0000FF;">)</span>
end if
<span style="color: #008080;">if</span> <span style="color: #000000;">place</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">true</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end for
<span style="color: #000000;">blackqueens</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">blackqueens</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..$-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
end for
<span style="color: #000000;">whitequeens</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">whitequeens</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..$-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
return false
<span style="color: #000000;">placingBlack</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
end function
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
for n=2 to 7 do
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
for m=1 to n-(n<5) do
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
if not place(m,n) then
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
string no = sprintf("Cannot place %d+ queen armies on a %d-by-%d board",{m,n,n})
<span style="color: #008080;">return</span> <span style="color: #004600;">false</span>
if as_html then
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
html &= sprintf("<b># %s</b><br><br>\n\n",{no})
else
<span style="color: #008080;">for</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span> <span style="color: #008080;">to</span> <span style="color: #000000;">7</span> <span style="color: #008080;">do</span>
printf(1,"%s.\n", {no})
<span style="color: #008080;">for</span> <span style="color: #000000;">m</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">-(</span><span style="color: #000000;">n</span><span style="color: #0000FF;"><</span><span style="color: #000000;">5</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
end if
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">place</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
end if
<span style="color: #004080;">string</span> <span style="color: #000000;">no</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"Cannot place %d+ queen armies on a %d-by-%d board"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">m</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">})</span>
end for
<span style="color: #008080;">if</span> <span style="color: #000000;">as_html</span> <span style="color: #008080;">then</span>
end for
<span style="color: #000000;">html</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;b&gt;# %s&lt;/b&gt;&lt;br&gt;&lt;br&gt;\n\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">no</span><span style="color: #0000FF;">})</span>
 
<span style="color: #008080;">else</span>
constant html_header = """
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s.\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">no</span><span style="color: #0000FF;">})</span>
<!DOCTYPE html>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<html lang="en">
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<head>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<meta charset="utf-8" />
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Rosettacode Rank Languages by popularity</title>
<span style="color: #008080;">constant</span> <span style="color: #000000;">html_header</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
</head>
&lt;!DOCTYPE html&gt;
<body>
&lt;html lang="en"&gt;
<h2>queen armies</h2>
&lt;head&gt;
""", -- or <div style="overflow:scroll; height:250px;">
&lt;meta charset="utf-8" /&gt;
html_footer = """
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
</body>
&lt;title&gt;Queen Armies&lt;/title&gt;
</html>
&lt;/head&gt;
""" -- or </div>
&lt;body&gt;
 
&lt;h2&gt;queen armies&lt;/h2&gt;
if as_html then
"""</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- or &lt;div style="overflow:scroll; height:250px;"&gt;</span>
integer fn = open("queen_armies.html","w")
<span style="color: #000000;">html_footer</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
puts(fn,html_header)
&lt;/body&gt;
puts(fn,html)
&lt;/html&gt;
puts(fn,html_footer)
"""</span> <span style="color: #000080;font-style:italic;">-- or &lt;/div&gt;</span>
close(fn)
printf(1,"See queen_armies.html\n")
<span style="color: #008080;">if</span> <span style="color: #000000;">as_html</span> <span style="color: #008080;">then</span>
end if
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span>
 
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">html</span><span style="color: #0000FF;">,</span><span style="color: #004600;">false</span><span style="color: #0000FF;">)</span>
?"done"
<span style="color: #008080;">else</span>
{} = wait_key()</lang>
<span style="color: #004080;">integer</span> <span style="color: #000000;">fn</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">open</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"queen_armies.html"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"w"</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">html_header</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">html</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">html_footer</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">close</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"See queen_armies.html\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #0000FF;">?</span><span style="color: #008000;">"done"</span>
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
<!--</lang>-->
{{out}}
with as_html = false
7,805

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.