Peaceful chess queen armies: Difference between revisions
Content added Content deleted
m (→{{header|ATS}}) |
m (→{{header|Phix}}: syntax coloured, added online link) |
||
Line 5,392: | Line 5,392: | ||
{{trans|Go}} |
{{trans|Go}} |
||
{{trans|Python}} |
{{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 = {``, |
|||
-- ============================= |
|||
`♛`, |
|||
--</span> |
|||
`<font color="green">♕</font>`, |
|||
<span style="color: #008080;">with</span> <span style="color: #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;">`♛`</span><span style="color: #0000FF;">,</span> |
|||
integer {qi,qj} = blackqueens[i] |
|||
<span style="color: #008000;">`<font color="green">♕</font>`</span><span style="color: #0000FF;">,</span> |
|||
board[qi,qj] = 'B' |
|||
<span style="color: #008000;">`<span style="color:red">?</span>`</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;">"<br><b>## %d black and %d white queens on a %d-by-%d board</b><br>\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;">"<table style=\"font-weight:bold\">\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;">" </tr>\n <tr valign=\"middle\" align=\"center\">\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;">" <td style=\"width:14pt; height:14pt;\"%s>%s</td>\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> <span style="color: #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;">" </tr>\n</table>\n<br>\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] |
|||
<span style="color: #000000;">pos</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> |
|||
<span style="color: #008080;">exit</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #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 |
|||
<span style="color: #008080;">exit</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #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 |
|||
<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;">"<b># %s</b><br><br>\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> |
|||
<!DOCTYPE html> |
|||
<body> |
|||
<html lang="en"> |
|||
<h2>queen armies</h2> |
|||
<head> |
|||
""", -- or <div style="overflow:scroll; height:250px;"> |
|||
<meta charset="utf-8" /> |
|||
html_footer = """ |
|||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
|||
</body> |
|||
<title>Queen Armies</title> |
|||
</html> |
|||
</head> |
|||
""" -- or </div> |
|||
<body> |
|||
<h2>queen armies</h2> |
|||
if as_html then |
|||
"""</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- or <div style="overflow:scroll; height:250px;"></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) |
|||
</body> |
|||
puts(fn,html) |
|||
</html> |
|||
puts(fn,html_footer) |
|||
"""</span> <span style="color: #000080;font-style:italic;">-- or </div></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}} |
{{out}} |
||
with as_html = false |
with as_html = false |