using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace numpre
{
class Program
{
static void Main(string[] args)
{
int[,] board = { { 0,0,6, 0,0,3, 0,9,0 },
{ 7,0,0, 6,1,0, 0,2,0 },
{ 0,8,0, 0,5,0, 0,1,0 },
{ 1,0,8, 3,0,0, 0,6,9 },
{ 0,0,0, 0,6,0, 3,5,0 },
{ 0,6,3, 0,0,7, 0,0,0 },
{ 0,0,1, 0,0,6, 9,0,0 },
{ 0,0,7, 1,0,0, 0,0,6 },
{ 0,0,9, 0,2,0, 0,3,0 } };
/*int[,] board = { { 0,0,5, 0,7,0, 0,0,0 },
{ 0,6,0, 0,0,0, 0,9,0 },
{ 4,0,1, 0,0,3, 0,0,0 },
{ 9,5,8, 0,0,0, 3,0,0 },
{ 2,1,4, 0,8,0, 0,0,9 },
{ 0,7,6, 0,2,0, 8,0,5 },
{ 1,3,2, 7,5,8, 0,6,4 },
{ 6,4,9, 2,0,1, 5,8,0 },
{ 0,0,7, 6,4,9, 1,2,3 } };*/
while (true)
{
bool success = false;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
// 対象に数字が入っていない場合
if (board[i,j] == 0)
{
/// <summary> 検索して見つけた数値をtrueに </summary>
bool[] flag = new bool[9];
//Console.Write("\n横検索:");
// 横検索
// [x, 0~8]
for (int y = 0; y < 9; y++)
{
int num = board[i, y];
//Console.Write("{0}-{1},",i,y);
if (num != 0)
flag[num - 1] = true;
}
//Console.Write("\n縦検索:");
// 縦検索
// [0~8, x]
for(int t = 0;t < 9;t++)
{
int num = board[t,j];
//Console.Write("{0}-{1},", t, j);
if (num != 0)
flag[num - 1] = true;
}
// ブロック検索
int bt = i / 3 * 3, by = j / 3 * 3;
for (int x = bt; x < bt + 3; x++)
{
for (int y = by; y < by + 3; y++)
{
if (board[x, y] != 0)
flag[board[x, y] - 1] = true;
}
}
// falseが1つだけの場合、その配列が何番目か見る
if (flag.Count(x => x == false) == 1)
{
int num = flag.Select((item, index) => new { Index = index, Value = item })
.Where(item => item.Value == false)
.Select(item => item.Index).First();
// 発見に成功した場合
success = true;
board[i,j] = num + 1;
}
}
}
}
// 数字が入れられない場合終了
if (!success)
{
Console.WriteLine("数字が入れられませんでした");
Console.WriteLine("結果:");
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
Console.Write("{0},", board[i, j]);
if (j != 0 && (j + 1) % 3 == 0)
Console.Write(" ");
}
Console.WriteLine("");
if (i != 0 && (i + 1) % 3 == 0)
Console.WriteLine("\n");
}
break;
}
if (board.Cast<int>().Count(x => x == 0) == 0)
{
Console.WriteLine("すべて数値を入れました");
Console.WriteLine("結果:");
/*
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
Console.Write("{0},", board[i,j]);
if(j % 3 == 0)
Console.Write("");
}
Console.WriteLine("]\n");
}*/
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
Console.Write("{0},", board[i, j]);
if (j != 0 && (j + 1) % 3 == 0)
Console.Write(" ");
}
Console.WriteLine("");
if (i != 0 && (i + 1) % 3 == 0)
Console.WriteLine("\n");
}
break;
}
}
Console.ReadKey();
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0OwoKbmFtZXNwYWNlIG51bXByZQp7CiAgICBjbGFzcyBQcm9ncmFtCiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKCiAgICAgICAgICAgIGludFssXSBib2FyZCA9IHsgeyAwLDAsNiwgIDAsMCwzLCAgMCw5LDAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDcsMCwwLCAgNiwxLDAsICAwLDIsMCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMCw4LDAsICAwLDUsMCwgIDAsMSwwIH0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMSwwLDgsICAzLDAsMCwgIDAsNiw5IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAwLDAsMCwgIDAsNiwwLCAgMyw1LDAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDAsNiwzLCAgMCwwLDcsICAwLDAsMCB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDAsMCwxLCAgMCwwLDYsICA5LDAsMCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMCwwLDcsICAxLDAsMCwgIDAsMCw2IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAwLDAsOSwgIDAsMiwwLCAgMCwzLDAgfSB9OwoKICAgICAgICAgICAgLyppbnRbLF0gYm9hcmQgPSB7IHsgMCwwLDUsICAwLDcsMCwgIDAsMCwwIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAwLDYsMCwgIDAsMCwwLCAgMCw5LDAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDQsMCwxLCAgMCwwLDMsICAwLDAsMCB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDksNSw4LCAgMCwwLDAsICAzLDAsMCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMiwxLDQsICAwLDgsMCwgIDAsMCw5IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAwLDcsNiwgIDAsMiwwLCAgOCwwLDUgfSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAxLDMsMiwgIDcsNSw4LCAgMCw2LDQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDYsNCw5LCAgMiwwLDEsICA1LDgsMCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMCwwLDcsICA2LDQsOSwgIDEsMiwzIH0gfTsqLwoKICAgICAgICAgICAgCgogICAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CgogICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA5OyBqKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyDlr77osaHjgavmlbDlrZfjgYzlhaXjgaPjgabjgYTjgarjgYTloLTlkIgKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvYXJkW2ksal0gPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PiDmpJzntKLjgZfjgabopovjgaTjgZHjgZ/mlbDlgKTjgpJ0cnVl44GrIDwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xbXSBmbGFnID0gbmV3IGJvb2xbOV07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Db25zb2xlLldyaXRlKCJcbuaoquaknOe0ojoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmqKrmpJzntKIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFt4LCAwfjhdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IDk7IHkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtID0gYm9hcmRbaSwgeV07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ29uc29sZS5Xcml0ZSgiezB9LXsxfSwiLGkseSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0gIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ1tudW0gLSAxXSA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Db25zb2xlLldyaXRlKCJcbue4puaknOe0ojoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe4puaknOe0ogogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWzB+OCwgeF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgdCA9IDA7dCA8IDk7dCsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0gPSBib2FyZFt0LGpdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0NvbnNvbGUuV3JpdGUoInswfS17MX0sIiwgdCwgaik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0gIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ1tudW0gLSAxXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g44OW44Ot44OD44Kv5qSc57SiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnQgPSBpIC8gMyAqIDMsIGJ5ID0gaiAvIDMgKiAzOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gYnQ7IHggIDwgYnQgKyAzOyB4KyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IGJ5OyB5IDwgYnkgKyAzOyB5KyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9hcmRbeCwgeV0gIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdbYm9hcmRbeCwgeV0gLSAxXSA9IHRydWU7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFsc2XjgYwx44Gk44Gg44GR44Gu5aC05ZCI44CB44Gd44Gu6YWN5YiX44GM5L2V55Wq55uu44GL6KaL44KLCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZy5Db3VudCh4ID0+IHggPT0gZmFsc2UpID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSA9IGZsYWcuU2VsZWN0KChpdGVtLCBpbmRleCkgPT4gbmV3IHsgSW5kZXggPSBpbmRleCwgVmFsdWUgPSBpdGVtIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLldoZXJlKGl0ZW0gPT4gaXRlbS5WYWx1ZSA9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuU2VsZWN0KGl0ZW0gPT4gaXRlbS5JbmRleCkuRmlyc3QoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g55m66KaL44Gr5oiQ5Yqf44GX44Gf5aC05ZCICiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmRbaSxqXSA9IG51bSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIOaVsOWtl+OBjOWFpeOCjOOCieOCjOOBquOBhOWgtOWQiOe1guS6hgogICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCLmlbDlrZfjgYzlhaXjgozjgonjgozjgb7jgZvjgpPjgafjgZfjgZ8iKTsKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgi57WQ5p6c77yaIik7CiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDk7IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZSgiezB9LCIsIGJvYXJkW2ksIGpdKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPSAwICYmIChqICsgMSkgJSAzID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZSgiICAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIiIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAwICYmIChpICsgMSkgJSAzID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiXG4iKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGJvYXJkLkNhc3Q8aW50PigpLkNvdW50KHggPT4geCA9PSAwKSA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCLjgZnjgbnjgabmlbDlgKTjgpLlhaXjgozjgb7jgZfjgZ8iKTsKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgi57WQ5p6cOiIpOwoKICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA5OyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoInswfSwiLCBib2FyZFtpLGpdKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihqICUgMyA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoIiIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiXVxuIik7CiAgICAgICAgICAgICAgICAgICAgfSovCiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDk7IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZSgiezB9LCIsIGJvYXJkW2ksIGpdKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPSAwICYmIChqICsgMSkgJSAzID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZSgiICAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIiIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAwICYmIChpICsgMSkgJSAzID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiXG4iKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgQ29uc29sZS5SZWFkS2V5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICB9CiAgICB9Cn0K