Как удалить словарь значений на основе условий судоку удаляет неправильные значения? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть функция для решения судоку, которая обновляет мой словарь ключей = координат;значение = возможные цифры, основанные на том, что цифра «k» уже находится в строке на доске судоку:

k = 8
for key, value in dic_i.items():
    if k in solving[key[0],0:]:
        if k in value:
            value.remove(k)
print(dic_i)

Я вставил частично решенную доску судоку и мой словарь начальных возможностей здесь:

solving = np.array([3, 1, 9, 4, 7, 2, 6, 8, 5],
                   [4, 5, 2, 6, 3, 8, 9, 7, 1],
                   [0, 0, 6, 9, 5, 1, 4, 2, 3],
                   [0, 0, 4, 1, 2, 0, *8, 5, 0],
                   [2, 6, 1, 5, 8, 9, 3, 4, 7],
                   [0, 3, 5, 7, 4, 0, 0, 0, 0],
                   [5, 4, 3, 8, 1, 7, 2, 0, 0],
                   [6, 2, 7, 3, 9, 4, 5, 1, 8],
                   [1, 9, 8, 2, 6, 5, 7, 3, 4]])
dic_i
Out[1081]: 
{(2, 0): [7, 8],
 (2, 1): [7, 8],
 (3, 0): [7, 8, 9],
 (3, 1): [7, 8],
 (3, 5): [3, 6, 9],
 (3, 8): [6, 9],
 (5, 0): [8, 9],
 (5, 5): [6, 9],
 (5, 6): [1, 8],
 (5, 7): [6, 9],
 (5, 8): [2, 6, 9],
 (6, 7): [6, 9],
 (6, 8): [6, 9]}

Я концентрируюсь на удалении возможной цифры «8» из строки 4, после запуска моего кода сверху я получаю:

dic_i
Out[1080]: 
{(2, 0): [7, 8],
 (2, 1): [7],
 (3, 0): [7, 9],
 (3, 1): [7],
 (3, 5): [3, 6, 9],
 (3, 8): [6, 9],
 (5, 0): [8, 9],
 (5, 5): [6, 9],
 (5, 6): [1, 8],
 (5, 7): [6, 9],
 (5, 8): [2, 6, 9],
 (6, 7): [6, 9],
 (6, 8): [6, 9]}

Не могу понять, какдля (2,1) - удаляется цифра 8 ???в строке 3 нет цифры 8 ... (для (3,0) и (3,1) она правильно удалила цифру 8).

1 Ответ

0 голосов
/ 21 февраля 2019

Работает, когда я его запускаю.

import numpy as np
solving = np.array([[3, 1, 9, 4, 7, 2, 6, 8, 5],
                   [4, 5, 2, 6, 3, 8, 9, 7, 1],
                   [0, 0, 6, 9, 5, 1, 4, 2, 3],
                   [0, 0, 4, 1, 2, 0, 8, 5, 0],
                   [2, 6, 1, 5, 8, 9, 3, 4, 7],
                   [0, 3, 5, 7, 4, 0, 0, 0, 0],
                   [5, 4, 3, 8, 1, 7, 2, 0, 0],
                   [6, 2, 7, 3, 9, 4, 5, 1, 8],
                   [1, 9, 8, 2, 6, 5, 7, 3, 4]])

dic_i = {(2, 0): [7, 8],
 (2, 1): [7, 8],
 (3, 0): [7, 8, 9],
 (3, 1): [7, 8],
 (3, 5): [3, 6, 9],
 (3, 8): [6, 9],
 (5, 0): [8, 9],
 (5, 5): [6, 9],
 (5, 6): [1, 8],
 (5, 7): [6, 9],
 (5, 8): [2, 6, 9],
 (6, 7): [6, 9],
 (6, 8): [6, 9]}

k = 8
for key, value in dic_i.items():
    if k in solving[key[0],0:]:
        if k in value:
            value.remove(k)
print(dic_i)

печатает:

{(2, 0): [7, 8],
(2, 1): [7, 8],
(3, 0): [7, 9],
(3, 1): [7],
(3, 5): [3, 6, 9],
(3, 8): [6, 9],
(5, 0): [8, 9],
(5, 5): [6, 9],
(5, 6): [1, 8],
(5, 7): [6, 9],
(5, 8): [2, 6, 9],
(6, 7): [6, 9],
(6, 8): [6, 9]}
...