program ideone;
{$MODE OBJFPC}{$LONGSTRINGS ON}
type
TTab = array [0 .. 8, 0 .. 8] of Integer;
function Test(X, Y, R: Integer; Tab: TTab): Integer;
var
K, A, B, I, J: Integer;
begin
for K in [0 .. 8] do
if (Tab[X, K] = R) or (Tab[K, Y] = R) then
Exit(0);
A := X - X mod 3;
B := Y - Y mod 3;
for I in [A .. A + 3] do
for J in [B .. B + 3] do
if Tab[I, J] = R then
Exit(0);
Result := 1;
end;
procedure Pole(Tab: TTab);
var
X, Y, I, J, R: Integer;
begin
for X in [0 .. 8] do
begin
for Y in [0 .. 8] do
if Tab[X, Y] = 0 then
Break;
if Tab[X, Y] = 0 then
Break;
end;
if Tab[X, Y] > 0 then
begin
for I in [0 .. 8] do
begin
for J in [0 .. 8] do
Write(Tab[I, J]:2);
WriteLn();
end;
end
else
for R in [1 .. 10] do
if Test(X, Y, R, Tab) > 0 then
begin
Tab[X, Y] := R;
Pole(Tab);
Tab[X, Y] := 0;
end;
end;
var
Tab: TTab = (
(0, 0, 6, 0, 0, 0, 0, 0, 1),
(0, 7, 0, 0, 6, 0, 0, 5, 0),
(8, 0, 0, 1, 0, 3, 2, 0, 0),
(0, 0, 5, 0, 4, 0, 8, 0, 0),
(0, 4, 0, 7, 0, 2, 0, 9, 0),
(0, 0, 8, 0, 1, 0, 7, 0, 0),
(0, 0, 1, 2, 0, 5, 0, 0, 3),
(0, 6, 0, 0, 7, 0, 0, 8, 0),
(2, 0, 0, 0, 0, 0, 4, 0, 0)
);
begin
Pole(Tab);
Write('done...');
end.
cHJvZ3JhbSBpZGVvbmU7Cgp7JE1PREUgT0JKRlBDfXskTE9OR1NUUklOR1MgT059Cgp0eXBlCiAgVFRhYiA9IGFycmF5ICBbMCAuLiA4LCAwIC4uIDhdIG9mIEludGVnZXI7CgogIGZ1bmN0aW9uIFRlc3QoWCwgWSwgUjogSW50ZWdlcjsgVGFiOiBUVGFiKTogSW50ZWdlcjsKICB2YXIKICAgIEssIEEsIEIsIEksIEo6IEludGVnZXI7CiAgYmVnaW4KICAgIGZvciBLIGluIFswIC4uIDhdIGRvCiAgICAgIGlmIChUYWJbWCwgS10gPSBSKSBvciAoVGFiW0ssIFldID0gUikgdGhlbgogICAgICAgIEV4aXQoMCk7CgogICAgQSA6PSBYIC0gWCBtb2QgMzsKICAgIEIgOj0gWSAtIFkgbW9kIDM7CgogICAgZm9yIEkgaW4gW0EgLi4gQSArIDNdIGRvCiAgICAgIGZvciBKIGluIFtCIC4uIEIgKyAzXSBkbwogICAgICAgIGlmIFRhYltJLCBKXSA9IFIgdGhlbgogICAgICAgICAgRXhpdCgwKTsKCiAgICBSZXN1bHQgOj0gMTsKICBlbmQ7CgogIHByb2NlZHVyZSBQb2xlKFRhYjogVFRhYik7CiAgdmFyCiAgICBYLCBZLCBJLCBKLCBSOiBJbnRlZ2VyOwogIGJlZ2luCiAgICBmb3IgWCBpbiBbMCAuLiA4XSBkbwogICAgYmVnaW4KICAgICAgZm9yIFkgaW4gWzAgLi4gOF0gZG8KICAgICAgICBpZiBUYWJbWCwgWV0gPSAwIHRoZW4KICAgICAgICAgIEJyZWFrOwoKICAgICAgaWYgVGFiW1gsIFldID0gMCB0aGVuCiAgICAgICAgQnJlYWs7CiAgICBlbmQ7CgogICAgaWYgVGFiW1gsIFldID4gMCB0aGVuCiAgICBiZWdpbgogICAgICBmb3IgSSBpbiBbMCAuLiA4XSBkbwogICAgICBiZWdpbgogICAgICAgIGZvciBKIGluIFswIC4uIDhdIGRvCiAgICAgICAgICBXcml0ZShUYWJbSSwgSl06Mik7CgogICAgICAgIFdyaXRlTG4oKTsKICAgICAgZW5kOwogICAgZW5kCiAgICBlbHNlCiAgICAgIGZvciBSIGluIFsxIC4uIDEwXSBkbwogICAgICAgIGlmIFRlc3QoWCwgWSwgUiwgVGFiKSA+IDAgdGhlbgogICAgICAgIGJlZ2luCiAgICAgICAgICBUYWJbWCwgWV0gOj0gUjsKICAgICAgICAgIFBvbGUoVGFiKTsKICAgICAgICAgIFRhYltYLCBZXSA6PSAwOwogICAgICAgIGVuZDsKICBlbmQ7Cgp2YXIKICBUYWI6IFRUYWIgPSAoCiAgICAoMCwgMCwgNiwgMCwgMCwgMCwgMCwgMCwgMSksCiAgICAoMCwgNywgMCwgMCwgNiwgMCwgMCwgNSwgMCksCiAgICAoOCwgMCwgMCwgMSwgMCwgMywgMiwgMCwgMCksCiAgICAoMCwgMCwgNSwgMCwgNCwgMCwgOCwgMCwgMCksCiAgICAoMCwgNCwgMCwgNywgMCwgMiwgMCwgOSwgMCksCiAgICAoMCwgMCwgOCwgMCwgMSwgMCwgNywgMCwgMCksCiAgICAoMCwgMCwgMSwgMiwgMCwgNSwgMCwgMCwgMyksCiAgICAoMCwgNiwgMCwgMCwgNywgMCwgMCwgOCwgMCksCiAgICAoMiwgMCwgMCwgMCwgMCwgMCwgNCwgMCwgMCkKICApOwpiZWdpbgogIFBvbGUoVGFiKTsKICBXcml0ZSgnZG9uZS4uLicpOwplbmQuCg==