Проверка столбца в матрице на наличие дубликатов и выполнение переключения номера - Судоку - Python - PullRequest
0 голосов
/ 07 апреля 2020

Так что я делаю это как личный проект, и у меня возникают некоторые трудности с получением результата, который я ищу.

def createSudoku():
    rowCount = 9
    columnCount = 9
    gameBoard = []

    ##Row entry is randomized order
    ##Column entry is not randomized order
    ##Row entry cannot be duplicate
    for row in range(rowCount):
        rowList = []
        sudokuNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        for column in range(columnCount):
            choice = random.choice(sudokuNumbers)
            rowList.append(choice)
            sudokuNumbers.remove(choice)
        gameBoard.append(rowList)

Итак, вышеуказанная часть моего кода в настоящий момент создает мои строки наугад, что и было моим намерением. Прямо сейчас я начинаю поиск по матрице с другим l oop, чтобы определить, что столбцы на самом деле случайные.

    K = 0
    ##Column Duplicate Algorithm
    while(K < columnCount):
        for sub in gameBoard:
            columnK = sub[K]
        sudokuNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        for item in range(columnK):
            if item in sudokuNumbers:
                sudokuNumbers.remove(item)
            else:
                sub.append(sub.pop(sub.index(item)))
                if ...            

        K += 1

Мое намерение для поиска по столбцу состоит в том, чтобы использовать позицию столбца [item] с расположением строки [K] и либо вставьте / переместите другую запись в этом ряду вместо дубликата, перепроверьте и продолжите. Проблема, которую я теперь вижу после того, как я возился с этим, заключалась в том, что мои первоначальные мысли заключались в том, чтобы использовать al oop или выполнить это рекурсивно, но это была бы довольно большая кроличья нора. Мне любопытно, чтобы в этой ситуации мне было предложено определить, как заменить запись в строке, или я слишком усложняю разрешение здесь?

Я понимаю, на чем я должен сосредоточиться для лучшего OOP состоит в том, чтобы разделить циклы как их собственные функции, и я намерен это сделать, я просто застреваю в этой проверке для своего судоку.

1 Ответ

0 голосов
/ 08 апреля 2020

Этот l oop найдет дубликаты для вас и vani sh it.

exclusions = [43606,125490,...]
def ID_Generator(new_clients): # This is a list of new client

  new_client_IDs = []

  while len(new_client_IDs) < len(new_clients):
    ID = randint(40000, 200000)
    if ID not in exclusions:
      new_client_IDs.append(ID)
    if list(dict.fromkeys(new_client_IDs)):

      new_client_IDs = list(dict.fromkeys(new_client_IDs))
...