From 4ddadc7b2196bb719b88d3b40719975f6e783a53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Tue, 15 Jun 2021 21:53:01 +0200 Subject: [PATCH] Check if soduku is solved --- android/gradle.properties | 4 +-- lib/screens/home.dart | 73 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 71 insertions(+), 6 deletions(-) diff --git a/android/gradle.properties b/android/gradle.properties index 14eed39..aa51064 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.4 -app.versionCode=4 +app.versionName=0.0.5 +app.versionCode=5 diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 7d399f9..b295f79 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -57,7 +57,7 @@ class Home extends StatelessWidget { } // TODO: shuffle/flip/rotate grid - + return cells; } @@ -179,7 +179,7 @@ class Home extends StatelessWidget { List cells = myProvider.cells; int size = myProvider.size; - Color borderColor = _checkBoardIsSolved(cells) ? Colors.green : Colors.orange; + Color borderColor = _checkBoardIsSolved(myProvider) ? Colors.green : Colors.orange; return Container( margin: EdgeInsets.all(2), @@ -242,8 +242,73 @@ class Home extends StatelessWidget { ); } - bool _checkBoardIsSolved(List cells) { - return false; + bool _checkBoardIsSolved(Data myProvider) { + List cells = myProvider.cells; + int size = myProvider.size; + + // check grid is fully completed + for (var row = 0; row < pow(size, 2); row++) { + for (var col = 0; col < pow(size, 2); col++) { + if (cells[row][col].value == 0) { + print('grid not complete'); + return false; + } + } + } + print('ok grid complete complete'); + + // check lines does not contains a value twice + for (var row = 0; row < pow(size, 2); row++) { + List values = []; + for (var col = 0; col < pow(size, 2); col++) { + values.add(cells[row][col].value); + } + List distinctValues = values.toSet().toList(); + if (values.length != distinctValues.length) { + print('line ' + row.toString() + ' contains duplicates'); + return false; + } + } + print('ok no line with duplicates'); + + // check columns does not contains a value twice + for (var col = 0; col < pow(size, 2); col++) { + List values = []; + for (var row = 0; row < pow(size, 2); row++) { + values.add(cells[row][col].value); + } + List distinctValues = values.toSet().toList(); + if (values.length != distinctValues.length) { + print('column ' + col.toString() + ' contains duplicates'); + return false; + } + } + print('ok no column with duplicates'); + + // check blocks does not contains a value twice + for (var blockRow = 0; blockRow < size; blockRow++) { + for (var blockCol = 0; blockCol < size; blockCol++) { + List values = []; + + for (var rowInBlock = 0; rowInBlock < size; rowInBlock++) { + for (var colInBlock = 0; colInBlock < size; colInBlock++) { + int row = (blockRow * size) + rowInBlock; + int col = (blockCol * size) + colInBlock; + values.add(cells[row][col].value); + } + } + + List distinctValues = values.toSet().toList(); + if (values.length != distinctValues.length) { + print('block [' + blockCol.toString() + ',' + blockRow.toString() + '] contains duplicates'); + return false; + } + } + } + print('ok no block with duplicates'); + + print('-> ok sudoku solved!'); + return true; } @override -- GitLab