Solve triangle solitaire puzzle: Difference between revisions

Content added Content deleted
(→‎{{header|Ruby}}: change output format, each -> for (scope))
Line 210:
=={{header|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]
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
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
 
def solve n,i,g
return "Solved" if i == 14
return false unlessif n[g[1]]==10
if n[g[0]] == 0
return false unlessif n[g[2]]==10
s = "#{g[2]} to #{g[0]}\n"
else
return false unlessif n[g[2]]==01
s = "#{g[0]} to #{g[2]}\n"
end
a = n.clone; g.each{|n| a[n] = 1 - a[n]}
l=false; Gg.each{|gn| la[n] =solve(a,i+ 1,g); break- if la[n]}
for g in G
return l ? s + b2s(a) + l : l
break if l = solve(a,i+1,g)
end
return l ? s + b2s(a) + l : l
end
 
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}}
<pre style="height:64ex;overflow:scroll">
<pre>
0
1 1
1 1 1
1 1 1 1
1 1 1 1 1
 
3 to 0
1
0 1
0 1 1
1 1 1 1
1 1 1 1 1
 
8 to 1
1
1 1
0 0 1
1 1 0 1
1 1 1 1 1
 
10 to 3
1
1 1
1 0 1
0 1 0 1
0 1 1 1 1
 
1 to 6
1
0 1
0 0 1
1 1 0 1
0 1 1 1 1
 
11 to 4
1
0 1
0 1 1
1 0 0 1
0 0 1 1 1
 
2 to 7
1
0 0
0 0 1
1 1 0 1
0 0 1 1 1
 
9 to 2
1
0 1
0 0 0
1 1 0 0
0 0 1 1 1
 
0 to 5
0
0 0
0 0 1
1 1 0 0
0 0 1 1 1
 
6 to 8
0
0 0
0 0 1
0 0 1 0
0 0 1 1 1
 
13 to 11
0
0 0
0 0 1
0 0 1 0
0 1 0 0 1
 
5 to 12
0
0 0
0 0 0
0 0 0 0
0 1 1 0 1
 
11 to 13
0
0 0
0 0 0
0 0 0 0
0 0 0 1 1
 
14 to 12
0
0 0
0 0 0
0 0 0 0
0 0 1 0 0
 
Solved