declare
proc {Sudoku P ?Grid}
Grid = {List.make 9}
{List.forAll Grid proc {$ Row} Row = {FD.list 9 1#9} end}
for I in 1..9 do
{FD.distinct {Nth Grid I}}
end
for J in 1..9 do
{FD.distinct {List.map Grid fun {$ Row}
{Nth Row J}
end
}
}
end
for BI in 0..2 do
for BJ in 0..2 do
Block = for I in 1..3 collect:Collect do
for J in 1..3 do
{Collect {Nth {Nth Grid (3*BI+I)} (3*BJ+J)}}
end
end
in
{FD.distinct Block}
end
end
{List.forAllInd P
proc {$ Y R}
Row = {Nth Grid Y}
in
{List.forAllInd R
proc {$ X I}
if {Not {IsFree I}} then
{Nth Row X} :: I
end
end
}
end
}
{FD.distribute ff {Flatten Grid}}
end
declare
Puzzle=[
[_ _ _ 6 _ _ _ _ 4]
[8 _ _ _ _ _ _ 7 _]
[_ _ 5 _ _ 9 _ _ 3]
[_ _ _ 8 _ _ 2 _ 1]
[_ 9 _ _ _ _ _ 6 _]
[4 _ 6 _ _ 3 _ _ _]
[1 _ _ 2 _ _ 5 _ _]
[_ 7 _ _ _ _ _ _ 8]
[3 _ _ _ _ 4 _ _ _]
]
{Browse {Search.base.one proc{$ Sol} {Sudoku Puzzle Sol} end}}
ZGVjbGFyZQpwcm9jIHtTdWRva3UgUCA/R3JpZH0KICAgR3JpZCA9IHtMaXN0Lm1ha2UgOX0KICAge0xpc3QuZm9yQWxsIEdyaWQgcHJvYyB7JCBSb3d9IFJvdyA9IHtGRC5saXN0IDkgMSM5fSBlbmR9CiAgIGZvciBJIGluIDEuLjkgZG8KICAgICAge0ZELmRpc3RpbmN0IHtOdGggR3JpZCBJfX0KICAgZW5kCiAgIGZvciBKIGluIDEuLjkgZG8KICAgICAge0ZELmRpc3RpbmN0IHtMaXN0Lm1hcCBHcmlkIGZ1biB7JCBSb3d9CgkJCQkgICAgIHtOdGggUm93IEp9CgkJCQkgIGVuZAoJCSAgIH0KICAgICAgfQogICBlbmQKICAgZm9yIEJJIGluIDAuLjIgZG8KICAgICAgZm9yIEJKIGluIDAuLjIgZG8KCSBCbG9jayA9IGZvciBJIGluIDEuLjMgY29sbGVjdDpDb2xsZWN0IGRvCgkJICAgIGZvciBKIGluIDEuLjMgZG8KCQkgICAgICAge0NvbGxlY3Qge050aCB7TnRoIEdyaWQgKDMqQkkrSSl9ICgzKkJKK0opfX0KCQkgICAgZW5kCgkJIGVuZAogICAgICBpbgoJIHtGRC5kaXN0aW5jdCBCbG9ja30KICAgICAgZW5kCiAgIGVuZAogICB7TGlzdC5mb3JBbGxJbmQgUAogICAgcHJvYyB7JCBZIFJ9CiAgICAgICBSb3cgPSB7TnRoIEdyaWQgWX0KICAgIGluCiAgICAgICB7TGlzdC5mb3JBbGxJbmQgUgoJcHJvYyB7JCBYIEl9CgkgICBpZiB7Tm90IHtJc0ZyZWUgSX19IHRoZW4KCSAgICAgIHtOdGggUm93IFh9IDo6IEkKCSAgIGVuZAoJZW5kCiAgICAgICB9CiAgICBlbmQKICAgfQogICB7RkQuZGlzdHJpYnV0ZSBmZiB7RmxhdHRlbiBHcmlkfX0KZW5kCmRlY2xhcmUKUHV6emxlPVsKCVtfIF8gXyA2IF8gXyBfIF8gNF0KCVs4IF8gXyBfIF8gXyBfIDcgX10KCVtfIF8gNSBfIF8gOSBfIF8gM10KCVtfIF8gXyA4IF8gXyAyIF8gMV0KCVtfIDkgXyBfIF8gXyBfIDYgX10KCVs0IF8gNiBfIF8gMyBfIF8gX10KCVsxIF8gXyAyIF8gXyA1IF8gX10KCVtfIDcgXyBfIF8gXyBfIF8gOF0KCVszIF8gXyBfIF8gNCBfIF8gX10KICAgICAgIF0Ke0Jyb3dzZSB7U2VhcmNoLmJhc2Uub25lIHByb2N7JCBTb2x9IHtTdWRva3UgUHV6emxlIFNvbH0gZW5kfX0=
Mozart Compiler 1.4.0 (20080704) playing Oz 3
%%% feeding file prog.oz
%********************* binding analysis error *******************
%**
%** variable FD not introduced
%**
%** in file "./prog.oz", line 4, column 41
%********************* binding analysis error *******************
%**
%** variable FD not introduced
%**
%** in file "./prog.oz", line 6, column 7
%********************* binding analysis error *******************
%**
%** variable FD not introduced
%**
%** in file "./prog.oz", line 9, column 7
%********************* binding analysis error *******************
%**
%** variable FD not introduced
%**
%** in file "./prog.oz", line 23, column 3
%********************* binding analysis error *******************
%**
%** variable FD not introduced
%**
%** in file "./prog.oz", line 39, column 4
%** ------------------ rejected (5 errors)