Harigami
ログイン
anonymous タイトルなし
No License Python
コピー
#初期化
ans=[[[1,2,3,4,5,6,7,8,9]for i in range(9)]for j in range(9)]
data=[[0 for i in range(9)] for j in range(9)]

#入力
for i in range(9):
    data[i]=list(map(int,input().split()))


#確定したマスを周りのマスの数字から消す関数
def solve(i,j):
    for k in range(9):  # 縦
        if (k == j):
            continue
        if (data[i][j] in ans[i][k]):
            ans[i][k].remove(data[i][j])

    for k in range(9):  # 横
        if (k == i):
            continue
        if (data[i][j] in ans[k][j]):
            ans[k][j].remove(data[i][j])

    for k in range(3):  # 3×3
        for l in range(3):
            if (data[i][j] in ans[i + k - i % 3][j + l - j % 3]):
                if (k == i % 3 and l == j % 3):
                    continue
                ans[i + k - i % 3][j + l - j % 3].remove(data[i][j])
#関数ここまで

#最初から与えられているマスに値を入れる
for i in range(9):
    for j in range(9):
        if (data[i][j] != 0):
            ans[i][j] = [data[i][j], "END"]
        solve(i,j)

#一回の実行で1マスは絶対確定するから81回回せば理論上解ける(はず)
for x in range(81):
    for i in range(9):
        for j in range(9):
            if (len(ans[i][j]) == 1):

                data[i][j]=ans[i][j][0]
                solve(i, j)
                #確定したマスはENDをつけて次回からスキップ
                ans[i][j].append("END")

#ここまでで解き終わる

for i in range(9):
    for j in range(9):
        if("END" in ans[i][j]):
            ans[i][j].remove("END")
#ENDを外す

for i in range(9):
    for j in range(9):
        print(ans[i][j],end=" ")
    print()
#結果を出力
#初期化
ans=[[[1,2,3,4,5,6,7,8,9]for i in range(9)]for j in range(9)]
data=[[0 for i in range(9)] for j in range(9)]

#入力
for i in range(9):
    data[i]=list(map(int,input().split()))


#確定したマスを周りのマスの数字から消す関数
def solve(i,j):
    for k in range(9):  # 縦
        if (k == j):
            continue
        if (data[i][j] in ans[i][k]):
            ans[i][k].remove(data[i][j])

    for k in range(9):  # 横
        if (k == i):
            continue
        if (data[i][j] in ans[k][j]):
            ans[k][j].remove(data[i][j])

    for k in range(3):  # 3×3
        for l in range(3):
            if (data[i][j] in ans[i + k - i % 3][j + l - j % 3]):
                if (k == i % 3 and l == j % 3):
                    continue
                ans[i + k - i % 3][j + l - j % 3].remove(data[i][j])
#関数ここまで

#最初から与えられているマスに値を入れる
for i in range(9):
    for j in range(9):
        if (data[i][j] != 0):
            ans[i][j] = [data[i][j], "END"]
        solve(i,j)

#一回の実行で1マスは絶対確定するから81回回せば理論上解ける(はず)
for x in range(81):
    for i in range(9):
        for j in range(9):
            if (len(ans[i][j]) == 1):

                data[i][j]=ans[i][j][0]
                solve(i, j)
                #確定したマスはENDをつけて次回からスキップ
                ans[i][j].append("END")

#ここまでで解き終わる

for i in range(9):
    for j in range(9):
        if("END" in ans[i][j]):
            ans[i][j].remove("END")
#ENDを外す

for i in range(9):
    for j in range(9):
        print(ans[i][j],end=" ")
    print()
#結果を出力
コンソール
現在、コメントはありません。
最初のコメンターになりませんか?