Solve the no connection puzzle: Difference between revisions

Content added Content deleted
Line 1,710: Line 1,710:
\|/ \|/
\|/ \|/
5 6
5 6
</pre>

=={{header|Picat}}==
<lang Picat>import cp.

no_connection_puzzle(X) =>
N = 8,
X = new_list(N),
X :: 1..N,
Graph =
{{1,2}, {1,3}, {1,4},
{2,1}, {2,3}, {2,5}, {2,6},
{3,2}, {3,4}, {3,6}, {3,7},
{4,1}, {4,3}, {4,6}, {4,7},
{5,2}, {5,3}, {5,6}, {5,8},
{6,2}, {6,3}, {6,4}, {6,5}, {6,7}, {6,8},
{7,3}, {7,4}, {7,6}, {7,8},
{8,5}, {8,6}, {8,7}},

all_distinct(X),
foreach(I in 1..Graph.length)
abs(X[Graph[I,1]]-X[Graph[I,2]]) #> 1
end,

% symmetry breaking
X[1] #< X[N],
solve(X),
println(X),
nl,
[A,B,C,D,E,F,G,H] = X,
Solution = to_fstring(
" %d %d \n"++
" /|\\ /|\\ \n"++
" / | X | \\ \n"++
" / |/ \\| \\ \n"++
"%d - %d - %d - %d \n"++
" \\ |\\ /| / \n"++
" \\ | X | / \n"++
" \\|/ \\|/ \n"++
" %d %d \n",
A,B,C,D,E,F,G,H),
println(Solution).
</lang>
Test:
<pre>
Picat> no_connection_puzzle(_X)
[2,5,8,6,3,1,4,7]

2 5
/|\ /|\
/ | X | \
/ |/ \| \
8 - 6 - 3 - 1
\ |\ /| /
\ | X | /
\|/ \|/
4 7


</pre>
</pre>