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> |
||