Solve triangle solitaire puzzle: Difference between revisions

(Updated D entry)
(→‎{{header|Ruby}}: Added zkl)
Line 995:
{{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|zkl}}==
{{trans|D}}
{{Trans|Ruby}}
<lang zkl>var N=T(0,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
var G=T( T(0,1, 3), T(0,2, 5), T(1,3, 6), T( 1, 4, 8), T( 2, 4, 7), T( 2, 5, 9),
T(3,4, 5), T(3,6,10), T(3,7,12), T( 4, 7,11), T( 4, 8,13), T( 5, 8,12),
T(5,9,14), T(6,7, 8), T(7,8, 9), T(10,11,12), T(11,12,13), T(12,13,14));
fcn b2s(n){
var fmt=[1..5].pump(String,fcn(i){ String(" "*(5 - i),"%d "*i,"\n") });
fmt.fmt(n.xplode())
}
fcn solve(n,i,g){ // --> False|String
if (i==N.len() - 1) return("\nSolved");
if (n[g[1]]==0) return(False);
 
reg s;
if (n[g[0]]==0){
if(n[g[2]]==0) return(False);
s="\n%d to %d\n".fmt(g[2],g[0]);
} else {
if(n[g[2]]==1) return(False);
s="\n%d to %d\n".fmt(g[0],g[2]);
}
a:=n.copy();
foreach gi in (g){ a[gi]=1 - a[gi]; }
reg l; // auto sets to Void
foreach gi in (G){ if(l=solve(a,i + 1,gi)) break; }
l and String(s,b2s(a),l)
}
 
b2s(N).print();
 
reg l;
foreach g in (G){ if(l=solve(N,1,g)) break; }
println(l and l or "No solution found.");</lang>
{{out}}
<pre style="height:32ex;overflow:scroll">
0
1 1
Anonymous user