Solve the no connection puzzle: Difference between revisions
Content added Content deleted
(Added Wren) |
|||
Line 2,532: | Line 2,532: | ||
\|/ \|/ |
\|/ \|/ |
||
5 6</pre> |
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}}== |
=={{header|Perl}}== |