Solve triangle solitaire puzzle: Difference between revisions

m
improved output, adapted to the English game
(Added Kotlin)
m (improved output, adapted to the English game)
Line 888:
=={{header|Phix}}==
Twee brute-force string-based solution. Backtracks a mere 366 times, whereas starting with the 5th peg missing backtracks 19388 times (all in 0s, obvs).
<lang Phix>constant moves = {-11,-9,2,11,9,-2}
-- demo\rosetta\IQpuzzle.exw
--
constant moves = {-11,-9,2,11,9,-2}
function solve(string board, integer left)
if left=1 then return "" end if
Line 907 ⟶ 910:
return "oops"
end function
 
sequence start = """
----0----
Line 915 ⟶ 918:
1-1-1-1-1
"""
puts(1,substitute(join_by(split(start&solve(start,14),'\n'),5,7),"-"," "))</lang>
{{out}}
<pre>
<pre style="font-size: 8px">
0 1 1 0 0 0 0
0
1 1 0 1 0 1 0 0 1 0 1 1 1 1
1 1
1 1 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1 0
1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 0 0 1 0
1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
1 1 1 1 1
 
1
0 0 0 0 0 0 0
0 1
1 1 0 1 0 0 0 0 0 0 0 0 0 0
0 1 1
0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
1 1 1 1
0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1
1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 1 0 0
1
</pre>
0 1
Adapted to the English game:
1 0 0
<lang Phix>constant moves = {-2,15,2,-15}
1 1 1 1
function solve(string board, integer left)
1 1 1 1 1
0if left=1 then
-- return "" -- (leaves it on the edge)
0 0
if board[3*15+8]='.' then return "" end if
1 0 1
return "oops"
1 1 1 1
1 1 1 1 1end if
for i=1 to length(board) do
0
if board[i]='.' then
1 0
for j=1 to length(moves) do
0 0 1
integer mj = moves[j], over = i+mj, tgt = i+2*mj
0 1 1 1
if tgt>=1 and tgt<=length(board)
1 1 1 1 1
and board[tgt]='o' and board[over]='.' then
0
{board[i],board[over],board[tgt]} = "oo."
1 1
string res = solve(board,left-1)
0 0 0
if length(res)!=4 then return board&res end if
0 1 1 0
{board[i],board[over],board[tgt]} = "..o"
1 1 1 1 1
end if
0
end for
1 1
0 1 0 end if
end for
0 0 1 0
return "oops"
1 0 1 1 1
end function
0
1 1
sequence start = """
0 1 1
-----.-.-.----
0 0 0 0
-----.-.-.----
1 0 0 1 1
-.-.-.-.-.-.-.
0
-.-.-.-o-.-.-.
0 1
-.-.-.-.-.-.-.
0 0 1
-----.-.-.----
0 0 1 0
-----.-.-.----
1 0 0 1 1
"""
0
puts(1,substitute(join_by(split(start&solve(start,32),'\n'),7,8),"-"," "))</lang>
0 0
{{out}}
0 0 0
<pre>
0 0 1 1
. . . . . . . . . o . . . o o . o o . o o . o .
1 0 0 1 1
. . . . o . . o . o o . o o . o o . o o . o o o
0
. . . . . . . . . . o . . . . o o . . . . . o . . . . . . o . . . . . . . o o . . . o o . o . . . o o . o o . .
0 0
. . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
0 0 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
0 0 1 0
. . . . . . . . . . . . . . . . . . . . . . . .
1 0 0 1 0
. . . . . . . . . . . . . . . . . . . . . . . .
0
 
0 0
. o . . o . o o . o o . o o . o o . o o . o o .
0 0 0
o o o . o o o o o o o o . o o . o o . o o . o .
0 0 0 0
o o . o . o o o o o o . o o o o . o . o o o o . o . o o o o o o . o o o o o o . o o o o o o . o o o o o o o o o
1 0 1 1 0
. . . . . . . . . o . . . . . . o . . . . o o . . . . . o o o . . . . o o . o o . . o o . o . o o o o . o o o o
0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
0 0
. . . . . . . . . . . . . . . . . . . . . . . .
0 0 0
. . . . . . . . . . . . . . . . . . . . . . . .
0 0 0 0
 
1 1 0 0 0
o o o o o o o o o o o o o o o o o o o o o o o o
0
. o o . o o o o o o o o o o o o o o o o o o o o
0 0
o o o o . o o o o . o . o o o o o o . o o o o o o . o o o o o o . o o o o o o . o o o o o o . o o o o o o . o o
0 0 0
o o . o o o o o o o o o o o o o . o o o o o o . o o o o o o . o o o o o o . o . o o o o . o . o o o o . o . o o
0 0 0 0
. . . . . . . . . o . . . . . . o . . . . o o . . . . . o . o o . . . o . o o o . . o . o o . o o o . . o . o o
0 0 1 0 0
. . . . . . . . . . . . . . . . . o . . o o . o
. . . . . . . . . . . . . . . . . . . . . o . .
 
o o o o o o o o o o o o o o o o o o o o o o o o
o o o o o o o o o o o o o o o o o o o o o o o o
o o o o . o o o o o o . o o o o o o . o o o o o o . o o o o o o . o o o o o o o o o o o o o o o o o o o o o o o
o o o o . o o o o o o . o o o o o o . o o o o o o . o o o o o o . o o o o o o o o o o o o o o o o o o o . o o o
o . o o . o o o . o o . o o o . . o . o o o o o . . o o o o o o o . o o o o o . . o o o o . o o o o o o o o o o
. . o . . o o . o o . o o . o o . o o . o o o o
o . . . o o o o o o o o o o o o o o o o o o o o
</pre>
 
7,806

edits