Golang вопрос Array sudoku - grid [i] [j] [0] - PullRequest
0 голосов
/ 31 марта 2020

Привет У меня есть сомнения с этим кодом именно с этим seenRow[grid[i][j][0] - 49]. что это значит?


func sudoku2(grid [][]string) bool {
    for i := 0; i < 9; i++ {
        var seenRow [9]bool
        var seenCol [9]bool
        var seenSub [9]bool
        for j := 0; j < 9; j++ {
            if grid[i][j] != "." {
                if seenRow[grid[i][j][0] - 49] {
                    return false
                }
                seenRow[grid[i][j][0] - 49] = true
            }
            if grid[j][i] != "." {
                if seenCol[grid[j][i][0] - 49] {
                    return false
                }
                seenCol[grid[j][i][0] - 49] = true
            }
            x := i%3*3 + j%3
            y := i/3*3 + j/3
            if grid[y][x] != "." {
                if seenSub[grid[y][x][0] - 49] {
                    return false
                }
                seenSub[grid[y][x][0] - 49] = true
            }
        }
    }
    return true
}

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Похоже, что это эмуляция hashmap. 49 является символьным значением ASCII символа 1, поэтому, если ячейка имеет значение 1, cell-49 даст 0, если ячейка имеет 2, cell-49 даст 1, et c. И массив seenSub отслеживает, какие цифры были замечены. Если seenSub[i] равно true, то был виден ди git i+1.

0 голосов
/ 31 марта 2020
seenRow[grid[i][j][0] - 49]

seenRow - это срез среза string, следовательно, первые два индекса [i][j]. grid[i][j] - это строка, а grid[i][j][0] - это число c значения первого байта в виде целого числа.

Вычитание -49 и фрагмент из 9 элементов seenRow заставляют меня задуматься что первый байт строки - это значение между 49 и 57 (значение от 1 до 9). На этом этапе стоит взглянуть на другие части кода, чтобы понять, какие данные хранятся в grid и какова его семантика.

Если бы мне пришлось угадывать, grid - это 9 на 9 9 Доска судоко, где каждое значение представлено в виде 1-байтовой строки со значениями от «1» до «9» со специальным значением «.» Это довольно странное представление, но это то, что предлагает код.

...