Solve the no connection puzzle: Difference between revisions

(Added Wren)
Line 2,532:
\|/ \|/
5 6</pre>
 
=={{header|Nim}}==
{{trans|C++}}
I choose to use one-based indexing for the array of pegs. It seems more logical here and Nim allows to choose any starting index for static arrays.
 
<lang Nim>import strformat
 
const Connections = [(1, 3), (1, 4), (1, 5), # A to C, D, E
(2, 4), (2, 5), (2, 6), # B to D, E, F
(7, 3), (7, 4), (7, 5), # G to C, D, E
(8, 4), (8, 5), (8, 6), # H to D, E, F
(3, 4), (4, 5), (5, 6)] # C-D, D-E, E-F
 
type
Peg = 1..8
Pegs = array[1..8, Peg]
 
 
func valid(pegs: Pegs): bool =
for (src, dst) in Connections:
if abs(pegs[src] - pegs[dst]) == 1:
return false
result = true
 
 
proc print(pegs: Pegs; num: Positive) =
echo &"----- {num} -----"
echo &" {pegs[1]} {pegs[2]}"
echo &"{pegs[3]} {pegs[4]} {pegs[5]} {pegs[6]}"
echo &" {pegs[7]} {pegs[8]}"
echo()
 
proc findSolution(pegs: var Pegs; left, right: Natural; solCount = 0): Natural =
var solCount = solCount
if left == right:
if pegs.valid():
inc solCount
pegs.print(solCount)
else:
for i in left..right:
swap pegs[left], pegs[i]
solCount = pegs.findSolution(left + 1, right, solCount)
swap pegs[left], pegs[i]
result = solCount
 
when isMainModule:
 
var pegs = [Peg 1, 2, 3, 4, 5, 6, 7, 8]
discard pegs.findSolution(1, 8)</lang>
 
{{out}}
<pre>----- 1 -----
3 4
7 1 8 2
5 6
 
----- 2 -----
3 5
7 1 8 2
4 6
 
----- 3 -----
3 6
7 1 8 2
4 5
 
----- 4 -----
3 6
7 1 8 2
5 4
 
----- 5 -----
4 3
2 8 1 7
6 5
 
----- 6 -----
4 5
2 8 1 7
6 3
 
----- 7 -----
4 5
7 1 8 2
3 6
 
----- 8 -----
4 6
7 1 8 2
3 5
 
----- 9 -----
5 3
2 8 1 7
6 4
 
----- 10 -----
5 4
2 8 1 7
6 3
 
----- 11 -----
5 4
7 1 8 2
3 6
 
----- 12 -----
5 6
7 1 8 2
3 4
 
----- 13 -----
6 3
2 8 1 7
5 4
 
----- 14 -----
6 3
2 8 1 7
4 5
 
----- 15 -----
6 4
2 8 1 7
5 3
 
----- 16 -----
6 5
2 8 1 7
4 3</pre>
 
=={{header|Perl}}==
Anonymous user