fork download
  1. program ideone;
  2.  
  3. {$MODE OBJFPC}{$LONGSTRINGS ON}
  4.  
  5. type
  6. TTab = array [0 .. 8, 0 .. 8] of Integer;
  7.  
  8. function Test(X, Y, R: Integer; Tab: TTab): Integer;
  9. var
  10. K, A, B, I, J: Integer;
  11. begin
  12. for K in [0 .. 8] do
  13. if (Tab[X, K] = R) or (Tab[K, Y] = R) then
  14. Exit(0);
  15.  
  16. A := X - X mod 3;
  17. B := Y - Y mod 3;
  18.  
  19. for I in [A .. A + 3] do
  20. for J in [B .. B + 3] do
  21. if Tab[I, J] = R then
  22. Exit(0);
  23.  
  24. Result := 1;
  25. end;
  26.  
  27. procedure Pole(Tab: TTab);
  28. var
  29. X, Y, I, J, R: Integer;
  30. begin
  31. for X in [0 .. 8] do
  32. begin
  33. for Y in [0 .. 8] do
  34. if Tab[X, Y] = 0 then
  35. Break;
  36.  
  37. if Tab[X, Y] = 0 then
  38. Break;
  39. end;
  40.  
  41. if Tab[X, Y] > 0 then
  42. begin
  43. for I in [0 .. 8] do
  44. begin
  45. for J in [0 .. 8] do
  46. Write(Tab[I, J]:2);
  47.  
  48. WriteLn();
  49. end;
  50. end
  51. else
  52. for R in [1 .. 10] do
  53. if Test(X, Y, R, Tab) > 0 then
  54. begin
  55. Tab[X, Y] := R;
  56. Pole(Tab);
  57. Tab[X, Y] := 0;
  58. end;
  59. end;
  60.  
  61. var
  62. Tab: TTab = (
  63. (0, 0, 6, 0, 0, 0, 0, 0, 1),
  64. (0, 7, 0, 0, 6, 0, 0, 5, 0),
  65. (8, 0, 0, 1, 0, 3, 2, 0, 0),
  66. (0, 0, 5, 0, 4, 0, 8, 0, 0),
  67. (0, 4, 0, 7, 0, 2, 0, 9, 0),
  68. (0, 0, 8, 0, 1, 0, 7, 0, 0),
  69. (0, 0, 1, 2, 0, 5, 0, 0, 3),
  70. (0, 6, 0, 0, 7, 0, 0, 8, 0),
  71. (2, 0, 0, 0, 0, 0, 4, 0, 0)
  72. );
  73. begin
  74. Pole(Tab);
  75. Write('done...');
  76. end.
  77.  
Success #stdin #stdout 0s 292KB
stdin
Standard input is empty
stdout
done...