Solve triangle solitaire puzzle: Difference between revisions

Content added Content deleted
(+ D entry)
(Does replacing "return false unless" with "return if" work? Didn't for me. I'll steal the FORMAT though!!)
Line 366: Line 366:
=={{header|Ruby}}==
=={{header|Ruby}}==


<lang ruby># Solitaire Like Puzzle Solver
<lang ruby># 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]
PEGS = (N = [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1]).inject(:+)
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"

FORMAT = (1..5).map{|i| " "*(5-i) + "%d "*i + "\n"}.join + "\n"
def b2s n
FORMAT % n
end

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

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

puts l ? l : "No solution found"
</lang>
{{out}}
{{out}}
<pre style="height:64ex;overflow:scroll">
<pre style="height:64ex;overflow:scroll">