Solve triangle solitaire puzzle: Difference between revisions

Content added Content deleted
m (add punctuation to the task's preamble.)
(Added Sidef)
Line 1,152: Line 1,152:
l=false; G.each{|g| l=solve(N,pegs,g); break if l}
l=false; G.each{|g| l=solve(N,pegs,g); break if l}
puts l ? l : "No solution found"</lang>
puts l ? l : "No solution found"</lang>
{{out}}
<pre style="height:64ex;overflow:scroll">
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
</pre>

=={{header|Sidef}}==
{{trans|Ruby}}
<lang ruby>const N = [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1]

const 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],
]

const format = (5.of {|i| "#{' '*(5-i)}#{'%d '*i}\n" }.join + "\n")

func solve(n, i, g) is cached {
i == N.end && return "Solved"
n[g[1]] == 0 && return nil

var s = given(n[g[0]]) {
when(0) {
n[g[2]] == 0 && return nil
"#{g[2]} to #{g[0]}\n"
}
default {
n[g[2]] == 1 && return nil
"#{g[0]} to #{g[2]}\n"
}
}

var a = n.clone
g.each {|n| a[n] = 1-a[n] }
var r = ''
G.each {|g| (r = solve(a, i+1, g)) && break }
r ? (s + (format % (a...)) + r) : r
}

format.printf(N...)

var r = ''
G.each {|g| (r = solve(N, 1, g)) && break }
say (r ? r : "No solution found")</lang>

{{out}}
{{out}}
<pre style="height:64ex;overflow:scroll">
<pre style="height:64ex;overflow:scroll">