Я реализую решатель sudoku с использованием backtracking. Она читает судок доску в виде:Начальная позиция ящика коробки Sudoku
027800061000030008910005420500016030000970200070000096700000080006027000030480007
Я знаю, как я могу понять элементы на колонке, делая index % 9
(а затем делает простую арифметическую прогрессию соотношения 9), а также элементы на line, используя index/9
(а затем добавив один, пока не получится каждый из них), где index - это число в диапазоне [0,80].
Я не могу понять, как получить начальный индекс поля, если у меня есть индекс элемента в этом поле.
Так я гугле, и я получил: http://jakevdp.github.io/blog/2013/04/15/code-golf-in-python-sudoku/
Этот парень получает начальный индекс в поле, как это:
start = 27 * int(i/27) + 3 * int((i % 9)/3)
Где i
является индексом в моем списке элементов.
Я не могу понять, как он разобрался с этой формулой и как я могу ее сам вывести, поэтому, пожалуйста, объясните это мне.
Я понимаю, что понимание списка, которое приходит после этой формулы, имеет смысл только не в этой формуле.
PS: Я пишу это, чтобы узнать Haskell, но это действительно не имеет значения, так как теперь я хочу получить суть этой формулы.
Используйте бумагу и карандаш. Термины '(i/27)' и 'int ((% 9)/3) делят поле на три горизонтальные и три вертикальные полосы, которые затем объединяются/пересекаются через' a + 3 * b' в 3x3 квадратная сетка. – wildplasser