Solve triangle solitaire puzzle: Difference between revisions

Content added Content deleted
(→‎{{header|Ruby}}: change output format, each -> for (scope))
Line 210: Line 210:
=={{header|Ruby}}==
=={{header|Ruby}}==


<lang ruby>
<lang ruby># Solitaire Like Puzzle Solver
# Solitaire Like Puzzle Solver
//
// Nigel Galloway: October 18th., 2014
N = [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
N = [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
G = [[0,1,3],[0,2,5],[1,3,6],[1,4,8],[2,4,7],[2,5,9],[3,4,5],[3,6,10],[3,7,12],[4,7,11],[4,8,13],[5,8,12],[5,9,14],[6,7,8],[7,8,9],[10,11,12],[11,12,13],[12,13,14]]
G = [[0,1,3],[0,2,5],[1,3,6],[1,4,8],[2,4,7],[2,5,9],[3,4,5],[3,6,10],[3,7,12],[4,7,11],[4,8,13],[5,8,12],[5,9,14],[6,7,8],[7,8,9],[10,11,12],[11,12,13],[12,13,14]]


FORMAT = (1..5).map{|i| " "*(5-i) + "%d "*i + "\n"}.join + "\n"
def b2s n
def b2s n
FORMAT % n
" #{n[0]}\n #{n[1]} #{n[2]}\n #{n[3]} #{n[4]} #{n[5]}\n #{n[6]} #{n[7]} #{n[8]} #{n[9]}\n#{n[10]} #{n[11]} #{n[12]} #{n[13]} #{n[14]}\n\n"
end
end

def solve n,i,g
def solve n,i,g
return "Solved" if i == 14
return "Solved" if i == 14
return false unless n[g[1]]==1
return if n[g[1]]==0
if n[g[0]] == 0
if n[g[0]] == 0
return false unless n[g[2]]==1
return if n[g[2]]==0
s = "#{g[2]} to #{g[0]}\n"
s = "#{g[2]} to #{g[0]}\n"
else
else
return false unless n[g[2]]==0
return if n[g[2]]==1
s = "#{g[0]} to #{g[2]}\n"
s = "#{g[0]} to #{g[2]}\n"
end
end
a = n.clone; g.each{|n| a[n] = 1 - a[n]}
a = n.clone
l=false; G.each{|g| l=solve(a,i+1,g); break if l}
g.each{|n| a[n] = 1 - a[n]}
for g in G
return l ? s + b2s(a) + l : l
break if l = solve(a,i+1,g)
end
l ? s + b2s(a) + l : l
end
end

puts b2s N
puts b2s(N)
l=false; G.each{|g| l=solve(N,1,g); break if l}
for g in G
puts l ? l : "No solution found"
break if l = solve(N,1,g)
</lang>
end
puts l ? l : "No solution found"</lang>

{{out}}
{{out}}
<pre style="height:64ex;overflow:scroll">
<pre>
0
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


3 to 0
3 to 0
1
1
0 1
0 1
0 1 1
0 1 1
1 1 1 1
1 1 1 1
1 1 1 1 1
1 1 1 1 1


8 to 1
8 to 1
1
1
1 1
1 1
0 0 1
0 0 1
1 1 0 1
1 1 0 1
1 1 1 1 1
1 1 1 1 1


10 to 3
10 to 3
1
1
1 1
1 1
1 0 1
1 0 1
0 1 0 1
0 1 0 1
0 1 1 1 1
0 1 1 1 1


1 to 6
1 to 6
1
1
0 1
0 1
0 0 1
0 0 1
1 1 0 1
1 1 0 1
0 1 1 1 1
0 1 1 1 1


11 to 4
11 to 4
1
1
0 1
0 1
0 1 1
0 1 1
1 0 0 1
1 0 0 1
0 0 1 1 1
0 0 1 1 1


2 to 7
2 to 7
1
1
0 0
0 0
0 0 1
0 0 1
1 1 0 1
1 1 0 1
0 0 1 1 1
0 0 1 1 1


9 to 2
9 to 2
1
1
0 1
0 1
0 0 0
0 0 0
1 1 0 0
1 1 0 0
0 0 1 1 1
0 0 1 1 1


0 to 5
0 to 5
0
0
0 0
0 0
0 0 1
0 0 1
1 1 0 0
1 1 0 0
0 0 1 1 1
0 0 1 1 1


6 to 8
6 to 8
0
0
0 0
0 0
0 0 1
0 0 1
0 0 1 0
0 0 1 0
0 0 1 1 1
0 0 1 1 1


13 to 11
13 to 11
0
0
0 0
0 0
0 0 1
0 0 1
0 0 1 0
0 0 1 0
0 1 0 0 1
0 1 0 0 1


5 to 12
5 to 12
0
0
0 0
0 0
0 0 0
0 0 0
0 0 0 0
0 0 0 0
0 1 1 0 1
0 1 1 0 1


11 to 13
11 to 13
0
0
0 0
0 0
0 0 0
0 0 0
0 0 0 0
0 0 0 0
0 0 0 1 1
0 0 0 1 1


14 to 12
14 to 12
0
0
0 0
0 0
0 0 0
0 0 0
0 0 0 0
0 0 0 0
0 0 1 0 0
0 0 1 0 0


Solved
Solved