Jak działa ten program

0

Witam mam program który pobiera liczby z pliku i sprawdza czy sudoku jest dobrze ułożone
Znalazłem taki kod :

 #include <fstream>
#include <iostream>
#include <string>

void reset(bool tab[][9]) {
	for (int i = 0; i < 9; i++)
		for(int j = 0; j < 9; j++)
			tab[i][j] = false;
}

int main() {
	std::ifstream is;
	is.open("sudoku.txt");
	if (!is.good())
		return 0;
	std::string line;
	bool columns[9][9], rows[9][9], squares[9][9];
	reset(columns);
	reset(rows);
	reset(squares);
	for (int i = 0; i < 9; i++) {
		getline(is, line);
		for (int j = 0; j < 9; j++) {
			columns[j][line[j] - '0' - 1] = true;
			rows[i][line[j] - '0' - 1] = true;
			squares[(j - (j % 3)) / 3 + (i - (i % 3))][line[j] - '0' - 1] = true;
		}
	}
	for (int i = 0; i < 9; i++) {
		for (int j = 0; j < 9; j++)
			if (!columns[i][j] || !rows[i][j] || !squares[i][j]) {
				std::cout << "false";
				return 0;
			}
	}
	std::cout << "true";
	return 0;
}

Liczby są zapisane w pliku tekstowym np tak.Czyli 9x9 bez odestępów.

316156862
316156862
316156862
316156862
316156862
316156862
316156862
316156862
316156862

Głownie nie rozumiem tego:

 	for (int i = 0; i < 9; i++) {
		getline(is, line);
		for (int j = 0; j < 9; j++) {
			columns[j][line[j] - '0' - 1] = true;
			rows[i][line[j] - '0' - 1] = true;
			squares[(j - (j % 3)) / 3 + (i - (i % 3))][line[j] - '0' - 1] = true;
		}
	}
0

Odpal w debuggerze i sobie zobacz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1