diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies new file mode 100644 index 000000000..db7fbf2e1 --- /dev/null +++ b/.flutter-plugins-dependencies @@ -0,0 +1 @@ +{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"firebase_admob","dependencies":["firebase_core"]},{"name":"firebase_analytics","dependencies":[]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"firebase_crashlytics","dependencies":[]},{"name":"flutter_email_sender","dependencies":[]},{"name":"package_info","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"webview_flutter","dependencies":[]}]} \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index 0d422c6c3..97f91eaab 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,3 +1,4 @@ + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -22,6 +23,9 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' +apply plugin: 'com.google.gms.google-services' +apply plugin: 'io.fabric' + apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { @@ -32,13 +36,12 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.firekamp.sudoku_brain" + applicationId "com.matchalagames.sudokubrain" minSdkVersion 16 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -56,6 +59,6 @@ flutter { dependencies { testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' } diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 000000000..d61d009bb --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,49 @@ +{ + "project_info": { + "project_number": "1059367218898", + "firebase_url": "https://sudokubrain-bc1ec.firebaseio.com", + "project_id": "sudokubrain-bc1ec", + "storage_bucket": "sudokubrain-bc1ec.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:1059367218898:android:a5decad63eb8478f7b870b", + "android_client_info": { + "package_name": "com.matchalagames.sudokubrain" + } + }, + "oauth_client": [ + { + "client_id": "1059367218898-o8s9nfk008dm1qme0rmkackf4plq5rpg.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyBGzyeLPg8LzOz6STxnTN-UfKVk9renWFo" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "1059367218898-o8s9nfk008dm1qme0rmkackf4plq5rpg.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "1059367218898-83fbciu2ius3g4a8acspi9e5csopp7gl.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.matchalagames.sudokubrain", + "app_store_id": "1499318741" + } + } + ] + } + }, + "admob_app_id": "ca-app-pub-6145080690961844~7490094473" + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 16128259e..d02f31ad8 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.firekamp.sudokubrain"> diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 238016c49..9563b6476 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,32 +1,37 @@ + package="com.firekamp.sudokubrain"> + + + - + android:icon="@mipmap/ic_launcher" + android:label="Sudoku Brain"> + + + - + + + + - - + + diff --git a/android/app/src/main/java/com/firekamp/sudoku_brain/MainActivity.java b/android/app/src/main/java/com/firekamp/sudokubrain/MainActivity.java similarity index 90% rename from android/app/src/main/java/com/firekamp/sudoku_brain/MainActivity.java rename to android/app/src/main/java/com/firekamp/sudokubrain/MainActivity.java index f4e03fa0d..48d4e16c4 100644 --- a/android/app/src/main/java/com/firekamp/sudoku_brain/MainActivity.java +++ b/android/app/src/main/java/com/firekamp/sudokubrain/MainActivity.java @@ -1,4 +1,4 @@ -package com.firekamp.sudoku_brain; +package com.firekamp.sudokubrain; import android.os.Bundle; import io.flutter.app.FlutterActivity; diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7..2148f26c6 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b79b..b5c492b41 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d439148..80108763f 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34..4754dc870 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eeb..901868753 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 00fa4417c..730af6fb6 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -5,4 +5,6 @@ Flutter draws its first frame --> @drawable/launch_background + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml index 16128259e..d02f31ad8 100644 --- a/android/app/src/profile/AndroidManifest.xml +++ b/android/app/src/profile/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.firekamp.sudokubrain"> diff --git a/android/build.gradle b/android/build.gradle index bb8a30389..129242c4f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,10 +2,15 @@ buildscript { repositories { google() jcenter() + maven { + url 'https://maven.fabric.io/public' + } } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.google.gms:google-services:4.3.3' + classpath 'io.fabric.tools:gradle:1.26.1' } } diff --git a/android/gradle.properties b/android/gradle.properties index 2bd6f4fda..2324ab5b7 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,2 +1,5 @@ org.gradle.jvmargs=-Xmx1536M +android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 2819f022f..af6030353 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jun 23 08:50:38 CEST 2017 +#Mon Mar 02 11:39:38 PKT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/assets/boards/boardbrain.json b/assets/boards/boardbrain.json new file mode 100644 index 000000000..a22c58071 --- /dev/null +++ b/assets/boards/boardbrain.json @@ -0,0 +1,1451 @@ +{ + "difficulty":{ + "easy":{ + "level":[ + { + "id":1, + "board":[ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution":[ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id":2, + "board":[ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution":[ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id":3, + "board":[ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution":[ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id":4, + "board":[ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution":[ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + } + ] + }, + "medium":{ + "level":[ + { + "id":1, + "board":[ + [ + 0, + 0, + 5, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 2, + 3, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 9, + 0 + ], + [ + 3, + 0, + 0, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 0, + 9, + 2, + 1, + 0, + 0, + 0, + 0 + ], + [ + 5, + 0, + 7, + 6, + 0, + 1, + 9, + 0, + 0 + ], + [ + 6, + 0, + 0, + 9, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 4, + 0, + 0 + ] + ], + "solution":[ + [ + 1, + 6, + 5, + 4, + 2, + 8, + 3, + 7, + 9 + ], + [ + 7, + 2, + 3, + 1, + 5, + 9, + 6, + 4, + 8 + ], + [ + 4, + 9, + 8, + 3, + 7, + 6, + 1, + 2, + 5 + ], + [ + 2, + 1, + 4, + 5, + 6, + 3, + 8, + 9, + 7 + ], + [ + 3, + 5, + 6, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 7, + 9, + 2, + 1, + 4, + 5, + 3, + 6 + ], + [ + 5, + 3, + 7, + 6, + 4, + 1, + 9, + 8, + 2 + ], + [ + 6, + 4, + 1, + 9, + 8, + 2, + 7, + 5, + 3 + ], + [ + 9, + 8, + 2, + 7, + 3, + 5, + 4, + 6, + 1 + ] + ] + }, + { + "id":2, + "board":[ + [ + 0, + 0, + 5, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 2, + 3, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 9, + 0 + ], + [ + 3, + 0, + 0, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 0, + 9, + 2, + 1, + 0, + 0, + 0, + 0 + ], + [ + 5, + 0, + 7, + 6, + 0, + 1, + 9, + 0, + 0 + ], + [ + 6, + 0, + 0, + 9, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 4, + 0, + 0 + ] + ], + "solution":[ + [ + 1, + 6, + 5, + 4, + 2, + 8, + 3, + 7, + 9 + ], + [ + 7, + 2, + 3, + 1, + 5, + 9, + 6, + 4, + 8 + ], + [ + 4, + 9, + 8, + 3, + 7, + 6, + 1, + 2, + 5 + ], + [ + 2, + 1, + 4, + 5, + 6, + 3, + 8, + 9, + 7 + ], + [ + 3, + 5, + 6, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 7, + 9, + 2, + 1, + 4, + 5, + 3, + 6 + ], + [ + 5, + 3, + 7, + 6, + 4, + 1, + 9, + 8, + 2 + ], + [ + 6, + 4, + 1, + 9, + 8, + 2, + 7, + 5, + 3 + ], + [ + 9, + 8, + 2, + 7, + 3, + 5, + 4, + 6, + 1 + ] + ] + } + ] + }, + "hard":{ + "level":[ + { + "id":1, + "board":[ + [ + 0, + 8, + 0, + 0, + 7, + 3, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0 + ], + [ + 0, + 6, + 0, + 0, + 0, + 9, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 6 + ], + [ + 0, + 0, + 0, + 0, + 2, + 4, + 3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 9, + 7, + 8 + ], + [ + 7, + 4, + 6, + 9, + 0, + 0, + 0, + 0, + 3 + ], + [ + 8, + 9, + 0, + 0, + 0, + 0, + 6, + 1, + 4 + ] + ], + "solution":[ + [ + 2, + 8, + 4, + 1, + 7, + 3, + 5, + 6, + 9 + ], + [ + 1, + 3, + 9, + 2, + 5, + 6, + 4, + 8, + 7 + ], + [ + 5, + 6, + 7, + 4, + 8, + 9, + 1, + 3, + 2 + ], + [ + 9, + 2, + 1, + 3, + 6, + 7, + 8, + 4, + 5 + ], + [ + 4, + 5, + 3, + 8, + 9, + 1, + 7, + 2, + 6 + ], + [ + 6, + 7, + 8, + 5, + 2, + 4, + 3, + 9, + 1 + ], + [ + 3, + 1, + 5, + 6, + 4, + 2, + 9, + 7, + 8 + ], + [ + 7, + 4, + 6, + 9, + 1, + 8, + 2, + 5, + 3 + ], + [ + 8, + 9, + 2, + 7, + 3, + 5, + 6, + 1, + 4 + ] + ] + } + ] + } + } +} \ No newline at end of file diff --git a/assets/brain.json b/assets/brain.json new file mode 100644 index 000000000..e60b84583 --- /dev/null +++ b/assets/brain.json @@ -0,0 +1,54345 @@ +{ + "difficulty": { + "easy": { + "level": [ + { + "id": 1, + "board": [ + [ + 9, + 6, + 0, + 0, + 1, + 0, + 2, + 5, + 4 + ], + [ + 4, + 0, + 1, + 2, + 3, + 9, + 8, + 6, + 7 + ], + [ + 2, + 7, + 8, + 5, + 6, + 4, + 1, + 9, + 3 + ], + [ + 5, + 0, + 2, + 4, + 7, + 6, + 3, + 1, + 8 + ], + [ + 0, + 1, + 7, + 0, + 8, + 3, + 5, + 4, + 2 + ], + [ + 3, + 8, + 4, + 1, + 5, + 2, + 9, + 7, + 6 + ], + [ + 0, + 3, + 0, + 6, + 2, + 0, + 0, + 8, + 0 + ], + [ + 0, + 2, + 0, + 0, + 4, + 0, + 6, + 3, + 0 + ], + [ + 0, + 4, + 6, + 3, + 9, + 0, + 7, + 2, + 5 + ] + ], + "solution": [ + [ + 9, + 6, + 3, + 7, + 1, + 8, + 2, + 5, + 4 + ], + [ + 4, + 5, + 1, + 2, + 3, + 9, + 8, + 6, + 7 + ], + [ + 2, + 7, + 8, + 5, + 6, + 4, + 1, + 9, + 3 + ], + [ + 5, + 9, + 2, + 4, + 7, + 6, + 3, + 1, + 8 + ], + [ + 6, + 1, + 7, + 9, + 8, + 3, + 5, + 4, + 2 + ], + [ + 3, + 8, + 4, + 1, + 5, + 2, + 9, + 7, + 6 + ], + [ + 1, + 3, + 5, + 6, + 2, + 7, + 4, + 8, + 9 + ], + [ + 7, + 2, + 9, + 8, + 4, + 5, + 6, + 3, + 1 + ], + [ + 8, + 4, + 6, + 3, + 9, + 1, + 7, + 2, + 5 + ] + ] + }, + { + "id": 2, + "board": [ + [ + 7, + 0, + 5, + 6, + 8, + 9, + 4, + 1, + 0 + ], + [ + 6, + 8, + 3, + 4, + 1, + 5, + 2, + 9, + 7 + ], + [ + 9, + 4, + 1, + 7, + 0, + 3, + 6, + 0, + 0 + ], + [ + 3, + 7, + 6, + 9, + 5, + 1, + 8, + 0, + 0 + ], + [ + 5, + 0, + 2, + 8, + 0, + 4, + 9, + 3, + 6 + ], + [ + 4, + 9, + 8, + 3, + 6, + 2, + 5, + 7, + 1 + ], + [ + 1, + 5, + 7, + 2, + 0, + 8, + 3, + 6, + 0 + ], + [ + 8, + 0, + 0, + 1, + 0, + 6, + 7, + 0, + 0 + ], + [ + 2, + 6, + 0, + 5, + 3, + 7, + 1, + 0, + 0 + ] + ], + "solution": [ + [ + 7, + 2, + 5, + 6, + 8, + 9, + 4, + 1, + 3 + ], + [ + 6, + 8, + 3, + 4, + 1, + 5, + 2, + 9, + 7 + ], + [ + 9, + 4, + 1, + 7, + 2, + 3, + 6, + 5, + 8 + ], + [ + 3, + 7, + 6, + 9, + 5, + 1, + 8, + 4, + 2 + ], + [ + 5, + 1, + 2, + 8, + 7, + 4, + 9, + 3, + 6 + ], + [ + 4, + 9, + 8, + 3, + 6, + 2, + 5, + 7, + 1 + ], + [ + 1, + 5, + 7, + 2, + 4, + 8, + 3, + 6, + 9 + ], + [ + 8, + 3, + 4, + 1, + 9, + 6, + 7, + 2, + 5 + ], + [ + 2, + 6, + 9, + 5, + 3, + 7, + 1, + 8, + 4 + ] + ] + }, + { + "id": 3, + "board": [ + [ + 3, + 9, + 1, + 7, + 5, + 2, + 8, + 6, + 4 + ], + [ + 4, + 2, + 5, + 8, + 0, + 0, + 1, + 7, + 0 + ], + [ + 7, + 8, + 6, + 0, + 4, + 0, + 3, + 5, + 0 + ], + [ + 5, + 3, + 2, + 0, + 9, + 8, + 6, + 1, + 7 + ], + [ + 9, + 4, + 7, + 0, + 3, + 6, + 2, + 8, + 5 + ], + [ + 6, + 1, + 0, + 5, + 2, + 0, + 0, + 9, + 0 + ], + [ + 0, + 5, + 9, + 0, + 0, + 4, + 7, + 2, + 6 + ], + [ + 2, + 0, + 3, + 0, + 8, + 9, + 0, + 4, + 1 + ], + [ + 1, + 6, + 4, + 2, + 7, + 5, + 9, + 0, + 8 + ] + ], + "solution": [ + [ + 3, + 9, + 1, + 7, + 5, + 2, + 8, + 6, + 4 + ], + [ + 4, + 2, + 5, + 8, + 6, + 3, + 1, + 7, + 9 + ], + [ + 7, + 8, + 6, + 9, + 4, + 1, + 3, + 5, + 2 + ], + [ + 5, + 3, + 2, + 4, + 9, + 8, + 6, + 1, + 7 + ], + [ + 9, + 4, + 7, + 1, + 3, + 6, + 2, + 8, + 5 + ], + [ + 6, + 1, + 8, + 5, + 2, + 7, + 4, + 9, + 3 + ], + [ + 8, + 5, + 9, + 3, + 1, + 4, + 7, + 2, + 6 + ], + [ + 2, + 7, + 3, + 6, + 8, + 9, + 5, + 4, + 1 + ], + [ + 1, + 6, + 4, + 2, + 7, + 5, + 9, + 3, + 8 + ] + ] + }, + { + "id": 4, + "board": [ + [ + 8, + 0, + 0, + 2, + 4, + 5, + 1, + 9, + 6 + ], + [ + 0, + 0, + 2, + 0, + 1, + 9, + 8, + 4, + 7 + ], + [ + 9, + 4, + 1, + 8, + 6, + 7, + 5, + 2, + 3 + ], + [ + 0, + 7, + 8, + 6, + 3, + 4, + 9, + 1, + 5 + ], + [ + 4, + 0, + 9, + 0, + 7, + 2, + 0, + 6, + 8 + ], + [ + 6, + 0, + 3, + 0, + 9, + 8, + 2, + 7, + 4 + ], + [ + 0, + 2, + 0, + 4, + 8, + 3, + 7, + 0, + 9 + ], + [ + 7, + 8, + 4, + 9, + 5, + 1, + 0, + 3, + 0 + ], + [ + 0, + 0, + 0, + 7, + 2, + 6, + 4, + 8, + 1 + ] + ], + "solution": [ + [ + 8, + 3, + 7, + 2, + 4, + 5, + 1, + 9, + 6 + ], + [ + 5, + 6, + 2, + 3, + 1, + 9, + 8, + 4, + 7 + ], + [ + 9, + 4, + 1, + 8, + 6, + 7, + 5, + 2, + 3 + ], + [ + 2, + 7, + 8, + 6, + 3, + 4, + 9, + 1, + 5 + ], + [ + 4, + 1, + 9, + 5, + 7, + 2, + 3, + 6, + 8 + ], + [ + 6, + 5, + 3, + 1, + 9, + 8, + 2, + 7, + 4 + ], + [ + 1, + 2, + 6, + 4, + 8, + 3, + 7, + 5, + 9 + ], + [ + 7, + 8, + 4, + 9, + 5, + 1, + 6, + 3, + 2 + ], + [ + 3, + 9, + 5, + 7, + 2, + 6, + 4, + 8, + 1 + ] + ] + }, + { + "id": 5, + "board": [ + [ + 6, + 7, + 5, + 9, + 8, + 3, + 2, + 4, + 1 + ], + [ + 3, + 1, + 4, + 6, + 5, + 2, + 8, + 9, + 7 + ], + [ + 8, + 9, + 2, + 4, + 1, + 7, + 6, + 3, + 5 + ], + [ + 0, + 5, + 0, + 2, + 4, + 9, + 3, + 8, + 6 + ], + [ + 9, + 6, + 8, + 3, + 7, + 5, + 1, + 2, + 4 + ], + [ + 4, + 2, + 3, + 0, + 6, + 0, + 7, + 5, + 9 + ], + [ + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 7, + 0 + ], + [ + 2, + 3, + 6, + 7, + 9, + 4, + 5, + 1, + 8 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 0 + ] + ], + "solution": [ + [ + 6, + 7, + 5, + 9, + 8, + 3, + 2, + 4, + 1 + ], + [ + 3, + 1, + 4, + 6, + 5, + 2, + 8, + 9, + 7 + ], + [ + 8, + 9, + 2, + 4, + 1, + 7, + 6, + 3, + 5 + ], + [ + 1, + 5, + 7, + 2, + 4, + 9, + 3, + 8, + 6 + ], + [ + 9, + 6, + 8, + 3, + 7, + 5, + 1, + 2, + 4 + ], + [ + 4, + 2, + 3, + 1, + 6, + 8, + 7, + 5, + 9 + ], + [ + 5, + 4, + 1, + 8, + 2, + 6, + 9, + 7, + 3 + ], + [ + 2, + 3, + 6, + 7, + 9, + 4, + 5, + 1, + 8 + ], + [ + 7, + 8, + 9, + 5, + 3, + 1, + 4, + 6, + 2 + ] + ] + }, + { + "id": 6, + "board": [ + [ + 9, + 5, + 7, + 0, + 4, + 0, + 3, + 6, + 0 + ], + [ + 6, + 1, + 8, + 0, + 0, + 5, + 9, + 4, + 0 + ], + [ + 4, + 3, + 2, + 6, + 9, + 7, + 0, + 5, + 0 + ], + [ + 3, + 0, + 0, + 9, + 0, + 1, + 4, + 0, + 5 + ], + [ + 2, + 4, + 9, + 5, + 8, + 6, + 0, + 0, + 3 + ], + [ + 5, + 8, + 1, + 3, + 7, + 0, + 2, + 9, + 6 + ], + [ + 8, + 9, + 5, + 7, + 1, + 2, + 6, + 0, + 4 + ], + [ + 7, + 6, + 3, + 4, + 5, + 9, + 1, + 0, + 8 + ], + [ + 1, + 2, + 0, + 8, + 6, + 3, + 5, + 0, + 9 + ] + ], + "solution": [ + [ + 9, + 5, + 7, + 1, + 4, + 8, + 3, + 6, + 2 + ], + [ + 6, + 1, + 8, + 2, + 3, + 5, + 9, + 4, + 7 + ], + [ + 4, + 3, + 2, + 6, + 9, + 7, + 8, + 5, + 1 + ], + [ + 3, + 7, + 6, + 9, + 2, + 1, + 4, + 8, + 5 + ], + [ + 2, + 4, + 9, + 5, + 8, + 6, + 7, + 1, + 3 + ], + [ + 5, + 8, + 1, + 3, + 7, + 4, + 2, + 9, + 6 + ], + [ + 8, + 9, + 5, + 7, + 1, + 2, + 6, + 3, + 4 + ], + [ + 7, + 6, + 3, + 4, + 5, + 9, + 1, + 2, + 8 + ], + [ + 1, + 2, + 4, + 8, + 6, + 3, + 5, + 7, + 9 + ] + ] + }, + { + "id": 7, + "board": [ + [ + 9, + 0, + 3, + 0, + 0, + 0, + 4, + 8, + 0 + ], + [ + 8, + 2, + 1, + 3, + 7, + 4, + 9, + 6, + 5 + ], + [ + 5, + 0, + 4, + 0, + 0, + 0, + 3, + 1, + 0 + ], + [ + 7, + 0, + 9, + 4, + 2, + 0, + 6, + 5, + 0 + ], + [ + 4, + 8, + 5, + 1, + 6, + 7, + 2, + 3, + 9 + ], + [ + 2, + 0, + 6, + 5, + 0, + 0, + 7, + 4, + 0 + ], + [ + 1, + 9, + 8, + 7, + 4, + 6, + 5, + 2, + 3 + ], + [ + 3, + 4, + 2, + 9, + 0, + 0, + 8, + 7, + 6 + ], + [ + 6, + 5, + 7, + 8, + 3, + 2, + 1, + 9, + 4 + ] + ], + "solution": [ + [ + 9, + 6, + 3, + 2, + 1, + 5, + 4, + 8, + 7 + ], + [ + 8, + 2, + 1, + 3, + 7, + 4, + 9, + 6, + 5 + ], + [ + 5, + 7, + 4, + 6, + 8, + 9, + 3, + 1, + 2 + ], + [ + 7, + 1, + 9, + 4, + 2, + 3, + 6, + 5, + 8 + ], + [ + 4, + 8, + 5, + 1, + 6, + 7, + 2, + 3, + 9 + ], + [ + 2, + 3, + 6, + 5, + 9, + 8, + 7, + 4, + 1 + ], + [ + 1, + 9, + 8, + 7, + 4, + 6, + 5, + 2, + 3 + ], + [ + 3, + 4, + 2, + 9, + 5, + 1, + 8, + 7, + 6 + ], + [ + 6, + 5, + 7, + 8, + 3, + 2, + 1, + 9, + 4 + ] + ] + }, + { + "id": 8, + "board": [ + [ + 5, + 1, + 8, + 4, + 3, + 6, + 9, + 7, + 2 + ], + [ + 2, + 0, + 4, + 9, + 7, + 8, + 6, + 1, + 5 + ], + [ + 9, + 7, + 0, + 5, + 1, + 2, + 8, + 4, + 3 + ], + [ + 0, + 6, + 0, + 0, + 2, + 0, + 0, + 8, + 0 + ], + [ + 7, + 2, + 0, + 8, + 9, + 0, + 0, + 6, + 1 + ], + [ + 0, + 8, + 0, + 0, + 6, + 0, + 0, + 2, + 0 + ], + [ + 8, + 9, + 7, + 6, + 5, + 1, + 2, + 3, + 4 + ], + [ + 6, + 5, + 2, + 7, + 4, + 3, + 0, + 9, + 0 + ], + [ + 3, + 4, + 1, + 2, + 8, + 9, + 7, + 5, + 6 + ] + ], + "solution": [ + [ + 5, + 1, + 8, + 4, + 3, + 6, + 9, + 7, + 2 + ], + [ + 2, + 3, + 4, + 9, + 7, + 8, + 6, + 1, + 5 + ], + [ + 9, + 7, + 6, + 5, + 1, + 2, + 8, + 4, + 3 + ], + [ + 1, + 6, + 5, + 3, + 2, + 7, + 4, + 8, + 9 + ], + [ + 7, + 2, + 3, + 8, + 9, + 4, + 5, + 6, + 1 + ], + [ + 4, + 8, + 9, + 1, + 6, + 5, + 3, + 2, + 7 + ], + [ + 8, + 9, + 7, + 6, + 5, + 1, + 2, + 3, + 4 + ], + [ + 6, + 5, + 2, + 7, + 4, + 3, + 1, + 9, + 8 + ], + [ + 3, + 4, + 1, + 2, + 8, + 9, + 7, + 5, + 6 + ] + ] + }, + { + "id": 9, + "board": [ + [ + 6, + 5, + 2, + 7, + 0, + 1, + 4, + 9, + 3 + ], + [ + 7, + 3, + 1, + 4, + 6, + 0, + 8, + 5, + 2 + ], + [ + 0, + 4, + 9, + 5, + 2, + 0, + 0, + 1, + 7 + ], + [ + 0, + 8, + 0, + 9, + 1, + 2, + 7, + 6, + 5 + ], + [ + 1, + 2, + 7, + 6, + 5, + 4, + 9, + 3, + 8 + ], + [ + 5, + 9, + 6, + 0, + 3, + 7, + 0, + 2, + 4 + ], + [ + 0, + 1, + 0, + 3, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 6, + 5, + 1, + 7, + 8, + 3, + 4, + 9 + ], + [ + 0, + 7, + 0, + 2, + 0, + 6, + 5, + 8, + 1 + ] + ], + "solution": [ + [ + 6, + 5, + 2, + 7, + 8, + 1, + 4, + 9, + 3 + ], + [ + 7, + 3, + 1, + 4, + 6, + 9, + 8, + 5, + 2 + ], + [ + 8, + 4, + 9, + 5, + 2, + 3, + 6, + 1, + 7 + ], + [ + 3, + 8, + 4, + 9, + 1, + 2, + 7, + 6, + 5 + ], + [ + 1, + 2, + 7, + 6, + 5, + 4, + 9, + 3, + 8 + ], + [ + 5, + 9, + 6, + 8, + 3, + 7, + 1, + 2, + 4 + ], + [ + 4, + 1, + 8, + 3, + 9, + 5, + 2, + 7, + 6 + ], + [ + 2, + 6, + 5, + 1, + 7, + 8, + 3, + 4, + 9 + ], + [ + 9, + 7, + 3, + 2, + 4, + 6, + 5, + 8, + 1 + ] + ] + }, + { + "id": 10, + "board": [ + [ + 0, + 6, + 8, + 3, + 9, + 4, + 7, + 5, + 2 + ], + [ + 2, + 3, + 5, + 8, + 6, + 7, + 1, + 4, + 9 + ], + [ + 7, + 4, + 9, + 1, + 5, + 2, + 8, + 3, + 6 + ], + [ + 9, + 2, + 6, + 0, + 4, + 5, + 3, + 0, + 0 + ], + [ + 0, + 0, + 7, + 2, + 8, + 0, + 0, + 9, + 5 + ], + [ + 5, + 8, + 0, + 9, + 3, + 1, + 6, + 2, + 0 + ], + [ + 6, + 5, + 2, + 0, + 1, + 8, + 9, + 0, + 0 + ], + [ + 8, + 9, + 1, + 5, + 0, + 3, + 2, + 0, + 4 + ], + [ + 4, + 0, + 3, + 6, + 2, + 0, + 5, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 6, + 8, + 3, + 9, + 4, + 7, + 5, + 2 + ], + [ + 2, + 3, + 5, + 8, + 6, + 7, + 1, + 4, + 9 + ], + [ + 7, + 4, + 9, + 1, + 5, + 2, + 8, + 3, + 6 + ], + [ + 9, + 2, + 6, + 7, + 4, + 5, + 3, + 1, + 8 + ], + [ + 3, + 1, + 7, + 2, + 8, + 6, + 4, + 9, + 5 + ], + [ + 5, + 8, + 4, + 9, + 3, + 1, + 6, + 2, + 7 + ], + [ + 6, + 5, + 2, + 4, + 1, + 8, + 9, + 7, + 3 + ], + [ + 8, + 9, + 1, + 5, + 7, + 3, + 2, + 6, + 4 + ], + [ + 4, + 7, + 3, + 6, + 2, + 9, + 5, + 8, + 1 + ] + ] + }, + { + "id": 11, + "board": [ + [ + 1, + 0, + 8, + 5, + 0, + 0, + 0, + 9, + 3 + ], + [ + 0, + 7, + 9, + 8, + 3, + 1, + 6, + 4, + 2 + ], + [ + 2, + 3, + 6, + 4, + 0, + 7, + 5, + 0, + 0 + ], + [ + 9, + 6, + 2, + 1, + 8, + 3, + 4, + 5, + 7 + ], + [ + 0, + 5, + 0, + 2, + 4, + 9, + 8, + 6, + 0 + ], + [ + 4, + 8, + 1, + 7, + 5, + 6, + 2, + 3, + 9 + ], + [ + 0, + 9, + 5, + 3, + 0, + 4, + 1, + 7, + 6 + ], + [ + 7, + 2, + 3, + 6, + 1, + 5, + 9, + 8, + 0 + ], + [ + 6, + 0, + 4, + 0, + 0, + 0, + 0, + 2, + 5 + ] + ], + "solution": [ + [ + 1, + 4, + 8, + 5, + 6, + 2, + 7, + 9, + 3 + ], + [ + 5, + 7, + 9, + 8, + 3, + 1, + 6, + 4, + 2 + ], + [ + 2, + 3, + 6, + 4, + 9, + 7, + 5, + 1, + 8 + ], + [ + 9, + 6, + 2, + 1, + 8, + 3, + 4, + 5, + 7 + ], + [ + 3, + 5, + 7, + 2, + 4, + 9, + 8, + 6, + 1 + ], + [ + 4, + 8, + 1, + 7, + 5, + 6, + 2, + 3, + 9 + ], + [ + 8, + 9, + 5, + 3, + 2, + 4, + 1, + 7, + 6 + ], + [ + 7, + 2, + 3, + 6, + 1, + 5, + 9, + 8, + 4 + ], + [ + 6, + 1, + 4, + 9, + 7, + 8, + 3, + 2, + 5 + ] + ] + }, + { + "id": 12, + "board": [ + [ + 7, + 0, + 4, + 6, + 3, + 5, + 8, + 9, + 1 + ], + [ + 6, + 3, + 9, + 7, + 0, + 0, + 4, + 5, + 2 + ], + [ + 0, + 5, + 8, + 2, + 4, + 9, + 7, + 6, + 3 + ], + [ + 8, + 4, + 1, + 9, + 5, + 0, + 0, + 3, + 7 + ], + [ + 9, + 7, + 5, + 3, + 2, + 4, + 6, + 1, + 8 + ], + [ + 3, + 6, + 2, + 0, + 7, + 0, + 9, + 4, + 5 + ], + [ + 4, + 8, + 3, + 5, + 6, + 7, + 1, + 2, + 9 + ], + [ + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 7, + 4 + ], + [ + 0, + 0, + 7, + 4, + 0, + 0, + 0, + 8, + 6 + ] + ], + "solution": [ + [ + 7, + 2, + 4, + 6, + 3, + 5, + 8, + 9, + 1 + ], + [ + 6, + 3, + 9, + 7, + 1, + 8, + 4, + 5, + 2 + ], + [ + 1, + 5, + 8, + 2, + 4, + 9, + 7, + 6, + 3 + ], + [ + 8, + 4, + 1, + 9, + 5, + 6, + 2, + 3, + 7 + ], + [ + 9, + 7, + 5, + 3, + 2, + 4, + 6, + 1, + 8 + ], + [ + 3, + 6, + 2, + 8, + 7, + 1, + 9, + 4, + 5 + ], + [ + 4, + 8, + 3, + 5, + 6, + 7, + 1, + 2, + 9 + ], + [ + 2, + 9, + 6, + 1, + 8, + 3, + 5, + 7, + 4 + ], + [ + 5, + 1, + 7, + 4, + 9, + 2, + 3, + 8, + 6 + ] + ] + }, + { + "id": 13, + "board": [ + [ + 0, + 9, + 8, + 0, + 3, + 5, + 0, + 2, + 4 + ], + [ + 0, + 3, + 2, + 8, + 4, + 0, + 9, + 5, + 0 + ], + [ + 0, + 4, + 5, + 0, + 0, + 2, + 0, + 8, + 0 + ], + [ + 0, + 2, + 6, + 0, + 5, + 0, + 0, + 3, + 9 + ], + [ + 3, + 1, + 9, + 2, + 6, + 4, + 8, + 7, + 5 + ], + [ + 5, + 7, + 4, + 3, + 8, + 9, + 1, + 6, + 2 + ], + [ + 4, + 5, + 3, + 0, + 0, + 6, + 2, + 1, + 8 + ], + [ + 2, + 6, + 7, + 4, + 1, + 8, + 5, + 9, + 3 + ], + [ + 9, + 8, + 1, + 5, + 2, + 3, + 0, + 4, + 0 + ] + ], + "solution": [ + [ + 1, + 9, + 8, + 7, + 3, + 5, + 6, + 2, + 4 + ], + [ + 6, + 3, + 2, + 8, + 4, + 1, + 9, + 5, + 7 + ], + [ + 7, + 4, + 5, + 6, + 9, + 2, + 3, + 8, + 1 + ], + [ + 8, + 2, + 6, + 1, + 5, + 7, + 4, + 3, + 9 + ], + [ + 3, + 1, + 9, + 2, + 6, + 4, + 8, + 7, + 5 + ], + [ + 5, + 7, + 4, + 3, + 8, + 9, + 1, + 6, + 2 + ], + [ + 4, + 5, + 3, + 9, + 7, + 6, + 2, + 1, + 8 + ], + [ + 2, + 6, + 7, + 4, + 1, + 8, + 5, + 9, + 3 + ], + [ + 9, + 8, + 1, + 5, + 2, + 3, + 7, + 4, + 6 + ] + ] + }, + { + "id": 14, + "board": [ + [ + 9, + 3, + 5, + 0, + 2, + 0, + 0, + 6, + 0 + ], + [ + 1, + 7, + 0, + 3, + 9, + 6, + 2, + 8, + 5 + ], + [ + 0, + 0, + 6, + 0, + 4, + 5, + 0, + 9, + 0 + ], + [ + 3, + 5, + 2, + 0, + 0, + 4, + 0, + 1, + 8 + ], + [ + 0, + 9, + 8, + 6, + 1, + 2, + 7, + 5, + 0 + ], + [ + 7, + 6, + 1, + 8, + 0, + 3, + 9, + 4, + 2 + ], + [ + 0, + 1, + 7, + 0, + 8, + 9, + 5, + 3, + 4 + ], + [ + 2, + 4, + 3, + 5, + 6, + 1, + 8, + 7, + 9 + ], + [ + 5, + 8, + 0, + 4, + 3, + 7, + 1, + 2, + 6 + ] + ], + "solution": [ + [ + 9, + 3, + 5, + 1, + 2, + 8, + 4, + 6, + 7 + ], + [ + 1, + 7, + 4, + 3, + 9, + 6, + 2, + 8, + 5 + ], + [ + 8, + 2, + 6, + 7, + 4, + 5, + 3, + 9, + 1 + ], + [ + 3, + 5, + 2, + 9, + 7, + 4, + 6, + 1, + 8 + ], + [ + 4, + 9, + 8, + 6, + 1, + 2, + 7, + 5, + 3 + ], + [ + 7, + 6, + 1, + 8, + 5, + 3, + 9, + 4, + 2 + ], + [ + 6, + 1, + 7, + 2, + 8, + 9, + 5, + 3, + 4 + ], + [ + 2, + 4, + 3, + 5, + 6, + 1, + 8, + 7, + 9 + ], + [ + 5, + 8, + 9, + 4, + 3, + 7, + 1, + 2, + 6 + ] + ] + }, + { + "id": 15, + "board": [ + [ + 0, + 7, + 9, + 6, + 0, + 1, + 4, + 0, + 2 + ], + [ + 0, + 6, + 8, + 0, + 0, + 4, + 7, + 9, + 1 + ], + [ + 0, + 4, + 0, + 0, + 0, + 7, + 0, + 0, + 0 + ], + [ + 8, + 5, + 1, + 4, + 6, + 9, + 2, + 3, + 7 + ], + [ + 4, + 9, + 7, + 3, + 1, + 2, + 5, + 6, + 8 + ], + [ + 6, + 2, + 0, + 5, + 7, + 8, + 1, + 4, + 9 + ], + [ + 0, + 8, + 5, + 1, + 9, + 3, + 6, + 7, + 4 + ], + [ + 7, + 3, + 4, + 8, + 2, + 6, + 9, + 1, + 5 + ], + [ + 9, + 1, + 6, + 7, + 0, + 0, + 0, + 0, + 3 + ] + ], + "solution": [ + [ + 3, + 7, + 9, + 6, + 5, + 1, + 4, + 8, + 2 + ], + [ + 5, + 6, + 8, + 2, + 3, + 4, + 7, + 9, + 1 + ], + [ + 1, + 4, + 2, + 9, + 8, + 7, + 3, + 5, + 6 + ], + [ + 8, + 5, + 1, + 4, + 6, + 9, + 2, + 3, + 7 + ], + [ + 4, + 9, + 7, + 3, + 1, + 2, + 5, + 6, + 8 + ], + [ + 6, + 2, + 3, + 5, + 7, + 8, + 1, + 4, + 9 + ], + [ + 2, + 8, + 5, + 1, + 9, + 3, + 6, + 7, + 4 + ], + [ + 7, + 3, + 4, + 8, + 2, + 6, + 9, + 1, + 5 + ], + [ + 9, + 1, + 6, + 7, + 4, + 5, + 8, + 2, + 3 + ] + ] + }, + { + "id": 16, + "board": [ + [ + 0, + 0, + 0, + 1, + 9, + 8, + 5, + 7, + 6 + ], + [ + 8, + 0, + 7, + 4, + 6, + 5, + 3, + 2, + 1 + ], + [ + 0, + 0, + 0, + 3, + 7, + 2, + 9, + 8, + 4 + ], + [ + 0, + 5, + 6, + 2, + 8, + 4, + 7, + 1, + 0 + ], + [ + 7, + 0, + 0, + 9, + 5, + 3, + 6, + 4, + 8 + ], + [ + 0, + 8, + 0, + 7, + 1, + 6, + 2, + 5, + 0 + ], + [ + 0, + 0, + 0, + 8, + 4, + 7, + 1, + 9, + 5 + ], + [ + 0, + 4, + 0, + 6, + 2, + 1, + 8, + 3, + 7 + ], + [ + 1, + 7, + 8, + 5, + 3, + 9, + 4, + 6, + 2 + ] + ], + "solution": [ + [ + 2, + 3, + 4, + 1, + 9, + 8, + 5, + 7, + 6 + ], + [ + 8, + 9, + 7, + 4, + 6, + 5, + 3, + 2, + 1 + ], + [ + 5, + 6, + 1, + 3, + 7, + 2, + 9, + 8, + 4 + ], + [ + 3, + 5, + 6, + 2, + 8, + 4, + 7, + 1, + 9 + ], + [ + 7, + 1, + 2, + 9, + 5, + 3, + 6, + 4, + 8 + ], + [ + 4, + 8, + 9, + 7, + 1, + 6, + 2, + 5, + 3 + ], + [ + 6, + 2, + 3, + 8, + 4, + 7, + 1, + 9, + 5 + ], + [ + 9, + 4, + 5, + 6, + 2, + 1, + 8, + 3, + 7 + ], + [ + 1, + 7, + 8, + 5, + 3, + 9, + 4, + 6, + 2 + ] + ] + }, + { + "id": 17, + "board": [ + [ + 0, + 4, + 0, + 0, + 5, + 0, + 9, + 6, + 0 + ], + [ + 0, + 0, + 0, + 6, + 8, + 0, + 5, + 4, + 0 + ], + [ + 6, + 1, + 5, + 4, + 7, + 9, + 3, + 8, + 2 + ], + [ + 1, + 2, + 9, + 3, + 6, + 7, + 4, + 5, + 0 + ], + [ + 5, + 3, + 4, + 1, + 2, + 8, + 6, + 7, + 9 + ], + [ + 8, + 7, + 6, + 9, + 4, + 5, + 0, + 2, + 3 + ], + [ + 9, + 8, + 7, + 5, + 1, + 0, + 2, + 3, + 4 + ], + [ + 0, + 5, + 0, + 0, + 9, + 4, + 0, + 1, + 6 + ], + [ + 4, + 6, + 1, + 0, + 3, + 2, + 0, + 9, + 5 + ] + ], + "solution": [ + [ + 3, + 4, + 8, + 2, + 5, + 1, + 9, + 6, + 7 + ], + [ + 7, + 9, + 2, + 6, + 8, + 3, + 5, + 4, + 1 + ], + [ + 6, + 1, + 5, + 4, + 7, + 9, + 3, + 8, + 2 + ], + [ + 1, + 2, + 9, + 3, + 6, + 7, + 4, + 5, + 8 + ], + [ + 5, + 3, + 4, + 1, + 2, + 8, + 6, + 7, + 9 + ], + [ + 8, + 7, + 6, + 9, + 4, + 5, + 1, + 2, + 3 + ], + [ + 9, + 8, + 7, + 5, + 1, + 6, + 2, + 3, + 4 + ], + [ + 2, + 5, + 3, + 7, + 9, + 4, + 8, + 1, + 6 + ], + [ + 4, + 6, + 1, + 8, + 3, + 2, + 7, + 9, + 5 + ] + ] + }, + { + "id": 18, + "board": [ + [ + 4, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 8 + ], + [ + 8, + 0, + 6, + 4, + 0, + 0, + 0, + 3, + 9 + ], + [ + 3, + 0, + 0, + 0, + 0, + 8, + 0, + 1, + 4 + ], + [ + 6, + 3, + 1, + 0, + 0, + 4, + 8, + 9, + 2 + ], + [ + 2, + 4, + 7, + 9, + 8, + 3, + 1, + 5, + 6 + ], + [ + 5, + 8, + 9, + 1, + 2, + 6, + 4, + 7, + 3 + ], + [ + 7, + 6, + 4, + 2, + 1, + 9, + 3, + 8, + 5 + ], + [ + 9, + 5, + 3, + 8, + 4, + 7, + 0, + 0, + 1 + ], + [ + 1, + 2, + 8, + 6, + 3, + 5, + 9, + 4, + 7 + ] + ], + "solution": [ + [ + 4, + 7, + 2, + 3, + 9, + 1, + 5, + 6, + 8 + ], + [ + 8, + 1, + 6, + 4, + 5, + 2, + 7, + 3, + 9 + ], + [ + 3, + 9, + 5, + 7, + 6, + 8, + 2, + 1, + 4 + ], + [ + 6, + 3, + 1, + 5, + 7, + 4, + 8, + 9, + 2 + ], + [ + 2, + 4, + 7, + 9, + 8, + 3, + 1, + 5, + 6 + ], + [ + 5, + 8, + 9, + 1, + 2, + 6, + 4, + 7, + 3 + ], + [ + 7, + 6, + 4, + 2, + 1, + 9, + 3, + 8, + 5 + ], + [ + 9, + 5, + 3, + 8, + 4, + 7, + 6, + 2, + 1 + ], + [ + 1, + 2, + 8, + 6, + 3, + 5, + 9, + 4, + 7 + ] + ] + }, + { + "id": 19, + "board": [ + [ + 4, + 0, + 0, + 7, + 3, + 6, + 0, + 1, + 9 + ], + [ + 0, + 3, + 0, + 2, + 8, + 1, + 7, + 4, + 0 + ], + [ + 7, + 0, + 2, + 4, + 5, + 9, + 6, + 0, + 8 + ], + [ + 5, + 6, + 7, + 3, + 1, + 8, + 4, + 9, + 2 + ], + [ + 8, + 4, + 0, + 5, + 9, + 2, + 3, + 0, + 6 + ], + [ + 2, + 9, + 3, + 6, + 0, + 4, + 5, + 8, + 1 + ], + [ + 6, + 0, + 8, + 9, + 4, + 7, + 0, + 5, + 3 + ], + [ + 3, + 7, + 0, + 0, + 0, + 5, + 8, + 6, + 4 + ], + [ + 1, + 0, + 0, + 8, + 6, + 0, + 9, + 2, + 7 + ] + ], + "solution": [ + [ + 4, + 8, + 5, + 7, + 3, + 6, + 2, + 1, + 9 + ], + [ + 9, + 3, + 6, + 2, + 8, + 1, + 7, + 4, + 5 + ], + [ + 7, + 1, + 2, + 4, + 5, + 9, + 6, + 3, + 8 + ], + [ + 5, + 6, + 7, + 3, + 1, + 8, + 4, + 9, + 2 + ], + [ + 8, + 4, + 1, + 5, + 9, + 2, + 3, + 7, + 6 + ], + [ + 2, + 9, + 3, + 6, + 7, + 4, + 5, + 8, + 1 + ], + [ + 6, + 2, + 8, + 9, + 4, + 7, + 1, + 5, + 3 + ], + [ + 3, + 7, + 9, + 1, + 2, + 5, + 8, + 6, + 4 + ], + [ + 1, + 5, + 4, + 8, + 6, + 3, + 9, + 2, + 7 + ] + ] + }, + { + "id": 20, + "board": [ + [ + 7, + 9, + 5, + 2, + 0, + 6, + 0, + 3, + 8 + ], + [ + 3, + 2, + 8, + 9, + 0, + 1, + 6, + 7, + 4 + ], + [ + 1, + 4, + 6, + 7, + 0, + 3, + 0, + 2, + 9 + ], + [ + 9, + 3, + 1, + 5, + 0, + 8, + 0, + 6, + 7 + ], + [ + 8, + 7, + 0, + 4, + 6, + 9, + 3, + 5, + 1 + ], + [ + 0, + 0, + 4, + 1, + 3, + 7, + 8, + 9, + 2 + ], + [ + 0, + 8, + 7, + 6, + 1, + 5, + 9, + 0, + 3 + ], + [ + 0, + 0, + 3, + 8, + 9, + 2, + 7, + 1, + 0 + ], + [ + 0, + 0, + 0, + 3, + 7, + 4, + 2, + 8, + 0 + ] + ], + "solution": [ + [ + 7, + 9, + 5, + 2, + 4, + 6, + 1, + 3, + 8 + ], + [ + 3, + 2, + 8, + 9, + 5, + 1, + 6, + 7, + 4 + ], + [ + 1, + 4, + 6, + 7, + 8, + 3, + 5, + 2, + 9 + ], + [ + 9, + 3, + 1, + 5, + 2, + 8, + 4, + 6, + 7 + ], + [ + 8, + 7, + 2, + 4, + 6, + 9, + 3, + 5, + 1 + ], + [ + 5, + 6, + 4, + 1, + 3, + 7, + 8, + 9, + 2 + ], + [ + 2, + 8, + 7, + 6, + 1, + 5, + 9, + 4, + 3 + ], + [ + 4, + 5, + 3, + 8, + 9, + 2, + 7, + 1, + 6 + ], + [ + 6, + 1, + 9, + 3, + 7, + 4, + 2, + 8, + 5 + ] + ] + }, + { + "id": 21, + "board": [ + [ + 1, + 5, + 4, + 9, + 2, + 3, + 8, + 0, + 7 + ], + [ + 0, + 0, + 6, + 7, + 1, + 4, + 5, + 3, + 2 + ], + [ + 2, + 7, + 3, + 0, + 8, + 0, + 9, + 4, + 1 + ], + [ + 6, + 3, + 0, + 0, + 5, + 0, + 7, + 9, + 4 + ], + [ + 5, + 4, + 9, + 3, + 6, + 7, + 2, + 1, + 8 + ], + [ + 7, + 1, + 0, + 0, + 4, + 9, + 6, + 5, + 3 + ], + [ + 0, + 0, + 5, + 4, + 3, + 2, + 1, + 7, + 6 + ], + [ + 0, + 2, + 0, + 0, + 7, + 0, + 4, + 8, + 9 + ], + [ + 4, + 6, + 0, + 0, + 9, + 0, + 3, + 2, + 5 + ] + ], + "solution": [ + [ + 1, + 5, + 4, + 9, + 2, + 3, + 8, + 6, + 7 + ], + [ + 8, + 9, + 6, + 7, + 1, + 4, + 5, + 3, + 2 + ], + [ + 2, + 7, + 3, + 5, + 8, + 6, + 9, + 4, + 1 + ], + [ + 6, + 3, + 2, + 1, + 5, + 8, + 7, + 9, + 4 + ], + [ + 5, + 4, + 9, + 3, + 6, + 7, + 2, + 1, + 8 + ], + [ + 7, + 1, + 8, + 2, + 4, + 9, + 6, + 5, + 3 + ], + [ + 9, + 8, + 5, + 4, + 3, + 2, + 1, + 7, + 6 + ], + [ + 3, + 2, + 1, + 6, + 7, + 5, + 4, + 8, + 9 + ], + [ + 4, + 6, + 7, + 8, + 9, + 1, + 3, + 2, + 5 + ] + ] + }, + { + "id": 22, + "board": [ + [ + 9, + 2, + 8, + 0, + 5, + 4, + 0, + 0, + 3 + ], + [ + 5, + 6, + 4, + 2, + 1, + 3, + 7, + 9, + 8 + ], + [ + 7, + 1, + 3, + 9, + 6, + 8, + 5, + 2, + 4 + ], + [ + 1, + 8, + 2, + 4, + 0, + 9, + 0, + 0, + 0 + ], + [ + 6, + 0, + 7, + 5, + 8, + 1, + 0, + 4, + 9 + ], + [ + 4, + 9, + 5, + 6, + 3, + 2, + 8, + 7, + 1 + ], + [ + 3, + 5, + 0, + 8, + 9, + 7, + 4, + 0, + 2 + ], + [ + 8, + 4, + 0, + 0, + 2, + 0, + 9, + 0, + 7 + ], + [ + 2, + 7, + 9, + 0, + 4, + 0, + 0, + 8, + 0 + ] + ], + "solution": [ + [ + 9, + 2, + 8, + 7, + 5, + 4, + 1, + 6, + 3 + ], + [ + 5, + 6, + 4, + 2, + 1, + 3, + 7, + 9, + 8 + ], + [ + 7, + 1, + 3, + 9, + 6, + 8, + 5, + 2, + 4 + ], + [ + 1, + 8, + 2, + 4, + 7, + 9, + 6, + 3, + 5 + ], + [ + 6, + 3, + 7, + 5, + 8, + 1, + 2, + 4, + 9 + ], + [ + 4, + 9, + 5, + 6, + 3, + 2, + 8, + 7, + 1 + ], + [ + 3, + 5, + 6, + 8, + 9, + 7, + 4, + 1, + 2 + ], + [ + 8, + 4, + 1, + 3, + 2, + 6, + 9, + 5, + 7 + ], + [ + 2, + 7, + 9, + 1, + 4, + 5, + 3, + 8, + 6 + ] + ] + }, + { + "id": 23, + "board": [ + [ + 1, + 6, + 3, + 5, + 0, + 9, + 7, + 4, + 2 + ], + [ + 4, + 7, + 0, + 3, + 0, + 0, + 9, + 6, + 8 + ], + [ + 0, + 0, + 9, + 7, + 4, + 6, + 3, + 5, + 1 + ], + [ + 3, + 0, + 7, + 4, + 0, + 0, + 5, + 0, + 0 + ], + [ + 0, + 0, + 4, + 0, + 7, + 5, + 1, + 3, + 0 + ], + [ + 0, + 5, + 1, + 0, + 9, + 3, + 2, + 7, + 4 + ], + [ + 7, + 1, + 6, + 9, + 3, + 8, + 4, + 2, + 0 + ], + [ + 5, + 0, + 2, + 1, + 6, + 7, + 8, + 9, + 3 + ], + [ + 9, + 3, + 8, + 2, + 5, + 4, + 6, + 1, + 7 + ] + ], + "solution": [ + [ + 1, + 6, + 3, + 5, + 8, + 9, + 7, + 4, + 2 + ], + [ + 4, + 7, + 5, + 3, + 1, + 2, + 9, + 6, + 8 + ], + [ + 2, + 8, + 9, + 7, + 4, + 6, + 3, + 5, + 1 + ], + [ + 3, + 9, + 7, + 4, + 2, + 1, + 5, + 8, + 6 + ], + [ + 6, + 2, + 4, + 8, + 7, + 5, + 1, + 3, + 9 + ], + [ + 8, + 5, + 1, + 6, + 9, + 3, + 2, + 7, + 4 + ], + [ + 7, + 1, + 6, + 9, + 3, + 8, + 4, + 2, + 5 + ], + [ + 5, + 4, + 2, + 1, + 6, + 7, + 8, + 9, + 3 + ], + [ + 9, + 3, + 8, + 2, + 5, + 4, + 6, + 1, + 7 + ] + ] + }, + { + "id": 24, + "board": [ + [ + 3, + 6, + 0, + 0, + 9, + 4, + 0, + 0, + 5 + ], + [ + 4, + 9, + 0, + 0, + 5, + 0, + 0, + 0, + 0 + ], + [ + 5, + 1, + 2, + 6, + 8, + 3, + 0, + 7, + 4 + ], + [ + 1, + 0, + 0, + 9, + 7, + 0, + 2, + 0, + 6 + ], + [ + 7, + 2, + 0, + 3, + 1, + 5, + 8, + 4, + 9 + ], + [ + 8, + 0, + 9, + 4, + 2, + 6, + 3, + 1, + 7 + ], + [ + 6, + 8, + 1, + 5, + 3, + 7, + 4, + 9, + 2 + ], + [ + 9, + 3, + 5, + 8, + 4, + 2, + 7, + 6, + 1 + ], + [ + 2, + 7, + 4, + 1, + 6, + 9, + 5, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 6, + 7, + 2, + 9, + 4, + 1, + 8, + 5 + ], + [ + 4, + 9, + 8, + 7, + 5, + 1, + 6, + 2, + 3 + ], + [ + 5, + 1, + 2, + 6, + 8, + 3, + 9, + 7, + 4 + ], + [ + 1, + 4, + 3, + 9, + 7, + 8, + 2, + 5, + 6 + ], + [ + 7, + 2, + 6, + 3, + 1, + 5, + 8, + 4, + 9 + ], + [ + 8, + 5, + 9, + 4, + 2, + 6, + 3, + 1, + 7 + ], + [ + 6, + 8, + 1, + 5, + 3, + 7, + 4, + 9, + 2 + ], + [ + 9, + 3, + 5, + 8, + 4, + 2, + 7, + 6, + 1 + ], + [ + 2, + 7, + 4, + 1, + 6, + 9, + 5, + 3, + 8 + ] + ] + }, + { + "id": 25, + "board": [ + [ + 8, + 2, + 5, + 6, + 1, + 9, + 4, + 7, + 3 + ], + [ + 9, + 4, + 1, + 7, + 3, + 8, + 6, + 5, + 2 + ], + [ + 0, + 0, + 3, + 4, + 2, + 5, + 1, + 9, + 8 + ], + [ + 4, + 8, + 2, + 5, + 9, + 1, + 3, + 6, + 7 + ], + [ + 5, + 0, + 6, + 0, + 7, + 2, + 9, + 4, + 0 + ], + [ + 1, + 9, + 7, + 3, + 6, + 4, + 2, + 8, + 5 + ], + [ + 2, + 5, + 8, + 9, + 4, + 3, + 7, + 1, + 6 + ], + [ + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ] + ], + "solution": [ + [ + 8, + 2, + 5, + 6, + 1, + 9, + 4, + 7, + 3 + ], + [ + 9, + 4, + 1, + 7, + 3, + 8, + 6, + 5, + 2 + ], + [ + 6, + 7, + 3, + 4, + 2, + 5, + 1, + 9, + 8 + ], + [ + 4, + 8, + 2, + 5, + 9, + 1, + 3, + 6, + 7 + ], + [ + 5, + 3, + 6, + 8, + 7, + 2, + 9, + 4, + 1 + ], + [ + 1, + 9, + 7, + 3, + 6, + 4, + 2, + 8, + 5 + ], + [ + 2, + 5, + 8, + 9, + 4, + 3, + 7, + 1, + 6 + ], + [ + 7, + 1, + 4, + 2, + 5, + 6, + 8, + 3, + 9 + ], + [ + 3, + 6, + 9, + 1, + 8, + 7, + 5, + 2, + 4 + ] + ] + }, + { + "id": 26, + "board": [ + [ + 3, + 8, + 7, + 5, + 2, + 6, + 0, + 9, + 4 + ], + [ + 5, + 4, + 9, + 3, + 1, + 8, + 0, + 6, + 2 + ], + [ + 0, + 2, + 6, + 4, + 9, + 0, + 3, + 5, + 8 + ], + [ + 8, + 0, + 5, + 0, + 7, + 3, + 4, + 0, + 0 + ], + [ + 6, + 0, + 1, + 0, + 4, + 9, + 8, + 3, + 0 + ], + [ + 0, + 3, + 4, + 8, + 6, + 5, + 0, + 0, + 1 + ], + [ + 4, + 6, + 0, + 9, + 5, + 1, + 2, + 8, + 0 + ], + [ + 7, + 0, + 0, + 6, + 0, + 2, + 5, + 4, + 9 + ], + [ + 9, + 5, + 2, + 7, + 8, + 4, + 6, + 1, + 3 + ] + ], + "solution": [ + [ + 3, + 8, + 7, + 5, + 2, + 6, + 1, + 9, + 4 + ], + [ + 5, + 4, + 9, + 3, + 1, + 8, + 7, + 6, + 2 + ], + [ + 1, + 2, + 6, + 4, + 9, + 7, + 3, + 5, + 8 + ], + [ + 8, + 9, + 5, + 1, + 7, + 3, + 4, + 2, + 6 + ], + [ + 6, + 7, + 1, + 2, + 4, + 9, + 8, + 3, + 5 + ], + [ + 2, + 3, + 4, + 8, + 6, + 5, + 9, + 7, + 1 + ], + [ + 4, + 6, + 3, + 9, + 5, + 1, + 2, + 8, + 7 + ], + [ + 7, + 1, + 8, + 6, + 3, + 2, + 5, + 4, + 9 + ], + [ + 9, + 5, + 2, + 7, + 8, + 4, + 6, + 1, + 3 + ] + ] + }, + { + "id": 27, + "board": [ + [ + 9, + 2, + 3, + 7, + 5, + 0, + 1, + 4, + 0 + ], + [ + 0, + 4, + 5, + 9, + 2, + 1, + 0, + 3, + 7 + ], + [ + 1, + 7, + 6, + 3, + 8, + 4, + 0, + 0, + 0 + ], + [ + 0, + 9, + 4, + 0, + 7, + 5, + 2, + 1, + 3 + ], + [ + 5, + 8, + 2, + 1, + 3, + 0, + 4, + 7, + 6 + ], + [ + 7, + 3, + 1, + 4, + 0, + 0, + 8, + 9, + 5 + ], + [ + 2, + 1, + 7, + 0, + 4, + 3, + 5, + 8, + 9 + ], + [ + 3, + 0, + 0, + 0, + 1, + 8, + 7, + 0, + 4 + ], + [ + 4, + 6, + 0, + 5, + 9, + 7, + 3, + 0, + 1 + ] + ], + "solution": [ + [ + 9, + 2, + 3, + 7, + 5, + 6, + 1, + 4, + 8 + ], + [ + 8, + 4, + 5, + 9, + 2, + 1, + 6, + 3, + 7 + ], + [ + 1, + 7, + 6, + 3, + 8, + 4, + 9, + 5, + 2 + ], + [ + 6, + 9, + 4, + 8, + 7, + 5, + 2, + 1, + 3 + ], + [ + 5, + 8, + 2, + 1, + 3, + 9, + 4, + 7, + 6 + ], + [ + 7, + 3, + 1, + 4, + 6, + 2, + 8, + 9, + 5 + ], + [ + 2, + 1, + 7, + 6, + 4, + 3, + 5, + 8, + 9 + ], + [ + 3, + 5, + 9, + 2, + 1, + 8, + 7, + 6, + 4 + ], + [ + 4, + 6, + 8, + 5, + 9, + 7, + 3, + 2, + 1 + ] + ] + }, + { + "id": 28, + "board": [ + [ + 0, + 0, + 0, + 4, + 6, + 7, + 2, + 9, + 5 + ], + [ + 5, + 9, + 0, + 2, + 8, + 3, + 6, + 1, + 7 + ], + [ + 6, + 2, + 7, + 1, + 9, + 5, + 8, + 4, + 3 + ], + [ + 4, + 7, + 0, + 8, + 2, + 1, + 0, + 0, + 6 + ], + [ + 0, + 5, + 0, + 6, + 7, + 0, + 9, + 2, + 0 + ], + [ + 2, + 0, + 0, + 3, + 5, + 9, + 4, + 7, + 0 + ], + [ + 7, + 6, + 2, + 9, + 0, + 8, + 0, + 0, + 4 + ], + [ + 9, + 4, + 5, + 7, + 0, + 6, + 0, + 8, + 2 + ], + [ + 1, + 3, + 8, + 5, + 4, + 2, + 7, + 6, + 9 + ] + ], + "solution": [ + [ + 3, + 8, + 1, + 4, + 6, + 7, + 2, + 9, + 5 + ], + [ + 5, + 9, + 4, + 2, + 8, + 3, + 6, + 1, + 7 + ], + [ + 6, + 2, + 7, + 1, + 9, + 5, + 8, + 4, + 3 + ], + [ + 4, + 7, + 9, + 8, + 2, + 1, + 3, + 5, + 6 + ], + [ + 8, + 5, + 3, + 6, + 7, + 4, + 9, + 2, + 1 + ], + [ + 2, + 1, + 6, + 3, + 5, + 9, + 4, + 7, + 8 + ], + [ + 7, + 6, + 2, + 9, + 1, + 8, + 5, + 3, + 4 + ], + [ + 9, + 4, + 5, + 7, + 3, + 6, + 1, + 8, + 2 + ], + [ + 1, + 3, + 8, + 5, + 4, + 2, + 7, + 6, + 9 + ] + ] + }, + { + "id": 29, + "board": [ + [ + 6, + 5, + 8, + 4, + 2, + 9, + 3, + 7, + 1 + ], + [ + 4, + 9, + 7, + 3, + 8, + 1, + 5, + 2, + 6 + ], + [ + 1, + 0, + 0, + 7, + 5, + 6, + 4, + 9, + 8 + ], + [ + 0, + 0, + 1, + 2, + 6, + 0, + 9, + 8, + 0 + ], + [ + 8, + 6, + 0, + 5, + 9, + 0, + 7, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 8, + 6, + 3, + 0 + ], + [ + 0, + 0, + 0, + 8, + 1, + 0, + 2, + 6, + 3 + ], + [ + 2, + 1, + 5, + 6, + 0, + 7, + 8, + 4, + 9 + ], + [ + 3, + 8, + 6, + 9, + 4, + 2, + 1, + 5, + 7 + ] + ], + "solution": [ + [ + 6, + 5, + 8, + 4, + 2, + 9, + 3, + 7, + 1 + ], + [ + 4, + 9, + 7, + 3, + 8, + 1, + 5, + 2, + 6 + ], + [ + 1, + 2, + 3, + 7, + 5, + 6, + 4, + 9, + 8 + ], + [ + 7, + 3, + 1, + 2, + 6, + 4, + 9, + 8, + 5 + ], + [ + 8, + 6, + 2, + 5, + 9, + 3, + 7, + 1, + 4 + ], + [ + 5, + 4, + 9, + 1, + 7, + 8, + 6, + 3, + 2 + ], + [ + 9, + 7, + 4, + 8, + 1, + 5, + 2, + 6, + 3 + ], + [ + 2, + 1, + 5, + 6, + 3, + 7, + 8, + 4, + 9 + ], + [ + 3, + 8, + 6, + 9, + 4, + 2, + 1, + 5, + 7 + ] + ] + }, + { + "id": 30, + "board": [ + [ + 8, + 0, + 0, + 4, + 2, + 6, + 5, + 3, + 1 + ], + [ + 1, + 6, + 5, + 3, + 7, + 0, + 8, + 2, + 4 + ], + [ + 0, + 3, + 0, + 8, + 0, + 0, + 7, + 9, + 6 + ], + [ + 7, + 9, + 8, + 0, + 0, + 2, + 0, + 4, + 3 + ], + [ + 4, + 2, + 3, + 6, + 8, + 7, + 0, + 1, + 5 + ], + [ + 6, + 5, + 1, + 0, + 3, + 0, + 2, + 8, + 7 + ], + [ + 5, + 4, + 7, + 2, + 9, + 3, + 1, + 0, + 8 + ], + [ + 3, + 8, + 0, + 0, + 6, + 0, + 4, + 7, + 9 + ], + [ + 0, + 0, + 6, + 7, + 4, + 8, + 3, + 5, + 2 + ] + ], + "solution": [ + [ + 8, + 7, + 9, + 4, + 2, + 6, + 5, + 3, + 1 + ], + [ + 1, + 6, + 5, + 3, + 7, + 9, + 8, + 2, + 4 + ], + [ + 2, + 3, + 4, + 8, + 1, + 5, + 7, + 9, + 6 + ], + [ + 7, + 9, + 8, + 1, + 5, + 2, + 6, + 4, + 3 + ], + [ + 4, + 2, + 3, + 6, + 8, + 7, + 9, + 1, + 5 + ], + [ + 6, + 5, + 1, + 9, + 3, + 4, + 2, + 8, + 7 + ], + [ + 5, + 4, + 7, + 2, + 9, + 3, + 1, + 6, + 8 + ], + [ + 3, + 8, + 2, + 5, + 6, + 1, + 4, + 7, + 9 + ], + [ + 9, + 1, + 6, + 7, + 4, + 8, + 3, + 5, + 2 + ] + ] + }, + { + "id": 31, + "board": [ + [ + 4, + 1, + 6, + 0, + 0, + 2, + 0, + 3, + 7 + ], + [ + 9, + 0, + 5, + 0, + 3, + 4, + 6, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 5, + 4 + ], + [ + 0, + 0, + 7, + 4, + 2, + 6, + 1, + 9, + 0 + ], + [ + 6, + 5, + 9, + 3, + 1, + 7, + 2, + 4, + 8 + ], + [ + 1, + 0, + 4, + 9, + 8, + 5, + 7, + 6, + 3 + ], + [ + 7, + 4, + 8, + 0, + 0, + 0, + 0, + 2, + 6 + ], + [ + 5, + 6, + 1, + 2, + 7, + 3, + 4, + 8, + 9 + ], + [ + 2, + 9, + 3, + 6, + 4, + 8, + 5, + 7, + 1 + ] + ], + "solution": [ + [ + 4, + 1, + 6, + 5, + 9, + 2, + 8, + 3, + 7 + ], + [ + 9, + 7, + 5, + 8, + 3, + 4, + 6, + 1, + 2 + ], + [ + 3, + 8, + 2, + 7, + 6, + 1, + 9, + 5, + 4 + ], + [ + 8, + 3, + 7, + 4, + 2, + 6, + 1, + 9, + 5 + ], + [ + 6, + 5, + 9, + 3, + 1, + 7, + 2, + 4, + 8 + ], + [ + 1, + 2, + 4, + 9, + 8, + 5, + 7, + 6, + 3 + ], + [ + 7, + 4, + 8, + 1, + 5, + 9, + 3, + 2, + 6 + ], + [ + 5, + 6, + 1, + 2, + 7, + 3, + 4, + 8, + 9 + ], + [ + 2, + 9, + 3, + 6, + 4, + 8, + 5, + 7, + 1 + ] + ] + }, + { + "id": 32, + "board": [ + [ + 5, + 8, + 9, + 6, + 1, + 0, + 2, + 0, + 0 + ], + [ + 2, + 3, + 6, + 5, + 8, + 0, + 9, + 0, + 1 + ], + [ + 4, + 7, + 1, + 2, + 3, + 9, + 5, + 0, + 0 + ], + [ + 7, + 6, + 4, + 3, + 9, + 8, + 0, + 5, + 2 + ], + [ + 8, + 9, + 2, + 1, + 4, + 5, + 0, + 0, + 0 + ], + [ + 1, + 5, + 3, + 7, + 6, + 2, + 4, + 0, + 0 + ], + [ + 9, + 2, + 7, + 8, + 5, + 6, + 3, + 1, + 4 + ], + [ + 6, + 1, + 5, + 4, + 0, + 3, + 8, + 0, + 0 + ], + [ + 3, + 4, + 8, + 9, + 0, + 1, + 0, + 0, + 5 + ] + ], + "solution": [ + [ + 5, + 8, + 9, + 6, + 1, + 4, + 2, + 3, + 7 + ], + [ + 2, + 3, + 6, + 5, + 8, + 7, + 9, + 4, + 1 + ], + [ + 4, + 7, + 1, + 2, + 3, + 9, + 5, + 8, + 6 + ], + [ + 7, + 6, + 4, + 3, + 9, + 8, + 1, + 5, + 2 + ], + [ + 8, + 9, + 2, + 1, + 4, + 5, + 6, + 7, + 3 + ], + [ + 1, + 5, + 3, + 7, + 6, + 2, + 4, + 9, + 8 + ], + [ + 9, + 2, + 7, + 8, + 5, + 6, + 3, + 1, + 4 + ], + [ + 6, + 1, + 5, + 4, + 7, + 3, + 8, + 2, + 9 + ], + [ + 3, + 4, + 8, + 9, + 2, + 1, + 7, + 6, + 5 + ] + ] + }, + { + "id": 33, + "board": [ + [ + 7, + 8, + 0, + 6, + 9, + 0, + 5, + 1, + 2 + ], + [ + 3, + 6, + 2, + 1, + 5, + 4, + 7, + 9, + 8 + ], + [ + 5, + 1, + 9, + 7, + 2, + 8, + 4, + 3, + 6 + ], + [ + 9, + 4, + 8, + 3, + 7, + 2, + 0, + 5, + 1 + ], + [ + 1, + 7, + 6, + 4, + 8, + 0, + 0, + 2, + 0 + ], + [ + 2, + 3, + 0, + 9, + 1, + 6, + 8, + 4, + 7 + ], + [ + 6, + 2, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 4, + 5, + 0, + 2, + 6, + 0, + 0, + 8, + 0 + ], + [ + 8, + 9, + 0, + 5, + 3, + 0, + 2, + 6, + 4 + ] + ], + "solution": [ + [ + 7, + 8, + 4, + 6, + 9, + 3, + 5, + 1, + 2 + ], + [ + 3, + 6, + 2, + 1, + 5, + 4, + 7, + 9, + 8 + ], + [ + 5, + 1, + 9, + 7, + 2, + 8, + 4, + 3, + 6 + ], + [ + 9, + 4, + 8, + 3, + 7, + 2, + 6, + 5, + 1 + ], + [ + 1, + 7, + 6, + 4, + 8, + 5, + 3, + 2, + 9 + ], + [ + 2, + 3, + 5, + 9, + 1, + 6, + 8, + 4, + 7 + ], + [ + 6, + 2, + 3, + 8, + 4, + 1, + 9, + 7, + 5 + ], + [ + 4, + 5, + 7, + 2, + 6, + 9, + 1, + 8, + 3 + ], + [ + 8, + 9, + 1, + 5, + 3, + 7, + 2, + 6, + 4 + ] + ] + }, + { + "id": 34, + "board": [ + [ + 8, + 5, + 0, + 0, + 4, + 0, + 1, + 0, + 0 + ], + [ + 3, + 9, + 0, + 1, + 8, + 0, + 0, + 0, + 5 + ], + [ + 1, + 4, + 2, + 0, + 5, + 7, + 0, + 6, + 0 + ], + [ + 7, + 8, + 3, + 4, + 6, + 9, + 2, + 5, + 1 + ], + [ + 6, + 2, + 5, + 7, + 1, + 3, + 0, + 9, + 0 + ], + [ + 4, + 1, + 9, + 8, + 2, + 5, + 0, + 0, + 6 + ], + [ + 5, + 6, + 1, + 2, + 7, + 8, + 0, + 0, + 0 + ], + [ + 9, + 7, + 8, + 5, + 3, + 4, + 6, + 1, + 2 + ], + [ + 2, + 3, + 4, + 6, + 9, + 1, + 5, + 8, + 7 + ] + ], + "solution": [ + [ + 8, + 5, + 6, + 3, + 4, + 2, + 1, + 7, + 9 + ], + [ + 3, + 9, + 7, + 1, + 8, + 6, + 4, + 2, + 5 + ], + [ + 1, + 4, + 2, + 9, + 5, + 7, + 3, + 6, + 8 + ], + [ + 7, + 8, + 3, + 4, + 6, + 9, + 2, + 5, + 1 + ], + [ + 6, + 2, + 5, + 7, + 1, + 3, + 8, + 9, + 4 + ], + [ + 4, + 1, + 9, + 8, + 2, + 5, + 7, + 3, + 6 + ], + [ + 5, + 6, + 1, + 2, + 7, + 8, + 9, + 4, + 3 + ], + [ + 9, + 7, + 8, + 5, + 3, + 4, + 6, + 1, + 2 + ], + [ + 2, + 3, + 4, + 6, + 9, + 1, + 5, + 8, + 7 + ] + ] + }, + { + "id": 35, + "board": [ + [ + 0, + 6, + 7, + 3, + 0, + 0, + 0, + 2, + 1 + ], + [ + 0, + 8, + 0, + 7, + 4, + 0, + 9, + 0, + 3 + ], + [ + 3, + 5, + 9, + 8, + 0, + 2, + 0, + 7, + 0 + ], + [ + 7, + 0, + 3, + 0, + 6, + 4, + 2, + 8, + 0 + ], + [ + 0, + 2, + 8, + 5, + 3, + 1, + 6, + 4, + 7 + ], + [ + 6, + 0, + 5, + 0, + 8, + 7, + 3, + 1, + 9 + ], + [ + 8, + 9, + 4, + 1, + 7, + 0, + 5, + 6, + 2 + ], + [ + 1, + 3, + 2, + 6, + 5, + 8, + 7, + 9, + 4 + ], + [ + 5, + 7, + 6, + 4, + 2, + 0, + 1, + 3, + 8 + ] + ], + "solution": [ + [ + 4, + 6, + 7, + 3, + 9, + 5, + 8, + 2, + 1 + ], + [ + 2, + 8, + 1, + 7, + 4, + 6, + 9, + 5, + 3 + ], + [ + 3, + 5, + 9, + 8, + 1, + 2, + 4, + 7, + 6 + ], + [ + 7, + 1, + 3, + 9, + 6, + 4, + 2, + 8, + 5 + ], + [ + 9, + 2, + 8, + 5, + 3, + 1, + 6, + 4, + 7 + ], + [ + 6, + 4, + 5, + 2, + 8, + 7, + 3, + 1, + 9 + ], + [ + 8, + 9, + 4, + 1, + 7, + 3, + 5, + 6, + 2 + ], + [ + 1, + 3, + 2, + 6, + 5, + 8, + 7, + 9, + 4 + ], + [ + 5, + 7, + 6, + 4, + 2, + 9, + 1, + 3, + 8 + ] + ] + }, + { + "id": 36, + "board": [ + [ + 2, + 0, + 4, + 0, + 1, + 8, + 6, + 9, + 7 + ], + [ + 7, + 0, + 5, + 6, + 4, + 9, + 0, + 0, + 0 + ], + [ + 6, + 9, + 1, + 2, + 7, + 3, + 0, + 4, + 8 + ], + [ + 3, + 7, + 8, + 1, + 9, + 6, + 4, + 5, + 2 + ], + [ + 9, + 4, + 2, + 3, + 5, + 7, + 8, + 0, + 0 + ], + [ + 5, + 1, + 6, + 0, + 0, + 4, + 3, + 7, + 9 + ], + [ + 1, + 6, + 9, + 4, + 0, + 2, + 7, + 0, + 0 + ], + [ + 0, + 2, + 0, + 9, + 0, + 5, + 1, + 0, + 0 + ], + [ + 8, + 5, + 3, + 7, + 6, + 1, + 9, + 2, + 4 + ] + ], + "solution": [ + [ + 2, + 3, + 4, + 5, + 1, + 8, + 6, + 9, + 7 + ], + [ + 7, + 8, + 5, + 6, + 4, + 9, + 2, + 1, + 3 + ], + [ + 6, + 9, + 1, + 2, + 7, + 3, + 5, + 4, + 8 + ], + [ + 3, + 7, + 8, + 1, + 9, + 6, + 4, + 5, + 2 + ], + [ + 9, + 4, + 2, + 3, + 5, + 7, + 8, + 6, + 1 + ], + [ + 5, + 1, + 6, + 8, + 2, + 4, + 3, + 7, + 9 + ], + [ + 1, + 6, + 9, + 4, + 3, + 2, + 7, + 8, + 5 + ], + [ + 4, + 2, + 7, + 9, + 8, + 5, + 1, + 3, + 6 + ], + [ + 8, + 5, + 3, + 7, + 6, + 1, + 9, + 2, + 4 + ] + ] + }, + { + "id": 37, + "board": [ + [ + 1, + 8, + 0, + 0, + 6, + 4, + 0, + 7, + 0 + ], + [ + 5, + 7, + 3, + 2, + 0, + 1, + 4, + 6, + 9 + ], + [ + 4, + 2, + 6, + 7, + 9, + 3, + 5, + 8, + 1 + ], + [ + 3, + 0, + 2, + 6, + 7, + 5, + 0, + 4, + 8 + ], + [ + 8, + 6, + 5, + 4, + 0, + 9, + 7, + 2, + 3 + ], + [ + 7, + 1, + 4, + 8, + 0, + 2, + 9, + 5, + 6 + ], + [ + 2, + 5, + 1, + 3, + 4, + 6, + 8, + 9, + 7 + ], + [ + 9, + 4, + 0, + 1, + 0, + 7, + 0, + 3, + 5 + ], + [ + 0, + 3, + 0, + 9, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 8, + 9, + 5, + 6, + 4, + 3, + 7, + 2 + ], + [ + 5, + 7, + 3, + 2, + 8, + 1, + 4, + 6, + 9 + ], + [ + 4, + 2, + 6, + 7, + 9, + 3, + 5, + 8, + 1 + ], + [ + 3, + 9, + 2, + 6, + 7, + 5, + 1, + 4, + 8 + ], + [ + 8, + 6, + 5, + 4, + 1, + 9, + 7, + 2, + 3 + ], + [ + 7, + 1, + 4, + 8, + 3, + 2, + 9, + 5, + 6 + ], + [ + 2, + 5, + 1, + 3, + 4, + 6, + 8, + 9, + 7 + ], + [ + 9, + 4, + 8, + 1, + 2, + 7, + 6, + 3, + 5 + ], + [ + 6, + 3, + 7, + 9, + 5, + 8, + 2, + 1, + 4 + ] + ] + }, + { + "id": 38, + "board": [ + [ + 5, + 3, + 8, + 0, + 0, + 0, + 7, + 6, + 2 + ], + [ + 4, + 1, + 2, + 8, + 7, + 6, + 3, + 9, + 5 + ], + [ + 9, + 7, + 6, + 5, + 2, + 3, + 4, + 0, + 8 + ], + [ + 3, + 5, + 7, + 2, + 0, + 0, + 8, + 4, + 0 + ], + [ + 8, + 4, + 1, + 0, + 3, + 5, + 2, + 7, + 0 + ], + [ + 6, + 2, + 9, + 7, + 4, + 8, + 1, + 5, + 3 + ], + [ + 0, + 9, + 5, + 0, + 8, + 0, + 6, + 3, + 0 + ], + [ + 2, + 0, + 4, + 3, + 5, + 7, + 9, + 8, + 1 + ], + [ + 0, + 8, + 3, + 0, + 0, + 0, + 5, + 2, + 0 + ] + ], + "solution": [ + [ + 5, + 3, + 8, + 4, + 1, + 9, + 7, + 6, + 2 + ], + [ + 4, + 1, + 2, + 8, + 7, + 6, + 3, + 9, + 5 + ], + [ + 9, + 7, + 6, + 5, + 2, + 3, + 4, + 1, + 8 + ], + [ + 3, + 5, + 7, + 2, + 6, + 1, + 8, + 4, + 9 + ], + [ + 8, + 4, + 1, + 9, + 3, + 5, + 2, + 7, + 6 + ], + [ + 6, + 2, + 9, + 7, + 4, + 8, + 1, + 5, + 3 + ], + [ + 7, + 9, + 5, + 1, + 8, + 2, + 6, + 3, + 4 + ], + [ + 2, + 6, + 4, + 3, + 5, + 7, + 9, + 8, + 1 + ], + [ + 1, + 8, + 3, + 6, + 9, + 4, + 5, + 2, + 7 + ] + ] + }, + { + "id": 39, + "board": [ + [ + 7, + 5, + 4, + 1, + 8, + 6, + 3, + 9, + 2 + ], + [ + 1, + 0, + 0, + 0, + 2, + 3, + 0, + 5, + 7 + ], + [ + 2, + 0, + 0, + 0, + 5, + 7, + 0, + 1, + 6 + ], + [ + 5, + 4, + 7, + 2, + 9, + 8, + 6, + 3, + 1 + ], + [ + 0, + 1, + 0, + 6, + 3, + 0, + 7, + 0, + 4 + ], + [ + 0, + 0, + 0, + 7, + 1, + 4, + 9, + 0, + 5 + ], + [ + 0, + 0, + 5, + 8, + 7, + 1, + 2, + 4, + 3 + ], + [ + 3, + 7, + 8, + 5, + 4, + 2, + 1, + 6, + 9 + ], + [ + 4, + 2, + 1, + 3, + 6, + 0, + 5, + 7, + 8 + ] + ], + "solution": [ + [ + 7, + 5, + 4, + 1, + 8, + 6, + 3, + 9, + 2 + ], + [ + 1, + 8, + 6, + 9, + 2, + 3, + 4, + 5, + 7 + ], + [ + 2, + 3, + 9, + 4, + 5, + 7, + 8, + 1, + 6 + ], + [ + 5, + 4, + 7, + 2, + 9, + 8, + 6, + 3, + 1 + ], + [ + 9, + 1, + 2, + 6, + 3, + 5, + 7, + 8, + 4 + ], + [ + 8, + 6, + 3, + 7, + 1, + 4, + 9, + 2, + 5 + ], + [ + 6, + 9, + 5, + 8, + 7, + 1, + 2, + 4, + 3 + ], + [ + 3, + 7, + 8, + 5, + 4, + 2, + 1, + 6, + 9 + ], + [ + 4, + 2, + 1, + 3, + 6, + 9, + 5, + 7, + 8 + ] + ] + }, + { + "id": 40, + "board": [ + [ + 1, + 8, + 0, + 4, + 6, + 2, + 3, + 0, + 9 + ], + [ + 9, + 3, + 4, + 0, + 1, + 5, + 2, + 0, + 0 + ], + [ + 6, + 0, + 0, + 3, + 8, + 9, + 0, + 0, + 4 + ], + [ + 8, + 9, + 2, + 6, + 0, + 3, + 5, + 4, + 0 + ], + [ + 3, + 7, + 1, + 8, + 0, + 4, + 6, + 0, + 0 + ], + [ + 5, + 0, + 6, + 0, + 2, + 1, + 8, + 3, + 0 + ], + [ + 7, + 5, + 8, + 2, + 4, + 6, + 9, + 1, + 3 + ], + [ + 2, + 1, + 3, + 5, + 9, + 7, + 4, + 0, + 0 + ], + [ + 4, + 6, + 9, + 1, + 3, + 8, + 7, + 2, + 5 + ] + ], + "solution": [ + [ + 1, + 8, + 5, + 4, + 6, + 2, + 3, + 7, + 9 + ], + [ + 9, + 3, + 4, + 7, + 1, + 5, + 2, + 6, + 8 + ], + [ + 6, + 2, + 7, + 3, + 8, + 9, + 1, + 5, + 4 + ], + [ + 8, + 9, + 2, + 6, + 7, + 3, + 5, + 4, + 1 + ], + [ + 3, + 7, + 1, + 8, + 5, + 4, + 6, + 9, + 2 + ], + [ + 5, + 4, + 6, + 9, + 2, + 1, + 8, + 3, + 7 + ], + [ + 7, + 5, + 8, + 2, + 4, + 6, + 9, + 1, + 3 + ], + [ + 2, + 1, + 3, + 5, + 9, + 7, + 4, + 8, + 6 + ], + [ + 4, + 6, + 9, + 1, + 3, + 8, + 7, + 2, + 5 + ] + ] + }, + { + "id": 41, + "board": [ + [ + 7, + 0, + 6, + 1, + 3, + 9, + 5, + 4, + 8 + ], + [ + 3, + 5, + 4, + 8, + 0, + 2, + 1, + 6, + 9 + ], + [ + 9, + 0, + 1, + 6, + 4, + 5, + 0, + 0, + 3 + ], + [ + 0, + 3, + 5, + 7, + 2, + 8, + 4, + 9, + 0 + ], + [ + 2, + 9, + 7, + 5, + 6, + 4, + 0, + 0, + 1 + ], + [ + 4, + 6, + 8, + 0, + 9, + 0, + 2, + 7, + 5 + ], + [ + 0, + 4, + 0, + 2, + 1, + 6, + 9, + 5, + 7 + ], + [ + 6, + 1, + 2, + 9, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 7, + 9, + 4, + 8, + 3, + 6, + 1, + 2 + ] + ], + "solution": [ + [ + 7, + 2, + 6, + 1, + 3, + 9, + 5, + 4, + 8 + ], + [ + 3, + 5, + 4, + 8, + 7, + 2, + 1, + 6, + 9 + ], + [ + 9, + 8, + 1, + 6, + 4, + 5, + 7, + 2, + 3 + ], + [ + 1, + 3, + 5, + 7, + 2, + 8, + 4, + 9, + 6 + ], + [ + 2, + 9, + 7, + 5, + 6, + 4, + 3, + 8, + 1 + ], + [ + 4, + 6, + 8, + 3, + 9, + 1, + 2, + 7, + 5 + ], + [ + 8, + 4, + 3, + 2, + 1, + 6, + 9, + 5, + 7 + ], + [ + 6, + 1, + 2, + 9, + 5, + 7, + 8, + 3, + 4 + ], + [ + 5, + 7, + 9, + 4, + 8, + 3, + 6, + 1, + 2 + ] + ] + }, + { + "id": 42, + "board": [ + [ + 0, + 0, + 0, + 8, + 5, + 1, + 0, + 7, + 9 + ], + [ + 5, + 0, + 8, + 6, + 9, + 3, + 4, + 1, + 2 + ], + [ + 6, + 9, + 1, + 2, + 7, + 4, + 8, + 5, + 3 + ], + [ + 0, + 0, + 0, + 7, + 0, + 6, + 0, + 2, + 5 + ], + [ + 0, + 0, + 7, + 9, + 0, + 5, + 0, + 6, + 4 + ], + [ + 1, + 0, + 5, + 3, + 4, + 2, + 7, + 9, + 8 + ], + [ + 8, + 1, + 2, + 5, + 3, + 0, + 9, + 4, + 6 + ], + [ + 9, + 5, + 4, + 0, + 0, + 8, + 2, + 3, + 7 + ], + [ + 7, + 3, + 6, + 4, + 0, + 9, + 5, + 8, + 1 + ] + ], + "solution": [ + [ + 2, + 4, + 3, + 8, + 5, + 1, + 6, + 7, + 9 + ], + [ + 5, + 7, + 8, + 6, + 9, + 3, + 4, + 1, + 2 + ], + [ + 6, + 9, + 1, + 2, + 7, + 4, + 8, + 5, + 3 + ], + [ + 4, + 8, + 9, + 7, + 1, + 6, + 3, + 2, + 5 + ], + [ + 3, + 2, + 7, + 9, + 8, + 5, + 1, + 6, + 4 + ], + [ + 1, + 6, + 5, + 3, + 4, + 2, + 7, + 9, + 8 + ], + [ + 8, + 1, + 2, + 5, + 3, + 7, + 9, + 4, + 6 + ], + [ + 9, + 5, + 4, + 1, + 6, + 8, + 2, + 3, + 7 + ], + [ + 7, + 3, + 6, + 4, + 2, + 9, + 5, + 8, + 1 + ] + ] + }, + { + "id": 43, + "board": [ + [ + 8, + 0, + 1, + 7, + 9, + 2, + 0, + 6, + 3 + ], + [ + 5, + 3, + 7, + 6, + 1, + 8, + 4, + 2, + 9 + ], + [ + 2, + 9, + 6, + 0, + 5, + 0, + 7, + 1, + 8 + ], + [ + 9, + 5, + 3, + 0, + 0, + 7, + 1, + 8, + 6 + ], + [ + 1, + 7, + 8, + 0, + 0, + 0, + 2, + 5, + 4 + ], + [ + 4, + 6, + 2, + 5, + 8, + 1, + 9, + 3, + 7 + ], + [ + 7, + 0, + 5, + 0, + 0, + 0, + 6, + 4, + 1 + ], + [ + 3, + 0, + 9, + 0, + 0, + 0, + 8, + 7, + 5 + ], + [ + 6, + 0, + 4, + 0, + 7, + 5, + 3, + 9, + 2 + ] + ], + "solution": [ + [ + 8, + 4, + 1, + 7, + 9, + 2, + 5, + 6, + 3 + ], + [ + 5, + 3, + 7, + 6, + 1, + 8, + 4, + 2, + 9 + ], + [ + 2, + 9, + 6, + 3, + 5, + 4, + 7, + 1, + 8 + ], + [ + 9, + 5, + 3, + 2, + 4, + 7, + 1, + 8, + 6 + ], + [ + 1, + 7, + 8, + 9, + 6, + 3, + 2, + 5, + 4 + ], + [ + 4, + 6, + 2, + 5, + 8, + 1, + 9, + 3, + 7 + ], + [ + 7, + 2, + 5, + 8, + 3, + 9, + 6, + 4, + 1 + ], + [ + 3, + 1, + 9, + 4, + 2, + 6, + 8, + 7, + 5 + ], + [ + 6, + 8, + 4, + 1, + 7, + 5, + 3, + 9, + 2 + ] + ] + }, + { + "id": 44, + "board": [ + [ + 0, + 8, + 6, + 0, + 0, + 3, + 9, + 0, + 4 + ], + [ + 0, + 5, + 9, + 6, + 8, + 0, + 0, + 0, + 7 + ], + [ + 0, + 4, + 3, + 0, + 0, + 0, + 6, + 0, + 8 + ], + [ + 6, + 2, + 4, + 3, + 0, + 8, + 0, + 9, + 5 + ], + [ + 9, + 1, + 8, + 4, + 0, + 6, + 0, + 3, + 2 + ], + [ + 3, + 7, + 5, + 2, + 0, + 0, + 8, + 4, + 6 + ], + [ + 8, + 3, + 2, + 9, + 6, + 5, + 4, + 7, + 1 + ], + [ + 4, + 6, + 7, + 1, + 3, + 2, + 5, + 8, + 9 + ], + [ + 5, + 9, + 1, + 8, + 4, + 7, + 2, + 6, + 3 + ] + ], + "solution": [ + [ + 7, + 8, + 6, + 5, + 1, + 3, + 9, + 2, + 4 + ], + [ + 2, + 5, + 9, + 6, + 8, + 4, + 3, + 1, + 7 + ], + [ + 1, + 4, + 3, + 7, + 2, + 9, + 6, + 5, + 8 + ], + [ + 6, + 2, + 4, + 3, + 7, + 8, + 1, + 9, + 5 + ], + [ + 9, + 1, + 8, + 4, + 5, + 6, + 7, + 3, + 2 + ], + [ + 3, + 7, + 5, + 2, + 9, + 1, + 8, + 4, + 6 + ], + [ + 8, + 3, + 2, + 9, + 6, + 5, + 4, + 7, + 1 + ], + [ + 4, + 6, + 7, + 1, + 3, + 2, + 5, + 8, + 9 + ], + [ + 5, + 9, + 1, + 8, + 4, + 7, + 2, + 6, + 3 + ] + ] + }, + { + "id": 45, + "board": [ + [ + 3, + 7, + 4, + 9, + 8, + 1, + 6, + 2, + 5 + ], + [ + 6, + 9, + 2, + 7, + 5, + 4, + 3, + 1, + 8 + ], + [ + 1, + 5, + 8, + 6, + 3, + 2, + 4, + 7, + 9 + ], + [ + 0, + 0, + 9, + 1, + 0, + 5, + 8, + 3, + 6 + ], + [ + 0, + 1, + 6, + 8, + 0, + 3, + 0, + 0, + 2 + ], + [ + 0, + 8, + 3, + 0, + 6, + 9, + 7, + 0, + 1 + ], + [ + 8, + 3, + 0, + 4, + 0, + 6, + 2, + 0, + 7 + ], + [ + 0, + 0, + 7, + 5, + 0, + 8, + 0, + 6, + 3 + ], + [ + 9, + 6, + 0, + 3, + 2, + 7, + 0, + 8, + 4 + ] + ], + "solution": [ + [ + 3, + 7, + 4, + 9, + 8, + 1, + 6, + 2, + 5 + ], + [ + 6, + 9, + 2, + 7, + 5, + 4, + 3, + 1, + 8 + ], + [ + 1, + 5, + 8, + 6, + 3, + 2, + 4, + 7, + 9 + ], + [ + 4, + 2, + 9, + 1, + 7, + 5, + 8, + 3, + 6 + ], + [ + 7, + 1, + 6, + 8, + 4, + 3, + 5, + 9, + 2 + ], + [ + 5, + 8, + 3, + 2, + 6, + 9, + 7, + 4, + 1 + ], + [ + 8, + 3, + 1, + 4, + 9, + 6, + 2, + 5, + 7 + ], + [ + 2, + 4, + 7, + 5, + 1, + 8, + 9, + 6, + 3 + ], + [ + 9, + 6, + 5, + 3, + 2, + 7, + 1, + 8, + 4 + ] + ] + }, + { + "id": 46, + "board": [ + [ + 4, + 2, + 0, + 8, + 9, + 6, + 5, + 1, + 3 + ], + [ + 0, + 6, + 1, + 0, + 0, + 0, + 0, + 4, + 9 + ], + [ + 0, + 0, + 0, + 0, + 7, + 1, + 2, + 6, + 8 + ], + [ + 5, + 7, + 0, + 1, + 8, + 2, + 9, + 0, + 0 + ], + [ + 9, + 0, + 0, + 6, + 4, + 7, + 1, + 5, + 0 + ], + [ + 6, + 1, + 2, + 0, + 3, + 9, + 8, + 7, + 4 + ], + [ + 1, + 9, + 6, + 2, + 5, + 4, + 0, + 8, + 7 + ], + [ + 7, + 4, + 8, + 9, + 1, + 3, + 6, + 2, + 5 + ], + [ + 2, + 3, + 5, + 7, + 6, + 8, + 4, + 0, + 1 + ] + ], + "solution": [ + [ + 4, + 2, + 7, + 8, + 9, + 6, + 5, + 1, + 3 + ], + [ + 8, + 6, + 1, + 3, + 2, + 5, + 7, + 4, + 9 + ], + [ + 3, + 5, + 9, + 4, + 7, + 1, + 2, + 6, + 8 + ], + [ + 5, + 7, + 4, + 1, + 8, + 2, + 9, + 3, + 6 + ], + [ + 9, + 8, + 3, + 6, + 4, + 7, + 1, + 5, + 2 + ], + [ + 6, + 1, + 2, + 5, + 3, + 9, + 8, + 7, + 4 + ], + [ + 1, + 9, + 6, + 2, + 5, + 4, + 3, + 8, + 7 + ], + [ + 7, + 4, + 8, + 9, + 1, + 3, + 6, + 2, + 5 + ], + [ + 2, + 3, + 5, + 7, + 6, + 8, + 4, + 9, + 1 + ] + ] + }, + { + "id": 47, + "board": [ + [ + 5, + 2, + 7, + 3, + 1, + 9, + 4, + 8, + 6 + ], + [ + 6, + 4, + 1, + 2, + 8, + 5, + 0, + 0, + 7 + ], + [ + 0, + 0, + 8, + 4, + 6, + 7, + 1, + 2, + 5 + ], + [ + 4, + 8, + 9, + 6, + 3, + 1, + 5, + 7, + 2 + ], + [ + 2, + 6, + 3, + 7, + 5, + 4, + 8, + 0, + 0 + ], + [ + 7, + 1, + 5, + 8, + 9, + 2, + 6, + 4, + 3 + ], + [ + 0, + 5, + 2, + 9, + 4, + 6, + 7, + 0, + 8 + ], + [ + 0, + 0, + 6, + 1, + 0, + 0, + 0, + 5, + 4 + ], + [ + 0, + 0, + 4, + 5, + 0, + 0, + 0, + 6, + 0 + ] + ], + "solution": [ + [ + 5, + 2, + 7, + 3, + 1, + 9, + 4, + 8, + 6 + ], + [ + 6, + 4, + 1, + 2, + 8, + 5, + 3, + 9, + 7 + ], + [ + 3, + 9, + 8, + 4, + 6, + 7, + 1, + 2, + 5 + ], + [ + 4, + 8, + 9, + 6, + 3, + 1, + 5, + 7, + 2 + ], + [ + 2, + 6, + 3, + 7, + 5, + 4, + 8, + 1, + 9 + ], + [ + 7, + 1, + 5, + 8, + 9, + 2, + 6, + 4, + 3 + ], + [ + 1, + 5, + 2, + 9, + 4, + 6, + 7, + 3, + 8 + ], + [ + 8, + 7, + 6, + 1, + 2, + 3, + 9, + 5, + 4 + ], + [ + 9, + 3, + 4, + 5, + 7, + 8, + 2, + 6, + 1 + ] + ] + }, + { + "id": 48, + "board": [ + [ + 1, + 6, + 3, + 5, + 2, + 9, + 4, + 8, + 7 + ], + [ + 4, + 2, + 9, + 8, + 7, + 3, + 6, + 1, + 5 + ], + [ + 5, + 0, + 0, + 1, + 6, + 4, + 9, + 3, + 2 + ], + [ + 0, + 0, + 0, + 6, + 9, + 7, + 5, + 4, + 1 + ], + [ + 9, + 5, + 6, + 4, + 3, + 1, + 0, + 0, + 8 + ], + [ + 7, + 1, + 4, + 2, + 5, + 8, + 3, + 9, + 6 + ], + [ + 0, + 0, + 5, + 0, + 8, + 6, + 1, + 0, + 0 + ], + [ + 8, + 0, + 0, + 0, + 1, + 5, + 0, + 6, + 0 + ], + [ + 6, + 0, + 1, + 0, + 4, + 2, + 8, + 5, + 3 + ] + ], + "solution": [ + [ + 1, + 6, + 3, + 5, + 2, + 9, + 4, + 8, + 7 + ], + [ + 4, + 2, + 9, + 8, + 7, + 3, + 6, + 1, + 5 + ], + [ + 5, + 7, + 8, + 1, + 6, + 4, + 9, + 3, + 2 + ], + [ + 3, + 8, + 2, + 6, + 9, + 7, + 5, + 4, + 1 + ], + [ + 9, + 5, + 6, + 4, + 3, + 1, + 7, + 2, + 8 + ], + [ + 7, + 1, + 4, + 2, + 5, + 8, + 3, + 9, + 6 + ], + [ + 2, + 3, + 5, + 9, + 8, + 6, + 1, + 7, + 4 + ], + [ + 8, + 4, + 7, + 3, + 1, + 5, + 2, + 6, + 9 + ], + [ + 6, + 9, + 1, + 7, + 4, + 2, + 8, + 5, + 3 + ] + ] + }, + { + "id": 49, + "board": [ + [ + 8, + 0, + 5, + 7, + 2, + 6, + 1, + 3, + 4 + ], + [ + 6, + 3, + 7, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 4, + 0, + 8, + 0, + 0, + 7, + 6 + ], + [ + 3, + 4, + 9, + 0, + 6, + 7, + 2, + 0, + 5 + ], + [ + 7, + 8, + 1, + 5, + 9, + 2, + 6, + 4, + 3 + ], + [ + 5, + 6, + 2, + 0, + 4, + 3, + 7, + 9, + 0 + ], + [ + 4, + 7, + 8, + 2, + 0, + 0, + 3, + 6, + 9 + ], + [ + 9, + 5, + 3, + 6, + 7, + 8, + 4, + 0, + 0 + ], + [ + 2, + 1, + 6, + 9, + 3, + 4, + 8, + 5, + 7 + ] + ], + "solution": [ + [ + 8, + 9, + 5, + 7, + 2, + 6, + 1, + 3, + 4 + ], + [ + 6, + 3, + 7, + 4, + 1, + 5, + 9, + 2, + 8 + ], + [ + 1, + 2, + 4, + 3, + 8, + 9, + 5, + 7, + 6 + ], + [ + 3, + 4, + 9, + 1, + 6, + 7, + 2, + 8, + 5 + ], + [ + 7, + 8, + 1, + 5, + 9, + 2, + 6, + 4, + 3 + ], + [ + 5, + 6, + 2, + 8, + 4, + 3, + 7, + 9, + 1 + ], + [ + 4, + 7, + 8, + 2, + 5, + 1, + 3, + 6, + 9 + ], + [ + 9, + 5, + 3, + 6, + 7, + 8, + 4, + 1, + 2 + ], + [ + 2, + 1, + 6, + 9, + 3, + 4, + 8, + 5, + 7 + ] + ] + }, + { + "id": 50, + "board": [ + [ + 8, + 7, + 4, + 6, + 1, + 0, + 3, + 2, + 0 + ], + [ + 6, + 5, + 3, + 7, + 4, + 2, + 8, + 0, + 9 + ], + [ + 1, + 2, + 9, + 5, + 3, + 8, + 6, + 7, + 4 + ], + [ + 2, + 0, + 5, + 0, + 7, + 6, + 1, + 9, + 3 + ], + [ + 3, + 1, + 6, + 2, + 0, + 4, + 5, + 8, + 7 + ], + [ + 0, + 9, + 0, + 0, + 5, + 3, + 4, + 0, + 2 + ], + [ + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 6 + ], + [ + 5, + 6, + 1, + 3, + 2, + 7, + 9, + 4, + 8 + ], + [ + 9, + 8, + 0, + 4, + 6, + 5, + 0, + 3, + 1 + ] + ], + "solution": [ + [ + 8, + 7, + 4, + 6, + 1, + 9, + 3, + 2, + 5 + ], + [ + 6, + 5, + 3, + 7, + 4, + 2, + 8, + 1, + 9 + ], + [ + 1, + 2, + 9, + 5, + 3, + 8, + 6, + 7, + 4 + ], + [ + 2, + 4, + 5, + 8, + 7, + 6, + 1, + 9, + 3 + ], + [ + 3, + 1, + 6, + 2, + 9, + 4, + 5, + 8, + 7 + ], + [ + 7, + 9, + 8, + 1, + 5, + 3, + 4, + 6, + 2 + ], + [ + 4, + 3, + 2, + 9, + 8, + 1, + 7, + 5, + 6 + ], + [ + 5, + 6, + 1, + 3, + 2, + 7, + 9, + 4, + 8 + ], + [ + 9, + 8, + 7, + 4, + 6, + 5, + 2, + 3, + 1 + ] + ] + }, + { + "id": 51, + "board": [ + [ + 5, + 9, + 2, + 4, + 6, + 8, + 0, + 0, + 0 + ], + [ + 4, + 0, + 3, + 1, + 7, + 0, + 2, + 9, + 8 + ], + [ + 1, + 7, + 8, + 3, + 2, + 9, + 0, + 4, + 5 + ], + [ + 2, + 1, + 9, + 7, + 3, + 6, + 5, + 0, + 4 + ], + [ + 6, + 5, + 4, + 9, + 8, + 2, + 3, + 7, + 1 + ], + [ + 8, + 3, + 7, + 5, + 4, + 1, + 9, + 2, + 6 + ], + [ + 3, + 4, + 1, + 0, + 5, + 7, + 8, + 6, + 9 + ], + [ + 0, + 8, + 5, + 6, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 6, + 8, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 9, + 2, + 4, + 6, + 8, + 1, + 3, + 7 + ], + [ + 4, + 6, + 3, + 1, + 7, + 5, + 2, + 9, + 8 + ], + [ + 1, + 7, + 8, + 3, + 2, + 9, + 6, + 4, + 5 + ], + [ + 2, + 1, + 9, + 7, + 3, + 6, + 5, + 8, + 4 + ], + [ + 6, + 5, + 4, + 9, + 8, + 2, + 3, + 7, + 1 + ], + [ + 8, + 3, + 7, + 5, + 4, + 1, + 9, + 2, + 6 + ], + [ + 3, + 4, + 1, + 2, + 5, + 7, + 8, + 6, + 9 + ], + [ + 7, + 8, + 5, + 6, + 9, + 3, + 4, + 1, + 2 + ], + [ + 9, + 2, + 6, + 8, + 1, + 4, + 7, + 5, + 3 + ] + ] + }, + { + "id": 52, + "board": [ + [ + 5, + 0, + 9, + 8, + 4, + 2, + 6, + 0, + 7 + ], + [ + 0, + 0, + 4, + 7, + 6, + 0, + 9, + 0, + 8 + ], + [ + 8, + 0, + 6, + 1, + 0, + 0, + 2, + 0, + 5 + ], + [ + 4, + 2, + 7, + 6, + 3, + 1, + 0, + 5, + 9 + ], + [ + 6, + 5, + 1, + 2, + 8, + 9, + 4, + 7, + 3 + ], + [ + 9, + 8, + 3, + 5, + 7, + 4, + 1, + 2, + 6 + ], + [ + 0, + 4, + 0, + 0, + 0, + 6, + 7, + 9, + 2 + ], + [ + 0, + 9, + 5, + 4, + 2, + 8, + 3, + 6, + 1 + ], + [ + 3, + 0, + 2, + 0, + 1, + 0, + 5, + 8, + 4 + ] + ], + "solution": [ + [ + 5, + 1, + 9, + 8, + 4, + 2, + 6, + 3, + 7 + ], + [ + 2, + 3, + 4, + 7, + 6, + 5, + 9, + 1, + 8 + ], + [ + 8, + 7, + 6, + 1, + 9, + 3, + 2, + 4, + 5 + ], + [ + 4, + 2, + 7, + 6, + 3, + 1, + 8, + 5, + 9 + ], + [ + 6, + 5, + 1, + 2, + 8, + 9, + 4, + 7, + 3 + ], + [ + 9, + 8, + 3, + 5, + 7, + 4, + 1, + 2, + 6 + ], + [ + 1, + 4, + 8, + 3, + 5, + 6, + 7, + 9, + 2 + ], + [ + 7, + 9, + 5, + 4, + 2, + 8, + 3, + 6, + 1 + ], + [ + 3, + 6, + 2, + 9, + 1, + 7, + 5, + 8, + 4 + ] + ] + }, + { + "id": 53, + "board": [ + [ + 5, + 1, + 6, + 8, + 7, + 2, + 0, + 9, + 0 + ], + [ + 0, + 9, + 2, + 5, + 4, + 3, + 1, + 0, + 6 + ], + [ + 0, + 4, + 3, + 9, + 6, + 1, + 2, + 0, + 5 + ], + [ + 4, + 6, + 1, + 7, + 3, + 8, + 5, + 2, + 9 + ], + [ + 2, + 7, + 9, + 1, + 5, + 6, + 4, + 3, + 8 + ], + [ + 3, + 8, + 5, + 4, + 2, + 9, + 6, + 1, + 7 + ], + [ + 9, + 3, + 7, + 6, + 1, + 0, + 8, + 4, + 2 + ], + [ + 1, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 3, + 0, + 0, + 0, + 5, + 1 + ] + ], + "solution": [ + [ + 5, + 1, + 6, + 8, + 7, + 2, + 3, + 9, + 4 + ], + [ + 7, + 9, + 2, + 5, + 4, + 3, + 1, + 8, + 6 + ], + [ + 8, + 4, + 3, + 9, + 6, + 1, + 2, + 7, + 5 + ], + [ + 4, + 6, + 1, + 7, + 3, + 8, + 5, + 2, + 9 + ], + [ + 2, + 7, + 9, + 1, + 5, + 6, + 4, + 3, + 8 + ], + [ + 3, + 8, + 5, + 4, + 2, + 9, + 6, + 1, + 7 + ], + [ + 9, + 3, + 7, + 6, + 1, + 5, + 8, + 4, + 2 + ], + [ + 1, + 5, + 4, + 2, + 8, + 7, + 9, + 6, + 3 + ], + [ + 6, + 2, + 8, + 3, + 9, + 4, + 7, + 5, + 1 + ] + ] + }, + { + "id": 54, + "board": [ + [ + 4, + 9, + 7, + 8, + 1, + 0, + 5, + 2, + 0 + ], + [ + 0, + 0, + 0, + 7, + 9, + 0, + 4, + 1, + 0 + ], + [ + 1, + 3, + 6, + 0, + 0, + 2, + 8, + 7, + 9 + ], + [ + 0, + 0, + 0, + 0, + 0, + 7, + 6, + 3, + 1 + ], + [ + 7, + 6, + 0, + 0, + 3, + 1, + 2, + 4, + 8 + ], + [ + 3, + 1, + 4, + 6, + 2, + 8, + 7, + 9, + 5 + ], + [ + 6, + 4, + 2, + 1, + 8, + 9, + 3, + 5, + 7 + ], + [ + 0, + 7, + 1, + 3, + 6, + 4, + 9, + 8, + 2 + ], + [ + 9, + 8, + 3, + 2, + 7, + 5, + 1, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 9, + 7, + 8, + 1, + 3, + 5, + 2, + 6 + ], + [ + 2, + 5, + 8, + 7, + 9, + 6, + 4, + 1, + 3 + ], + [ + 1, + 3, + 6, + 4, + 5, + 2, + 8, + 7, + 9 + ], + [ + 8, + 2, + 5, + 9, + 4, + 7, + 6, + 3, + 1 + ], + [ + 7, + 6, + 9, + 5, + 3, + 1, + 2, + 4, + 8 + ], + [ + 3, + 1, + 4, + 6, + 2, + 8, + 7, + 9, + 5 + ], + [ + 6, + 4, + 2, + 1, + 8, + 9, + 3, + 5, + 7 + ], + [ + 5, + 7, + 1, + 3, + 6, + 4, + 9, + 8, + 2 + ], + [ + 9, + 8, + 3, + 2, + 7, + 5, + 1, + 6, + 4 + ] + ] + }, + { + "id": 55, + "board": [ + [ + 5, + 7, + 9, + 1, + 3, + 2, + 0, + 0, + 4 + ], + [ + 3, + 6, + 8, + 5, + 4, + 7, + 0, + 9, + 1 + ], + [ + 4, + 2, + 1, + 8, + 6, + 9, + 5, + 3, + 7 + ], + [ + 9, + 1, + 0, + 2, + 5, + 3, + 7, + 0, + 8 + ], + [ + 7, + 3, + 0, + 9, + 8, + 4, + 0, + 0, + 5 + ], + [ + 8, + 5, + 0, + 6, + 7, + 1, + 9, + 0, + 3 + ], + [ + 1, + 9, + 0, + 4, + 2, + 0, + 0, + 7, + 6 + ], + [ + 2, + 8, + 7, + 3, + 1, + 6, + 4, + 5, + 9 + ], + [ + 6, + 4, + 0, + 7, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 7, + 9, + 1, + 3, + 2, + 6, + 8, + 4 + ], + [ + 3, + 6, + 8, + 5, + 4, + 7, + 2, + 9, + 1 + ], + [ + 4, + 2, + 1, + 8, + 6, + 9, + 5, + 3, + 7 + ], + [ + 9, + 1, + 4, + 2, + 5, + 3, + 7, + 6, + 8 + ], + [ + 7, + 3, + 6, + 9, + 8, + 4, + 1, + 2, + 5 + ], + [ + 8, + 5, + 2, + 6, + 7, + 1, + 9, + 4, + 3 + ], + [ + 1, + 9, + 3, + 4, + 2, + 5, + 8, + 7, + 6 + ], + [ + 2, + 8, + 7, + 3, + 1, + 6, + 4, + 5, + 9 + ], + [ + 6, + 4, + 5, + 7, + 9, + 8, + 3, + 1, + 2 + ] + ] + }, + { + "id": 56, + "board": [ + [ + 7, + 3, + 2, + 4, + 8, + 0, + 9, + 5, + 6 + ], + [ + 0, + 6, + 8, + 7, + 0, + 9, + 1, + 3, + 0 + ], + [ + 0, + 9, + 1, + 3, + 0, + 6, + 8, + 7, + 0 + ], + [ + 2, + 5, + 6, + 1, + 3, + 8, + 4, + 9, + 7 + ], + [ + 1, + 4, + 7, + 5, + 9, + 2, + 6, + 8, + 3 + ], + [ + 9, + 8, + 3, + 6, + 7, + 4, + 2, + 1, + 5 + ], + [ + 8, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 9 + ], + [ + 6, + 0, + 0, + 9, + 0, + 0, + 0, + 2, + 0 + ], + [ + 3, + 2, + 9, + 8, + 6, + 5, + 7, + 4, + 1 + ] + ], + "solution": [ + [ + 7, + 3, + 2, + 4, + 8, + 1, + 9, + 5, + 6 + ], + [ + 4, + 6, + 8, + 7, + 5, + 9, + 1, + 3, + 2 + ], + [ + 5, + 9, + 1, + 3, + 2, + 6, + 8, + 7, + 4 + ], + [ + 2, + 5, + 6, + 1, + 3, + 8, + 4, + 9, + 7 + ], + [ + 1, + 4, + 7, + 5, + 9, + 2, + 6, + 8, + 3 + ], + [ + 9, + 8, + 3, + 6, + 7, + 4, + 2, + 1, + 5 + ], + [ + 8, + 1, + 5, + 2, + 4, + 7, + 3, + 6, + 9 + ], + [ + 6, + 7, + 4, + 9, + 1, + 3, + 5, + 2, + 8 + ], + [ + 3, + 2, + 9, + 8, + 6, + 5, + 7, + 4, + 1 + ] + ] + }, + { + "id": 57, + "board": [ + [ + 1, + 0, + 2, + 0, + 5, + 4, + 0, + 7, + 3 + ], + [ + 3, + 0, + 7, + 2, + 0, + 9, + 0, + 4, + 5 + ], + [ + 9, + 4, + 5, + 7, + 3, + 1, + 6, + 0, + 2 + ], + [ + 4, + 0, + 8, + 9, + 7, + 3, + 2, + 6, + 1 + ], + [ + 7, + 3, + 1, + 0, + 0, + 2, + 4, + 0, + 9 + ], + [ + 2, + 9, + 6, + 0, + 1, + 0, + 7, + 3, + 8 + ], + [ + 0, + 7, + 3, + 1, + 2, + 0, + 5, + 9, + 4 + ], + [ + 6, + 1, + 9, + 0, + 4, + 0, + 3, + 2, + 7 + ], + [ + 5, + 2, + 0, + 3, + 0, + 7, + 8, + 1, + 6 + ] + ], + "solution": [ + [ + 1, + 6, + 2, + 8, + 5, + 4, + 9, + 7, + 3 + ], + [ + 3, + 8, + 7, + 2, + 6, + 9, + 1, + 4, + 5 + ], + [ + 9, + 4, + 5, + 7, + 3, + 1, + 6, + 8, + 2 + ], + [ + 4, + 5, + 8, + 9, + 7, + 3, + 2, + 6, + 1 + ], + [ + 7, + 3, + 1, + 6, + 8, + 2, + 4, + 5, + 9 + ], + [ + 2, + 9, + 6, + 4, + 1, + 5, + 7, + 3, + 8 + ], + [ + 8, + 7, + 3, + 1, + 2, + 6, + 5, + 9, + 4 + ], + [ + 6, + 1, + 9, + 5, + 4, + 8, + 3, + 2, + 7 + ], + [ + 5, + 2, + 4, + 3, + 9, + 7, + 8, + 1, + 6 + ] + ] + }, + { + "id": 58, + "board": [ + [ + 8, + 7, + 3, + 9, + 2, + 6, + 4, + 1, + 5 + ], + [ + 4, + 5, + 6, + 8, + 1, + 3, + 2, + 7, + 9 + ], + [ + 2, + 1, + 9, + 4, + 7, + 5, + 6, + 3, + 8 + ], + [ + 9, + 6, + 1, + 3, + 5, + 2, + 7, + 8, + 4 + ], + [ + 5, + 8, + 0, + 7, + 0, + 1, + 9, + 6, + 3 + ], + [ + 3, + 4, + 7, + 6, + 9, + 8, + 1, + 5, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 9, + 0, + 4, + 0 + ], + [ + 0, + 9, + 0, + 5, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 3, + 0, + 2, + 0, + 0, + 0, + 9, + 0 + ] + ], + "solution": [ + [ + 8, + 7, + 3, + 9, + 2, + 6, + 4, + 1, + 5 + ], + [ + 4, + 5, + 6, + 8, + 1, + 3, + 2, + 7, + 9 + ], + [ + 2, + 1, + 9, + 4, + 7, + 5, + 6, + 3, + 8 + ], + [ + 9, + 6, + 1, + 3, + 5, + 2, + 7, + 8, + 4 + ], + [ + 5, + 8, + 2, + 7, + 4, + 1, + 9, + 6, + 3 + ], + [ + 3, + 4, + 7, + 6, + 9, + 8, + 1, + 5, + 2 + ], + [ + 6, + 2, + 5, + 1, + 3, + 9, + 8, + 4, + 7 + ], + [ + 1, + 9, + 4, + 5, + 8, + 7, + 3, + 2, + 6 + ], + [ + 7, + 3, + 8, + 2, + 6, + 4, + 5, + 9, + 1 + ] + ] + }, + { + "id": 59, + "board": [ + [ + 2, + 7, + 5, + 4, + 8, + 1, + 0, + 9, + 3 + ], + [ + 1, + 9, + 0, + 5, + 6, + 3, + 7, + 2, + 4 + ], + [ + 4, + 3, + 6, + 7, + 2, + 9, + 0, + 1, + 8 + ], + [ + 0, + 0, + 0, + 6, + 4, + 0, + 0, + 0, + 5 + ], + [ + 3, + 5, + 0, + 9, + 7, + 8, + 2, + 4, + 6 + ], + [ + 6, + 2, + 4, + 1, + 3, + 5, + 8, + 7, + 0 + ], + [ + 0, + 6, + 0, + 0, + 1, + 4, + 3, + 0, + 2 + ], + [ + 5, + 1, + 0, + 2, + 9, + 6, + 4, + 8, + 0 + ], + [ + 0, + 4, + 2, + 3, + 5, + 0, + 9, + 6, + 1 + ] + ], + "solution": [ + [ + 2, + 7, + 5, + 4, + 8, + 1, + 6, + 9, + 3 + ], + [ + 1, + 9, + 8, + 5, + 6, + 3, + 7, + 2, + 4 + ], + [ + 4, + 3, + 6, + 7, + 2, + 9, + 5, + 1, + 8 + ], + [ + 7, + 8, + 9, + 6, + 4, + 2, + 1, + 3, + 5 + ], + [ + 3, + 5, + 1, + 9, + 7, + 8, + 2, + 4, + 6 + ], + [ + 6, + 2, + 4, + 1, + 3, + 5, + 8, + 7, + 9 + ], + [ + 9, + 6, + 7, + 8, + 1, + 4, + 3, + 5, + 2 + ], + [ + 5, + 1, + 3, + 2, + 9, + 6, + 4, + 8, + 7 + ], + [ + 8, + 4, + 2, + 3, + 5, + 7, + 9, + 6, + 1 + ] + ] + }, + { + "id": 60, + "board": [ + [ + 0, + 0, + 9, + 1, + 4, + 5, + 2, + 6, + 0 + ], + [ + 4, + 6, + 7, + 0, + 9, + 0, + 3, + 5, + 0 + ], + [ + 1, + 2, + 0, + 3, + 6, + 0, + 4, + 0, + 9 + ], + [ + 0, + 0, + 2, + 6, + 3, + 0, + 8, + 0, + 4 + ], + [ + 0, + 1, + 6, + 2, + 8, + 4, + 7, + 3, + 0 + ], + [ + 8, + 0, + 3, + 5, + 7, + 0, + 6, + 0, + 2 + ], + [ + 6, + 5, + 1, + 4, + 2, + 3, + 9, + 7, + 8 + ], + [ + 7, + 3, + 4, + 9, + 1, + 8, + 5, + 2, + 6 + ], + [ + 0, + 9, + 8, + 7, + 5, + 6, + 1, + 4, + 3 + ] + ], + "solution": [ + [ + 3, + 8, + 9, + 1, + 4, + 5, + 2, + 6, + 7 + ], + [ + 4, + 6, + 7, + 8, + 9, + 2, + 3, + 5, + 1 + ], + [ + 1, + 2, + 5, + 3, + 6, + 7, + 4, + 8, + 9 + ], + [ + 5, + 7, + 2, + 6, + 3, + 1, + 8, + 9, + 4 + ], + [ + 9, + 1, + 6, + 2, + 8, + 4, + 7, + 3, + 5 + ], + [ + 8, + 4, + 3, + 5, + 7, + 9, + 6, + 1, + 2 + ], + [ + 6, + 5, + 1, + 4, + 2, + 3, + 9, + 7, + 8 + ], + [ + 7, + 3, + 4, + 9, + 1, + 8, + 5, + 2, + 6 + ], + [ + 2, + 9, + 8, + 7, + 5, + 6, + 1, + 4, + 3 + ] + ] + }, + { + "id": 61, + "board": [ + [ + 9, + 2, + 6, + 3, + 8, + 7, + 5, + 0, + 1 + ], + [ + 8, + 1, + 0, + 0, + 5, + 2, + 6, + 9, + 7 + ], + [ + 7, + 4, + 5, + 6, + 9, + 1, + 8, + 2, + 3 + ], + [ + 1, + 0, + 2, + 5, + 7, + 0, + 3, + 8, + 4 + ], + [ + 4, + 5, + 0, + 0, + 2, + 3, + 0, + 6, + 9 + ], + [ + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 5, + 2 + ], + [ + 0, + 3, + 1, + 0, + 6, + 0, + 4, + 7, + 5 + ], + [ + 5, + 0, + 0, + 7, + 1, + 4, + 2, + 3, + 6 + ], + [ + 6, + 7, + 4, + 2, + 3, + 5, + 9, + 1, + 8 + ] + ], + "solution": [ + [ + 9, + 2, + 6, + 3, + 8, + 7, + 5, + 4, + 1 + ], + [ + 8, + 1, + 3, + 4, + 5, + 2, + 6, + 9, + 7 + ], + [ + 7, + 4, + 5, + 6, + 9, + 1, + 8, + 2, + 3 + ], + [ + 1, + 6, + 2, + 5, + 7, + 9, + 3, + 8, + 4 + ], + [ + 4, + 5, + 7, + 8, + 2, + 3, + 1, + 6, + 9 + ], + [ + 3, + 8, + 9, + 1, + 4, + 6, + 7, + 5, + 2 + ], + [ + 2, + 3, + 1, + 9, + 6, + 8, + 4, + 7, + 5 + ], + [ + 5, + 9, + 8, + 7, + 1, + 4, + 2, + 3, + 6 + ], + [ + 6, + 7, + 4, + 2, + 3, + 5, + 9, + 1, + 8 + ] + ] + }, + { + "id": 62, + "board": [ + [ + 3, + 0, + 0, + 7, + 9, + 1, + 8, + 5, + 6 + ], + [ + 0, + 6, + 9, + 8, + 3, + 5, + 4, + 2, + 0 + ], + [ + 0, + 0, + 1, + 0, + 6, + 2, + 9, + 7, + 3 + ], + [ + 2, + 9, + 6, + 3, + 5, + 8, + 0, + 4, + 7 + ], + [ + 5, + 3, + 4, + 1, + 7, + 9, + 6, + 8, + 2 + ], + [ + 1, + 0, + 0, + 6, + 0, + 0, + 3, + 9, + 5 + ], + [ + 4, + 2, + 0, + 0, + 0, + 6, + 0, + 3, + 0 + ], + [ + 0, + 7, + 8, + 5, + 4, + 0, + 2, + 1, + 9 + ], + [ + 9, + 1, + 3, + 2, + 8, + 7, + 5, + 6, + 4 + ] + ], + "solution": [ + [ + 3, + 4, + 2, + 7, + 9, + 1, + 8, + 5, + 6 + ], + [ + 7, + 6, + 9, + 8, + 3, + 5, + 4, + 2, + 1 + ], + [ + 8, + 5, + 1, + 4, + 6, + 2, + 9, + 7, + 3 + ], + [ + 2, + 9, + 6, + 3, + 5, + 8, + 1, + 4, + 7 + ], + [ + 5, + 3, + 4, + 1, + 7, + 9, + 6, + 8, + 2 + ], + [ + 1, + 8, + 7, + 6, + 2, + 4, + 3, + 9, + 5 + ], + [ + 4, + 2, + 5, + 9, + 1, + 6, + 7, + 3, + 8 + ], + [ + 6, + 7, + 8, + 5, + 4, + 3, + 2, + 1, + 9 + ], + [ + 9, + 1, + 3, + 2, + 8, + 7, + 5, + 6, + 4 + ] + ] + }, + { + "id": 63, + "board": [ + [ + 5, + 1, + 8, + 9, + 7, + 6, + 2, + 4, + 3 + ], + [ + 2, + 6, + 4, + 5, + 8, + 3, + 9, + 1, + 7 + ], + [ + 0, + 3, + 0, + 4, + 2, + 1, + 8, + 5, + 6 + ], + [ + 4, + 2, + 5, + 6, + 9, + 8, + 7, + 3, + 1 + ], + [ + 8, + 7, + 1, + 3, + 5, + 2, + 0, + 0, + 0 + ], + [ + 6, + 9, + 3, + 7, + 1, + 0, + 5, + 0, + 8 + ], + [ + 0, + 8, + 6, + 1, + 4, + 5, + 3, + 0, + 2 + ], + [ + 1, + 5, + 0, + 0, + 3, + 0, + 0, + 0, + 0 + ], + [ + 3, + 4, + 0, + 0, + 6, + 0, + 1, + 0, + 5 + ] + ], + "solution": [ + [ + 5, + 1, + 8, + 9, + 7, + 6, + 2, + 4, + 3 + ], + [ + 2, + 6, + 4, + 5, + 8, + 3, + 9, + 1, + 7 + ], + [ + 7, + 3, + 9, + 4, + 2, + 1, + 8, + 5, + 6 + ], + [ + 4, + 2, + 5, + 6, + 9, + 8, + 7, + 3, + 1 + ], + [ + 8, + 7, + 1, + 3, + 5, + 2, + 4, + 6, + 9 + ], + [ + 6, + 9, + 3, + 7, + 1, + 4, + 5, + 2, + 8 + ], + [ + 9, + 8, + 6, + 1, + 4, + 5, + 3, + 7, + 2 + ], + [ + 1, + 5, + 2, + 8, + 3, + 7, + 6, + 9, + 4 + ], + [ + 3, + 4, + 7, + 2, + 6, + 9, + 1, + 8, + 5 + ] + ] + }, + { + "id": 64, + "board": [ + [ + 7, + 0, + 0, + 0, + 1, + 0, + 9, + 8, + 0 + ], + [ + 8, + 0, + 1, + 0, + 7, + 6, + 4, + 2, + 0 + ], + [ + 4, + 0, + 0, + 0, + 5, + 0, + 7, + 1, + 0 + ], + [ + 1, + 2, + 4, + 6, + 9, + 5, + 3, + 7, + 8 + ], + [ + 6, + 8, + 0, + 7, + 2, + 3, + 1, + 4, + 9 + ], + [ + 9, + 3, + 7, + 0, + 8, + 0, + 6, + 5, + 2 + ], + [ + 5, + 4, + 9, + 0, + 3, + 0, + 2, + 6, + 7 + ], + [ + 2, + 0, + 6, + 5, + 4, + 9, + 8, + 3, + 1 + ], + [ + 3, + 1, + 8, + 2, + 6, + 7, + 5, + 9, + 4 + ] + ], + "solution": [ + [ + 7, + 5, + 3, + 4, + 1, + 2, + 9, + 8, + 6 + ], + [ + 8, + 9, + 1, + 3, + 7, + 6, + 4, + 2, + 5 + ], + [ + 4, + 6, + 2, + 9, + 5, + 8, + 7, + 1, + 3 + ], + [ + 1, + 2, + 4, + 6, + 9, + 5, + 3, + 7, + 8 + ], + [ + 6, + 8, + 5, + 7, + 2, + 3, + 1, + 4, + 9 + ], + [ + 9, + 3, + 7, + 1, + 8, + 4, + 6, + 5, + 2 + ], + [ + 5, + 4, + 9, + 8, + 3, + 1, + 2, + 6, + 7 + ], + [ + 2, + 7, + 6, + 5, + 4, + 9, + 8, + 3, + 1 + ], + [ + 3, + 1, + 8, + 2, + 6, + 7, + 5, + 9, + 4 + ] + ] + }, + { + "id": 65, + "board": [ + [ + 5, + 4, + 2, + 6, + 9, + 1, + 7, + 8, + 3 + ], + [ + 0, + 0, + 0, + 5, + 7, + 3, + 2, + 0, + 0 + ], + [ + 6, + 3, + 7, + 4, + 8, + 2, + 1, + 5, + 9 + ], + [ + 2, + 6, + 0, + 3, + 0, + 7, + 0, + 9, + 5 + ], + [ + 0, + 7, + 0, + 2, + 6, + 5, + 0, + 3, + 1 + ], + [ + 0, + 5, + 3, + 9, + 0, + 8, + 6, + 2, + 7 + ], + [ + 0, + 0, + 0, + 8, + 3, + 6, + 5, + 7, + 2 + ], + [ + 3, + 2, + 6, + 7, + 5, + 4, + 9, + 1, + 8 + ], + [ + 0, + 8, + 5, + 1, + 2, + 9, + 3, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 4, + 2, + 6, + 9, + 1, + 7, + 8, + 3 + ], + [ + 8, + 1, + 9, + 5, + 7, + 3, + 2, + 4, + 6 + ], + [ + 6, + 3, + 7, + 4, + 8, + 2, + 1, + 5, + 9 + ], + [ + 2, + 6, + 4, + 3, + 1, + 7, + 8, + 9, + 5 + ], + [ + 9, + 7, + 8, + 2, + 6, + 5, + 4, + 3, + 1 + ], + [ + 1, + 5, + 3, + 9, + 4, + 8, + 6, + 2, + 7 + ], + [ + 4, + 9, + 1, + 8, + 3, + 6, + 5, + 7, + 2 + ], + [ + 3, + 2, + 6, + 7, + 5, + 4, + 9, + 1, + 8 + ], + [ + 7, + 8, + 5, + 1, + 2, + 9, + 3, + 6, + 4 + ] + ] + }, + { + "id": 66, + "board": [ + [ + 0, + 0, + 0, + 0, + 9, + 0, + 1, + 5, + 2 + ], + [ + 5, + 8, + 0, + 1, + 3, + 2, + 7, + 9, + 4 + ], + [ + 1, + 2, + 9, + 4, + 5, + 7, + 8, + 0, + 6 + ], + [ + 2, + 0, + 0, + 0, + 4, + 0, + 0, + 6, + 1 + ], + [ + 8, + 0, + 0, + 0, + 6, + 1, + 5, + 2, + 9 + ], + [ + 6, + 1, + 0, + 0, + 2, + 9, + 4, + 8, + 7 + ], + [ + 4, + 6, + 8, + 0, + 7, + 0, + 9, + 1, + 3 + ], + [ + 9, + 7, + 1, + 6, + 8, + 3, + 2, + 4, + 5 + ], + [ + 3, + 5, + 2, + 9, + 1, + 4, + 6, + 7, + 8 + ] + ], + "solution": [ + [ + 7, + 3, + 4, + 8, + 9, + 6, + 1, + 5, + 2 + ], + [ + 5, + 8, + 6, + 1, + 3, + 2, + 7, + 9, + 4 + ], + [ + 1, + 2, + 9, + 4, + 5, + 7, + 8, + 3, + 6 + ], + [ + 2, + 9, + 5, + 7, + 4, + 8, + 3, + 6, + 1 + ], + [ + 8, + 4, + 7, + 3, + 6, + 1, + 5, + 2, + 9 + ], + [ + 6, + 1, + 3, + 5, + 2, + 9, + 4, + 8, + 7 + ], + [ + 4, + 6, + 8, + 2, + 7, + 5, + 9, + 1, + 3 + ], + [ + 9, + 7, + 1, + 6, + 8, + 3, + 2, + 4, + 5 + ], + [ + 3, + 5, + 2, + 9, + 1, + 4, + 6, + 7, + 8 + ] + ] + }, + { + "id": 67, + "board": [ + [ + 0, + 3, + 8, + 2, + 9, + 6, + 4, + 0, + 5 + ], + [ + 1, + 2, + 9, + 8, + 0, + 0, + 3, + 7, + 6 + ], + [ + 6, + 5, + 0, + 7, + 0, + 1, + 9, + 8, + 0 + ], + [ + 9, + 8, + 6, + 3, + 7, + 0, + 5, + 4, + 1 + ], + [ + 0, + 0, + 2, + 1, + 0, + 9, + 8, + 0, + 0 + ], + [ + 0, + 1, + 3, + 6, + 8, + 0, + 2, + 9, + 0 + ], + [ + 2, + 9, + 1, + 4, + 6, + 3, + 7, + 5, + 8 + ], + [ + 8, + 6, + 5, + 9, + 0, + 7, + 0, + 3, + 0 + ], + [ + 3, + 4, + 7, + 5, + 1, + 8, + 6, + 2, + 9 + ] + ], + "solution": [ + [ + 7, + 3, + 8, + 2, + 9, + 6, + 4, + 1, + 5 + ], + [ + 1, + 2, + 9, + 8, + 4, + 5, + 3, + 7, + 6 + ], + [ + 6, + 5, + 4, + 7, + 3, + 1, + 9, + 8, + 2 + ], + [ + 9, + 8, + 6, + 3, + 7, + 2, + 5, + 4, + 1 + ], + [ + 4, + 7, + 2, + 1, + 5, + 9, + 8, + 6, + 3 + ], + [ + 5, + 1, + 3, + 6, + 8, + 4, + 2, + 9, + 7 + ], + [ + 2, + 9, + 1, + 4, + 6, + 3, + 7, + 5, + 8 + ], + [ + 8, + 6, + 5, + 9, + 2, + 7, + 1, + 3, + 4 + ], + [ + 3, + 4, + 7, + 5, + 1, + 8, + 6, + 2, + 9 + ] + ] + }, + { + "id": 68, + "board": [ + [ + 0, + 1, + 3, + 6, + 9, + 8, + 7, + 0, + 5 + ], + [ + 0, + 5, + 0, + 3, + 2, + 4, + 0, + 9, + 1 + ], + [ + 9, + 8, + 0, + 1, + 7, + 5, + 3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 8, + 6, + 1, + 2, + 5, + 3 + ], + [ + 1, + 2, + 5, + 9, + 4, + 3, + 6, + 8, + 7 + ], + [ + 3, + 6, + 8, + 2, + 5, + 7, + 0, + 0, + 9 + ], + [ + 5, + 3, + 9, + 7, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 7, + 0, + 4, + 1, + 9, + 5, + 3, + 8 + ], + [ + 8, + 4, + 1, + 5, + 3, + 6, + 9, + 7, + 2 + ] + ], + "solution": [ + [ + 2, + 1, + 3, + 6, + 9, + 8, + 7, + 4, + 5 + ], + [ + 7, + 5, + 6, + 3, + 2, + 4, + 8, + 9, + 1 + ], + [ + 9, + 8, + 4, + 1, + 7, + 5, + 3, + 2, + 6 + ], + [ + 4, + 9, + 7, + 8, + 6, + 1, + 2, + 5, + 3 + ], + [ + 1, + 2, + 5, + 9, + 4, + 3, + 6, + 8, + 7 + ], + [ + 3, + 6, + 8, + 2, + 5, + 7, + 4, + 1, + 9 + ], + [ + 5, + 3, + 9, + 7, + 8, + 2, + 1, + 6, + 4 + ], + [ + 6, + 7, + 2, + 4, + 1, + 9, + 5, + 3, + 8 + ], + [ + 8, + 4, + 1, + 5, + 3, + 6, + 9, + 7, + 2 + ] + ] + }, + { + "id": 69, + "board": [ + [ + 8, + 7, + 1, + 6, + 5, + 0, + 3, + 2, + 9 + ], + [ + 6, + 3, + 0, + 7, + 0, + 0, + 5, + 8, + 4 + ], + [ + 0, + 5, + 2, + 3, + 8, + 9, + 1, + 7, + 6 + ], + [ + 3, + 1, + 5, + 4, + 2, + 0, + 9, + 6, + 8 + ], + [ + 7, + 4, + 8, + 9, + 0, + 5, + 2, + 1, + 3 + ], + [ + 2, + 9, + 6, + 8, + 3, + 1, + 4, + 5, + 7 + ], + [ + 0, + 6, + 3, + 0, + 4, + 8, + 7, + 9, + 0 + ], + [ + 0, + 8, + 0, + 0, + 0, + 3, + 6, + 4, + 0 + ], + [ + 0, + 0, + 4, + 0, + 7, + 6, + 0, + 3, + 5 + ] + ], + "solution": [ + [ + 8, + 7, + 1, + 6, + 5, + 4, + 3, + 2, + 9 + ], + [ + 6, + 3, + 9, + 7, + 1, + 2, + 5, + 8, + 4 + ], + [ + 4, + 5, + 2, + 3, + 8, + 9, + 1, + 7, + 6 + ], + [ + 3, + 1, + 5, + 4, + 2, + 7, + 9, + 6, + 8 + ], + [ + 7, + 4, + 8, + 9, + 6, + 5, + 2, + 1, + 3 + ], + [ + 2, + 9, + 6, + 8, + 3, + 1, + 4, + 5, + 7 + ], + [ + 1, + 6, + 3, + 5, + 4, + 8, + 7, + 9, + 2 + ], + [ + 5, + 8, + 7, + 2, + 9, + 3, + 6, + 4, + 1 + ], + [ + 9, + 2, + 4, + 1, + 7, + 6, + 8, + 3, + 5 + ] + ] + }, + { + "id": 70, + "board": [ + [ + 1, + 0, + 5, + 0, + 7, + 9, + 2, + 3, + 0 + ], + [ + 0, + 4, + 9, + 3, + 2, + 0, + 8, + 5, + 7 + ], + [ + 3, + 0, + 7, + 6, + 8, + 5, + 4, + 1, + 9 + ], + [ + 7, + 1, + 4, + 5, + 9, + 8, + 6, + 2, + 3 + ], + [ + 5, + 0, + 8, + 2, + 0, + 7, + 0, + 0, + 1 + ], + [ + 2, + 9, + 3, + 0, + 0, + 0, + 5, + 7, + 0 + ], + [ + 8, + 7, + 2, + 9, + 0, + 3, + 1, + 0, + 4 + ], + [ + 0, + 5, + 1, + 7, + 0, + 0, + 3, + 8, + 2 + ], + [ + 4, + 3, + 6, + 8, + 1, + 2, + 7, + 9, + 5 + ] + ], + "solution": [ + [ + 1, + 8, + 5, + 4, + 7, + 9, + 2, + 3, + 6 + ], + [ + 6, + 4, + 9, + 3, + 2, + 1, + 8, + 5, + 7 + ], + [ + 3, + 2, + 7, + 6, + 8, + 5, + 4, + 1, + 9 + ], + [ + 7, + 1, + 4, + 5, + 9, + 8, + 6, + 2, + 3 + ], + [ + 5, + 6, + 8, + 2, + 3, + 7, + 9, + 4, + 1 + ], + [ + 2, + 9, + 3, + 1, + 4, + 6, + 5, + 7, + 8 + ], + [ + 8, + 7, + 2, + 9, + 5, + 3, + 1, + 6, + 4 + ], + [ + 9, + 5, + 1, + 7, + 6, + 4, + 3, + 8, + 2 + ], + [ + 4, + 3, + 6, + 8, + 1, + 2, + 7, + 9, + 5 + ] + ] + }, + { + "id": 71, + "board": [ + [ + 2, + 6, + 0, + 9, + 5, + 8, + 3, + 4, + 1 + ], + [ + 0, + 0, + 8, + 0, + 6, + 0, + 7, + 2, + 0 + ], + [ + 0, + 3, + 4, + 1, + 7, + 2, + 8, + 0, + 9 + ], + [ + 4, + 5, + 0, + 0, + 2, + 1, + 9, + 3, + 7 + ], + [ + 3, + 7, + 2, + 5, + 9, + 6, + 1, + 8, + 4 + ], + [ + 0, + 8, + 9, + 4, + 3, + 7, + 0, + 5, + 0 + ], + [ + 0, + 4, + 3, + 2, + 1, + 9, + 5, + 7, + 0 + ], + [ + 7, + 2, + 1, + 6, + 8, + 5, + 4, + 9, + 3 + ], + [ + 0, + 9, + 5, + 7, + 0, + 3, + 0, + 1, + 0 + ] + ], + "solution": [ + [ + 2, + 6, + 7, + 9, + 5, + 8, + 3, + 4, + 1 + ], + [ + 9, + 1, + 8, + 3, + 6, + 4, + 7, + 2, + 5 + ], + [ + 5, + 3, + 4, + 1, + 7, + 2, + 8, + 6, + 9 + ], + [ + 4, + 5, + 6, + 8, + 2, + 1, + 9, + 3, + 7 + ], + [ + 3, + 7, + 2, + 5, + 9, + 6, + 1, + 8, + 4 + ], + [ + 1, + 8, + 9, + 4, + 3, + 7, + 2, + 5, + 6 + ], + [ + 6, + 4, + 3, + 2, + 1, + 9, + 5, + 7, + 8 + ], + [ + 7, + 2, + 1, + 6, + 8, + 5, + 4, + 9, + 3 + ], + [ + 8, + 9, + 5, + 7, + 4, + 3, + 6, + 1, + 2 + ] + ] + }, + { + "id": 72, + "board": [ + [ + 1, + 2, + 4, + 5, + 9, + 3, + 7, + 0, + 8 + ], + [ + 9, + 0, + 8, + 1, + 7, + 4, + 5, + 2, + 3 + ], + [ + 5, + 7, + 3, + 0, + 0, + 6, + 4, + 0, + 9 + ], + [ + 0, + 0, + 2, + 0, + 1, + 8, + 0, + 7, + 0 + ], + [ + 7, + 4, + 5, + 3, + 0, + 9, + 1, + 8, + 2 + ], + [ + 8, + 3, + 1, + 0, + 5, + 7, + 6, + 9, + 4 + ], + [ + 3, + 8, + 0, + 7, + 4, + 0, + 9, + 5, + 1 + ], + [ + 4, + 0, + 0, + 6, + 8, + 0, + 2, + 3, + 7 + ], + [ + 2, + 0, + 7, + 9, + 0, + 5, + 8, + 4, + 6 + ] + ], + "solution": [ + [ + 1, + 2, + 4, + 5, + 9, + 3, + 7, + 6, + 8 + ], + [ + 9, + 6, + 8, + 1, + 7, + 4, + 5, + 2, + 3 + ], + [ + 5, + 7, + 3, + 8, + 2, + 6, + 4, + 1, + 9 + ], + [ + 6, + 9, + 2, + 4, + 1, + 8, + 3, + 7, + 5 + ], + [ + 7, + 4, + 5, + 3, + 6, + 9, + 1, + 8, + 2 + ], + [ + 8, + 3, + 1, + 2, + 5, + 7, + 6, + 9, + 4 + ], + [ + 3, + 8, + 6, + 7, + 4, + 2, + 9, + 5, + 1 + ], + [ + 4, + 5, + 9, + 6, + 8, + 1, + 2, + 3, + 7 + ], + [ + 2, + 1, + 7, + 9, + 3, + 5, + 8, + 4, + 6 + ] + ] + }, + { + "id": 73, + "board": [ + [ + 7, + 6, + 5, + 0, + 0, + 0, + 4, + 0, + 8 + ], + [ + 3, + 4, + 1, + 6, + 0, + 8, + 7, + 0, + 2 + ], + [ + 8, + 9, + 2, + 5, + 0, + 7, + 6, + 3, + 0 + ], + [ + 9, + 8, + 3, + 4, + 1, + 5, + 2, + 7, + 6 + ], + [ + 0, + 5, + 7, + 9, + 8, + 6, + 1, + 4, + 3 + ], + [ + 4, + 1, + 6, + 2, + 7, + 3, + 9, + 8, + 5 + ], + [ + 5, + 7, + 4, + 0, + 0, + 0, + 0, + 0, + 9 + ], + [ + 6, + 2, + 9, + 0, + 5, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 8, + 7, + 6, + 9, + 5, + 2, + 4 + ] + ], + "solution": [ + [ + 7, + 6, + 5, + 1, + 3, + 2, + 4, + 9, + 8 + ], + [ + 3, + 4, + 1, + 6, + 9, + 8, + 7, + 5, + 2 + ], + [ + 8, + 9, + 2, + 5, + 4, + 7, + 6, + 3, + 1 + ], + [ + 9, + 8, + 3, + 4, + 1, + 5, + 2, + 7, + 6 + ], + [ + 2, + 5, + 7, + 9, + 8, + 6, + 1, + 4, + 3 + ], + [ + 4, + 1, + 6, + 2, + 7, + 3, + 9, + 8, + 5 + ], + [ + 5, + 7, + 4, + 3, + 2, + 1, + 8, + 6, + 9 + ], + [ + 6, + 2, + 9, + 8, + 5, + 4, + 3, + 1, + 7 + ], + [ + 1, + 3, + 8, + 7, + 6, + 9, + 5, + 2, + 4 + ] + ] + }, + { + "id": 74, + "board": [ + [ + 3, + 5, + 4, + 7, + 6, + 9, + 1, + 2, + 8 + ], + [ + 6, + 1, + 7, + 0, + 2, + 8, + 3, + 0, + 9 + ], + [ + 2, + 9, + 8, + 0, + 3, + 1, + 0, + 0, + 6 + ], + [ + 8, + 3, + 6, + 2, + 7, + 0, + 9, + 1, + 0 + ], + [ + 4, + 2, + 5, + 9, + 1, + 3, + 6, + 8, + 7 + ], + [ + 9, + 7, + 1, + 6, + 8, + 0, + 0, + 3, + 0 + ], + [ + 0, + 4, + 3, + 8, + 9, + 2, + 0, + 6, + 1 + ], + [ + 0, + 8, + 0, + 1, + 4, + 6, + 0, + 0, + 3 + ], + [ + 1, + 6, + 0, + 3, + 5, + 7, + 8, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 5, + 4, + 7, + 6, + 9, + 1, + 2, + 8 + ], + [ + 6, + 1, + 7, + 4, + 2, + 8, + 3, + 5, + 9 + ], + [ + 2, + 9, + 8, + 5, + 3, + 1, + 4, + 7, + 6 + ], + [ + 8, + 3, + 6, + 2, + 7, + 4, + 9, + 1, + 5 + ], + [ + 4, + 2, + 5, + 9, + 1, + 3, + 6, + 8, + 7 + ], + [ + 9, + 7, + 1, + 6, + 8, + 5, + 2, + 3, + 4 + ], + [ + 5, + 4, + 3, + 8, + 9, + 2, + 7, + 6, + 1 + ], + [ + 7, + 8, + 2, + 1, + 4, + 6, + 5, + 9, + 3 + ], + [ + 1, + 6, + 9, + 3, + 5, + 7, + 8, + 4, + 2 + ] + ] + }, + { + "id": 75, + "board": [ + [ + 0, + 0, + 1, + 6, + 0, + 9, + 0, + 3, + 0 + ], + [ + 3, + 4, + 0, + 8, + 1, + 5, + 0, + 7, + 9 + ], + [ + 8, + 2, + 9, + 3, + 4, + 0, + 6, + 5, + 1 + ], + [ + 0, + 6, + 5, + 9, + 3, + 1, + 7, + 8, + 0 + ], + [ + 1, + 0, + 8, + 7, + 6, + 2, + 4, + 9, + 5 + ], + [ + 0, + 9, + 7, + 4, + 5, + 8, + 1, + 6, + 0 + ], + [ + 0, + 0, + 4, + 2, + 9, + 6, + 3, + 1, + 8 + ], + [ + 6, + 1, + 2, + 5, + 0, + 3, + 9, + 4, + 7 + ], + [ + 9, + 0, + 3, + 1, + 0, + 4, + 5, + 2, + 0 + ] + ], + "solution": [ + [ + 5, + 7, + 1, + 6, + 2, + 9, + 8, + 3, + 4 + ], + [ + 3, + 4, + 6, + 8, + 1, + 5, + 2, + 7, + 9 + ], + [ + 8, + 2, + 9, + 3, + 4, + 7, + 6, + 5, + 1 + ], + [ + 4, + 6, + 5, + 9, + 3, + 1, + 7, + 8, + 2 + ], + [ + 1, + 3, + 8, + 7, + 6, + 2, + 4, + 9, + 5 + ], + [ + 2, + 9, + 7, + 4, + 5, + 8, + 1, + 6, + 3 + ], + [ + 7, + 5, + 4, + 2, + 9, + 6, + 3, + 1, + 8 + ], + [ + 6, + 1, + 2, + 5, + 8, + 3, + 9, + 4, + 7 + ], + [ + 9, + 8, + 3, + 1, + 7, + 4, + 5, + 2, + 6 + ] + ] + }, + { + "id": 76, + "board": [ + [ + 2, + 5, + 6, + 0, + 0, + 0, + 3, + 9, + 4 + ], + [ + 1, + 9, + 4, + 0, + 6, + 0, + 2, + 7, + 8 + ], + [ + 7, + 8, + 3, + 9, + 2, + 4, + 1, + 5, + 6 + ], + [ + 8, + 3, + 1, + 4, + 7, + 2, + 9, + 6, + 5 + ], + [ + 9, + 7, + 5, + 6, + 3, + 1, + 8, + 4, + 2 + ], + [ + 6, + 4, + 2, + 0, + 9, + 0, + 7, + 3, + 1 + ], + [ + 5, + 1, + 0, + 2, + 4, + 0, + 6, + 8, + 0 + ], + [ + 3, + 2, + 0, + 0, + 5, + 6, + 0, + 1, + 0 + ], + [ + 4, + 6, + 0, + 0, + 0, + 0, + 5, + 2, + 0 + ] + ], + "solution": [ + [ + 2, + 5, + 6, + 8, + 1, + 7, + 3, + 9, + 4 + ], + [ + 1, + 9, + 4, + 3, + 6, + 5, + 2, + 7, + 8 + ], + [ + 7, + 8, + 3, + 9, + 2, + 4, + 1, + 5, + 6 + ], + [ + 8, + 3, + 1, + 4, + 7, + 2, + 9, + 6, + 5 + ], + [ + 9, + 7, + 5, + 6, + 3, + 1, + 8, + 4, + 2 + ], + [ + 6, + 4, + 2, + 5, + 9, + 8, + 7, + 3, + 1 + ], + [ + 5, + 1, + 7, + 2, + 4, + 9, + 6, + 8, + 3 + ], + [ + 3, + 2, + 8, + 7, + 5, + 6, + 4, + 1, + 9 + ], + [ + 4, + 6, + 9, + 1, + 8, + 3, + 5, + 2, + 7 + ] + ] + }, + { + "id": 77, + "board": [ + [ + 9, + 3, + 0, + 1, + 8, + 0, + 4, + 6, + 2 + ], + [ + 2, + 6, + 1, + 0, + 7, + 4, + 0, + 5, + 8 + ], + [ + 0, + 4, + 0, + 0, + 2, + 6, + 7, + 0, + 0 + ], + [ + 0, + 7, + 9, + 5, + 1, + 3, + 2, + 0, + 6 + ], + [ + 1, + 2, + 3, + 6, + 9, + 8, + 5, + 4, + 7 + ], + [ + 6, + 5, + 8, + 2, + 4, + 7, + 0, + 0, + 0 + ], + [ + 7, + 1, + 2, + 4, + 6, + 9, + 8, + 3, + 0 + ], + [ + 3, + 9, + 6, + 8, + 5, + 2, + 1, + 7, + 0 + ], + [ + 0, + 0, + 0, + 7, + 3, + 1, + 6, + 2, + 9 + ] + ], + "solution": [ + [ + 9, + 3, + 7, + 1, + 8, + 5, + 4, + 6, + 2 + ], + [ + 2, + 6, + 1, + 3, + 7, + 4, + 9, + 5, + 8 + ], + [ + 8, + 4, + 5, + 9, + 2, + 6, + 7, + 1, + 3 + ], + [ + 4, + 7, + 9, + 5, + 1, + 3, + 2, + 8, + 6 + ], + [ + 1, + 2, + 3, + 6, + 9, + 8, + 5, + 4, + 7 + ], + [ + 6, + 5, + 8, + 2, + 4, + 7, + 3, + 9, + 1 + ], + [ + 7, + 1, + 2, + 4, + 6, + 9, + 8, + 3, + 5 + ], + [ + 3, + 9, + 6, + 8, + 5, + 2, + 1, + 7, + 4 + ], + [ + 5, + 8, + 4, + 7, + 3, + 1, + 6, + 2, + 9 + ] + ] + }, + { + "id": 78, + "board": [ + [ + 5, + 0, + 6, + 3, + 0, + 9, + 7, + 8, + 1 + ], + [ + 8, + 7, + 3, + 0, + 0, + 1, + 0, + 0, + 9 + ], + [ + 1, + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 0 + ], + [ + 9, + 3, + 5, + 0, + 0, + 2, + 1, + 7, + 4 + ], + [ + 2, + 6, + 4, + 7, + 1, + 3, + 9, + 5, + 8 + ], + [ + 7, + 1, + 8, + 9, + 5, + 4, + 6, + 0, + 0 + ], + [ + 3, + 0, + 0, + 1, + 7, + 5, + 8, + 4, + 6 + ], + [ + 6, + 5, + 1, + 4, + 3, + 8, + 2, + 9, + 7 + ], + [ + 4, + 8, + 7, + 2, + 9, + 6, + 3, + 1, + 5 + ] + ], + "solution": [ + [ + 5, + 2, + 6, + 3, + 4, + 9, + 7, + 8, + 1 + ], + [ + 8, + 7, + 3, + 5, + 2, + 1, + 4, + 6, + 9 + ], + [ + 1, + 4, + 9, + 6, + 8, + 7, + 5, + 2, + 3 + ], + [ + 9, + 3, + 5, + 8, + 6, + 2, + 1, + 7, + 4 + ], + [ + 2, + 6, + 4, + 7, + 1, + 3, + 9, + 5, + 8 + ], + [ + 7, + 1, + 8, + 9, + 5, + 4, + 6, + 3, + 2 + ], + [ + 3, + 9, + 2, + 1, + 7, + 5, + 8, + 4, + 6 + ], + [ + 6, + 5, + 1, + 4, + 3, + 8, + 2, + 9, + 7 + ], + [ + 4, + 8, + 7, + 2, + 9, + 6, + 3, + 1, + 5 + ] + ] + }, + { + "id": 79, + "board": [ + [ + 7, + 4, + 8, + 9, + 5, + 2, + 0, + 0, + 0 + ], + [ + 5, + 3, + 1, + 8, + 4, + 6, + 7, + 2, + 9 + ], + [ + 6, + 2, + 9, + 3, + 7, + 1, + 0, + 8, + 0 + ], + [ + 8, + 9, + 0, + 1, + 6, + 0, + 2, + 5, + 7 + ], + [ + 1, + 6, + 5, + 7, + 2, + 0, + 0, + 9, + 0 + ], + [ + 2, + 7, + 0, + 5, + 9, + 0, + 0, + 0, + 0 + ], + [ + 3, + 8, + 7, + 6, + 1, + 5, + 9, + 4, + 2 + ], + [ + 4, + 0, + 6, + 2, + 3, + 9, + 8, + 7, + 1 + ], + [ + 9, + 1, + 2, + 4, + 8, + 7, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 7, + 4, + 8, + 9, + 5, + 2, + 1, + 6, + 3 + ], + [ + 5, + 3, + 1, + 8, + 4, + 6, + 7, + 2, + 9 + ], + [ + 6, + 2, + 9, + 3, + 7, + 1, + 4, + 8, + 5 + ], + [ + 8, + 9, + 3, + 1, + 6, + 4, + 2, + 5, + 7 + ], + [ + 1, + 6, + 5, + 7, + 2, + 8, + 3, + 9, + 4 + ], + [ + 2, + 7, + 4, + 5, + 9, + 3, + 6, + 1, + 8 + ], + [ + 3, + 8, + 7, + 6, + 1, + 5, + 9, + 4, + 2 + ], + [ + 4, + 5, + 6, + 2, + 3, + 9, + 8, + 7, + 1 + ], + [ + 9, + 1, + 2, + 4, + 8, + 7, + 5, + 3, + 6 + ] + ] + }, + { + "id": 80, + "board": [ + [ + 9, + 4, + 8, + 3, + 5, + 2, + 6, + 1, + 7 + ], + [ + 6, + 5, + 2, + 8, + 7, + 1, + 9, + 4, + 3 + ], + [ + 7, + 3, + 1, + 4, + 6, + 9, + 0, + 0, + 0 + ], + [ + 2, + 1, + 9, + 7, + 4, + 3, + 0, + 0, + 0 + ], + [ + 4, + 6, + 7, + 2, + 8, + 5, + 1, + 3, + 9 + ], + [ + 5, + 8, + 3, + 9, + 1, + 0, + 7, + 2, + 4 + ], + [ + 3, + 7, + 5, + 6, + 2, + 8, + 0, + 0, + 0 + ], + [ + 1, + 9, + 0, + 5, + 3, + 0, + 0, + 0, + 0 + ], + [ + 8, + 2, + 0, + 1, + 9, + 0, + 3, + 0, + 0 + ] + ], + "solution": [ + [ + 9, + 4, + 8, + 3, + 5, + 2, + 6, + 1, + 7 + ], + [ + 6, + 5, + 2, + 8, + 7, + 1, + 9, + 4, + 3 + ], + [ + 7, + 3, + 1, + 4, + 6, + 9, + 2, + 5, + 8 + ], + [ + 2, + 1, + 9, + 7, + 4, + 3, + 5, + 8, + 6 + ], + [ + 4, + 6, + 7, + 2, + 8, + 5, + 1, + 3, + 9 + ], + [ + 5, + 8, + 3, + 9, + 1, + 6, + 7, + 2, + 4 + ], + [ + 3, + 7, + 5, + 6, + 2, + 8, + 4, + 9, + 1 + ], + [ + 1, + 9, + 4, + 5, + 3, + 7, + 8, + 6, + 2 + ], + [ + 8, + 2, + 6, + 1, + 9, + 4, + 3, + 7, + 5 + ] + ] + }, + { + "id": 81, + "board": [ + [ + 0, + 2, + 8, + 9, + 1, + 5, + 0, + 7, + 0 + ], + [ + 9, + 4, + 1, + 0, + 6, + 3, + 0, + 5, + 0 + ], + [ + 7, + 6, + 5, + 4, + 8, + 2, + 9, + 1, + 0 + ], + [ + 0, + 0, + 9, + 1, + 2, + 0, + 0, + 6, + 7 + ], + [ + 6, + 1, + 7, + 0, + 0, + 0, + 5, + 8, + 2 + ], + [ + 8, + 0, + 2, + 6, + 5, + 0, + 4, + 0, + 1 + ], + [ + 2, + 0, + 6, + 0, + 3, + 1, + 7, + 4, + 5 + ], + [ + 1, + 7, + 3, + 5, + 9, + 4, + 8, + 2, + 6 + ], + [ + 5, + 8, + 4, + 2, + 7, + 6, + 1, + 3, + 9 + ] + ], + "solution": [ + [ + 3, + 2, + 8, + 9, + 1, + 5, + 6, + 7, + 4 + ], + [ + 9, + 4, + 1, + 7, + 6, + 3, + 2, + 5, + 8 + ], + [ + 7, + 6, + 5, + 4, + 8, + 2, + 9, + 1, + 3 + ], + [ + 4, + 5, + 9, + 1, + 2, + 8, + 3, + 6, + 7 + ], + [ + 6, + 1, + 7, + 3, + 4, + 9, + 5, + 8, + 2 + ], + [ + 8, + 3, + 2, + 6, + 5, + 7, + 4, + 9, + 1 + ], + [ + 2, + 9, + 6, + 8, + 3, + 1, + 7, + 4, + 5 + ], + [ + 1, + 7, + 3, + 5, + 9, + 4, + 8, + 2, + 6 + ], + [ + 5, + 8, + 4, + 2, + 7, + 6, + 1, + 3, + 9 + ] + ] + }, + { + "id": 82, + "board": [ + [ + 4, + 2, + 5, + 1, + 9, + 0, + 6, + 3, + 8 + ], + [ + 7, + 0, + 3, + 8, + 0, + 0, + 1, + 4, + 0 + ], + [ + 8, + 0, + 1, + 3, + 4, + 0, + 9, + 7, + 0 + ], + [ + 2, + 3, + 8, + 0, + 0, + 0, + 4, + 1, + 9 + ], + [ + 6, + 1, + 9, + 2, + 8, + 4, + 7, + 5, + 0 + ], + [ + 5, + 4, + 7, + 9, + 1, + 0, + 2, + 8, + 6 + ], + [ + 0, + 5, + 2, + 7, + 3, + 0, + 8, + 6, + 4 + ], + [ + 3, + 7, + 6, + 4, + 2, + 8, + 5, + 9, + 1 + ], + [ + 0, + 8, + 4, + 0, + 0, + 0, + 3, + 2, + 7 + ] + ], + "solution": [ + [ + 4, + 2, + 5, + 1, + 9, + 7, + 6, + 3, + 8 + ], + [ + 7, + 9, + 3, + 8, + 5, + 6, + 1, + 4, + 2 + ], + [ + 8, + 6, + 1, + 3, + 4, + 2, + 9, + 7, + 5 + ], + [ + 2, + 3, + 8, + 6, + 7, + 5, + 4, + 1, + 9 + ], + [ + 6, + 1, + 9, + 2, + 8, + 4, + 7, + 5, + 3 + ], + [ + 5, + 4, + 7, + 9, + 1, + 3, + 2, + 8, + 6 + ], + [ + 1, + 5, + 2, + 7, + 3, + 9, + 8, + 6, + 4 + ], + [ + 3, + 7, + 6, + 4, + 2, + 8, + 5, + 9, + 1 + ], + [ + 9, + 8, + 4, + 5, + 6, + 1, + 3, + 2, + 7 + ] + ] + }, + { + "id": 83, + "board": [ + [ + 7, + 6, + 9, + 2, + 3, + 5, + 8, + 1, + 4 + ], + [ + 0, + 3, + 0, + 0, + 8, + 0, + 2, + 0, + 9 + ], + [ + 0, + 8, + 2, + 0, + 9, + 6, + 5, + 3, + 7 + ], + [ + 6, + 0, + 0, + 5, + 1, + 3, + 0, + 2, + 0 + ], + [ + 5, + 0, + 0, + 6, + 2, + 4, + 7, + 9, + 3 + ], + [ + 0, + 4, + 0, + 9, + 0, + 0, + 6, + 5, + 1 + ], + [ + 3, + 2, + 6, + 0, + 4, + 0, + 9, + 8, + 5 + ], + [ + 8, + 5, + 4, + 3, + 6, + 9, + 1, + 7, + 2 + ], + [ + 9, + 7, + 1, + 8, + 5, + 2, + 3, + 4, + 6 + ] + ], + "solution": [ + [ + 7, + 6, + 9, + 2, + 3, + 5, + 8, + 1, + 4 + ], + [ + 1, + 3, + 5, + 4, + 8, + 7, + 2, + 6, + 9 + ], + [ + 4, + 8, + 2, + 1, + 9, + 6, + 5, + 3, + 7 + ], + [ + 6, + 9, + 7, + 5, + 1, + 3, + 4, + 2, + 8 + ], + [ + 5, + 1, + 8, + 6, + 2, + 4, + 7, + 9, + 3 + ], + [ + 2, + 4, + 3, + 9, + 7, + 8, + 6, + 5, + 1 + ], + [ + 3, + 2, + 6, + 7, + 4, + 1, + 9, + 8, + 5 + ], + [ + 8, + 5, + 4, + 3, + 6, + 9, + 1, + 7, + 2 + ], + [ + 9, + 7, + 1, + 8, + 5, + 2, + 3, + 4, + 6 + ] + ] + }, + { + "id": 84, + "board": [ + [ + 0, + 8, + 5, + 4, + 2, + 9, + 0, + 3, + 1 + ], + [ + 1, + 9, + 2, + 5, + 3, + 0, + 4, + 7, + 0 + ], + [ + 6, + 3, + 4, + 8, + 0, + 7, + 5, + 9, + 0 + ], + [ + 0, + 7, + 1, + 2, + 5, + 8, + 3, + 6, + 4 + ], + [ + 4, + 5, + 3, + 6, + 9, + 1, + 0, + 2, + 7 + ], + [ + 2, + 6, + 8, + 3, + 7, + 4, + 1, + 5, + 9 + ], + [ + 0, + 4, + 0, + 0, + 8, + 2, + 0, + 1, + 3 + ], + [ + 3, + 1, + 0, + 0, + 4, + 5, + 2, + 8, + 6 + ], + [ + 8, + 0, + 0, + 0, + 0, + 3, + 0, + 4, + 5 + ] + ], + "solution": [ + [ + 7, + 8, + 5, + 4, + 2, + 9, + 6, + 3, + 1 + ], + [ + 1, + 9, + 2, + 5, + 3, + 6, + 4, + 7, + 8 + ], + [ + 6, + 3, + 4, + 8, + 1, + 7, + 5, + 9, + 2 + ], + [ + 9, + 7, + 1, + 2, + 5, + 8, + 3, + 6, + 4 + ], + [ + 4, + 5, + 3, + 6, + 9, + 1, + 8, + 2, + 7 + ], + [ + 2, + 6, + 8, + 3, + 7, + 4, + 1, + 5, + 9 + ], + [ + 5, + 4, + 6, + 7, + 8, + 2, + 9, + 1, + 3 + ], + [ + 3, + 1, + 7, + 9, + 4, + 5, + 2, + 8, + 6 + ], + [ + 8, + 2, + 9, + 1, + 6, + 3, + 7, + 4, + 5 + ] + ] + }, + { + "id": 85, + "board": [ + [ + 4, + 6, + 5, + 7, + 8, + 3, + 1, + 2, + 9 + ], + [ + 8, + 2, + 3, + 1, + 4, + 9, + 0, + 7, + 0 + ], + [ + 0, + 0, + 0, + 5, + 6, + 2, + 3, + 4, + 8 + ], + [ + 6, + 5, + 0, + 9, + 3, + 7, + 0, + 1, + 4 + ], + [ + 0, + 3, + 4, + 2, + 0, + 8, + 0, + 9, + 0 + ], + [ + 0, + 0, + 0, + 6, + 0, + 4, + 0, + 3, + 0 + ], + [ + 3, + 8, + 6, + 4, + 7, + 1, + 9, + 5, + 2 + ], + [ + 2, + 0, + 0, + 8, + 9, + 5, + 4, + 6, + 3 + ], + [ + 5, + 4, + 9, + 3, + 2, + 6, + 7, + 8, + 1 + ] + ], + "solution": [ + [ + 4, + 6, + 5, + 7, + 8, + 3, + 1, + 2, + 9 + ], + [ + 8, + 2, + 3, + 1, + 4, + 9, + 5, + 7, + 6 + ], + [ + 7, + 9, + 1, + 5, + 6, + 2, + 3, + 4, + 8 + ], + [ + 6, + 5, + 2, + 9, + 3, + 7, + 8, + 1, + 4 + ], + [ + 1, + 3, + 4, + 2, + 5, + 8, + 6, + 9, + 7 + ], + [ + 9, + 7, + 8, + 6, + 1, + 4, + 2, + 3, + 5 + ], + [ + 3, + 8, + 6, + 4, + 7, + 1, + 9, + 5, + 2 + ], + [ + 2, + 1, + 7, + 8, + 9, + 5, + 4, + 6, + 3 + ], + [ + 5, + 4, + 9, + 3, + 2, + 6, + 7, + 8, + 1 + ] + ] + }, + { + "id": 86, + "board": [ + [ + 9, + 0, + 4, + 0, + 5, + 3, + 1, + 0, + 2 + ], + [ + 1, + 0, + 2, + 0, + 4, + 7, + 0, + 6, + 8 + ], + [ + 6, + 3, + 7, + 2, + 0, + 1, + 9, + 0, + 5 + ], + [ + 2, + 0, + 1, + 8, + 0, + 6, + 5, + 3, + 4 + ], + [ + 0, + 7, + 6, + 5, + 1, + 4, + 8, + 2, + 0 + ], + [ + 0, + 4, + 5, + 3, + 9, + 2, + 6, + 0, + 7 + ], + [ + 0, + 0, + 9, + 1, + 2, + 5, + 0, + 0, + 3 + ], + [ + 7, + 1, + 8, + 4, + 3, + 9, + 2, + 5, + 6 + ], + [ + 5, + 2, + 3, + 7, + 0, + 8, + 4, + 9, + 1 + ] + ], + "solution": [ + [ + 9, + 8, + 4, + 6, + 5, + 3, + 1, + 7, + 2 + ], + [ + 1, + 5, + 2, + 9, + 4, + 7, + 3, + 6, + 8 + ], + [ + 6, + 3, + 7, + 2, + 8, + 1, + 9, + 4, + 5 + ], + [ + 2, + 9, + 1, + 8, + 7, + 6, + 5, + 3, + 4 + ], + [ + 3, + 7, + 6, + 5, + 1, + 4, + 8, + 2, + 9 + ], + [ + 8, + 4, + 5, + 3, + 9, + 2, + 6, + 1, + 7 + ], + [ + 4, + 6, + 9, + 1, + 2, + 5, + 7, + 8, + 3 + ], + [ + 7, + 1, + 8, + 4, + 3, + 9, + 2, + 5, + 6 + ], + [ + 5, + 2, + 3, + 7, + 6, + 8, + 4, + 9, + 1 + ] + ] + }, + { + "id": 87, + "board": [ + [ + 4, + 3, + 7, + 9, + 6, + 2, + 5, + 8, + 1 + ], + [ + 6, + 5, + 9, + 4, + 1, + 8, + 2, + 7, + 3 + ], + [ + 8, + 0, + 0, + 3, + 5, + 7, + 4, + 9, + 6 + ], + [ + 3, + 0, + 6, + 0, + 2, + 0, + 7, + 5, + 4 + ], + [ + 2, + 0, + 0, + 0, + 7, + 0, + 6, + 3, + 8 + ], + [ + 7, + 8, + 5, + 6, + 4, + 3, + 0, + 2, + 9 + ], + [ + 0, + 6, + 8, + 7, + 9, + 5, + 3, + 4, + 2 + ], + [ + 9, + 7, + 0, + 0, + 3, + 0, + 8, + 0, + 5 + ], + [ + 5, + 0, + 3, + 0, + 8, + 0, + 9, + 0, + 7 + ] + ], + "solution": [ + [ + 4, + 3, + 7, + 9, + 6, + 2, + 5, + 8, + 1 + ], + [ + 6, + 5, + 9, + 4, + 1, + 8, + 2, + 7, + 3 + ], + [ + 8, + 1, + 2, + 3, + 5, + 7, + 4, + 9, + 6 + ], + [ + 3, + 9, + 6, + 8, + 2, + 1, + 7, + 5, + 4 + ], + [ + 2, + 4, + 1, + 5, + 7, + 9, + 6, + 3, + 8 + ], + [ + 7, + 8, + 5, + 6, + 4, + 3, + 1, + 2, + 9 + ], + [ + 1, + 6, + 8, + 7, + 9, + 5, + 3, + 4, + 2 + ], + [ + 9, + 7, + 4, + 2, + 3, + 6, + 8, + 1, + 5 + ], + [ + 5, + 2, + 3, + 1, + 8, + 4, + 9, + 6, + 7 + ] + ] + }, + { + "id": 88, + "board": [ + [ + 0, + 0, + 8, + 4, + 7, + 3, + 0, + 0, + 2 + ], + [ + 2, + 7, + 4, + 9, + 0, + 8, + 0, + 0, + 3 + ], + [ + 0, + 0, + 0, + 2, + 0, + 6, + 8, + 4, + 7 + ], + [ + 8, + 2, + 1, + 5, + 4, + 7, + 0, + 3, + 0 + ], + [ + 4, + 9, + 5, + 6, + 3, + 2, + 7, + 1, + 8 + ], + [ + 0, + 0, + 7, + 8, + 9, + 1, + 4, + 2, + 5 + ], + [ + 5, + 4, + 6, + 7, + 2, + 9, + 3, + 8, + 1 + ], + [ + 9, + 8, + 3, + 1, + 6, + 5, + 2, + 7, + 4 + ], + [ + 7, + 1, + 2, + 3, + 8, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 6, + 8, + 4, + 7, + 3, + 5, + 9, + 2 + ], + [ + 2, + 7, + 4, + 9, + 5, + 8, + 1, + 6, + 3 + ], + [ + 3, + 5, + 9, + 2, + 1, + 6, + 8, + 4, + 7 + ], + [ + 8, + 2, + 1, + 5, + 4, + 7, + 6, + 3, + 9 + ], + [ + 4, + 9, + 5, + 6, + 3, + 2, + 7, + 1, + 8 + ], + [ + 6, + 3, + 7, + 8, + 9, + 1, + 4, + 2, + 5 + ], + [ + 5, + 4, + 6, + 7, + 2, + 9, + 3, + 8, + 1 + ], + [ + 9, + 8, + 3, + 1, + 6, + 5, + 2, + 7, + 4 + ], + [ + 7, + 1, + 2, + 3, + 8, + 4, + 9, + 5, + 6 + ] + ] + }, + { + "id": 89, + "board": [ + [ + 5, + 4, + 3, + 7, + 1, + 0, + 2, + 8, + 0 + ], + [ + 9, + 6, + 2, + 4, + 5, + 8, + 0, + 7, + 0 + ], + [ + 8, + 7, + 1, + 9, + 3, + 2, + 0, + 0, + 6 + ], + [ + 0, + 1, + 5, + 0, + 0, + 4, + 3, + 9, + 7 + ], + [ + 4, + 2, + 9, + 3, + 7, + 0, + 6, + 1, + 8 + ], + [ + 3, + 0, + 0, + 1, + 6, + 9, + 5, + 2, + 0 + ], + [ + 1, + 9, + 6, + 5, + 4, + 7, + 8, + 3, + 2 + ], + [ + 7, + 5, + 4, + 0, + 0, + 3, + 9, + 6, + 0 + ], + [ + 2, + 3, + 0, + 6, + 9, + 1, + 7, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 4, + 3, + 7, + 1, + 6, + 2, + 8, + 9 + ], + [ + 9, + 6, + 2, + 4, + 5, + 8, + 1, + 7, + 3 + ], + [ + 8, + 7, + 1, + 9, + 3, + 2, + 4, + 5, + 6 + ], + [ + 6, + 1, + 5, + 2, + 8, + 4, + 3, + 9, + 7 + ], + [ + 4, + 2, + 9, + 3, + 7, + 5, + 6, + 1, + 8 + ], + [ + 3, + 8, + 7, + 1, + 6, + 9, + 5, + 2, + 4 + ], + [ + 1, + 9, + 6, + 5, + 4, + 7, + 8, + 3, + 2 + ], + [ + 7, + 5, + 4, + 8, + 2, + 3, + 9, + 6, + 1 + ], + [ + 2, + 3, + 8, + 6, + 9, + 1, + 7, + 4, + 5 + ] + ] + }, + { + "id": 90, + "board": [ + [ + 0, + 0, + 5, + 6, + 7, + 9, + 1, + 8, + 2 + ], + [ + 0, + 0, + 8, + 1, + 2, + 3, + 5, + 6, + 4 + ], + [ + 2, + 6, + 1, + 8, + 5, + 4, + 7, + 9, + 3 + ], + [ + 0, + 0, + 0, + 0, + 8, + 2, + 6, + 5, + 1 + ], + [ + 0, + 0, + 6, + 0, + 0, + 1, + 3, + 2, + 8 + ], + [ + 1, + 8, + 2, + 3, + 6, + 5, + 9, + 4, + 7 + ], + [ + 0, + 0, + 7, + 2, + 0, + 8, + 4, + 1, + 6 + ], + [ + 6, + 2, + 0, + 5, + 1, + 7, + 8, + 3, + 9 + ], + [ + 8, + 1, + 0, + 0, + 0, + 6, + 2, + 7, + 5 + ] + ], + "solution": [ + [ + 3, + 4, + 5, + 6, + 7, + 9, + 1, + 8, + 2 + ], + [ + 7, + 9, + 8, + 1, + 2, + 3, + 5, + 6, + 4 + ], + [ + 2, + 6, + 1, + 8, + 5, + 4, + 7, + 9, + 3 + ], + [ + 4, + 3, + 9, + 7, + 8, + 2, + 6, + 5, + 1 + ], + [ + 5, + 7, + 6, + 4, + 9, + 1, + 3, + 2, + 8 + ], + [ + 1, + 8, + 2, + 3, + 6, + 5, + 9, + 4, + 7 + ], + [ + 9, + 5, + 7, + 2, + 3, + 8, + 4, + 1, + 6 + ], + [ + 6, + 2, + 4, + 5, + 1, + 7, + 8, + 3, + 9 + ], + [ + 8, + 1, + 3, + 9, + 4, + 6, + 2, + 7, + 5 + ] + ] + }, + { + "id": 91, + "board": [ + [ + 7, + 2, + 6, + 0, + 4, + 5, + 9, + 3, + 8 + ], + [ + 0, + 9, + 1, + 8, + 7, + 6, + 5, + 2, + 4 + ], + [ + 5, + 8, + 4, + 3, + 9, + 2, + 7, + 1, + 6 + ], + [ + 1, + 6, + 0, + 7, + 3, + 4, + 2, + 5, + 0 + ], + [ + 2, + 4, + 0, + 6, + 1, + 9, + 3, + 0, + 7 + ], + [ + 9, + 3, + 7, + 5, + 2, + 8, + 4, + 6, + 1 + ], + [ + 6, + 0, + 2, + 9, + 0, + 0, + 8, + 4, + 0 + ], + [ + 8, + 5, + 0, + 0, + 6, + 0, + 1, + 0, + 2 + ], + [ + 4, + 0, + 0, + 2, + 0, + 0, + 6, + 0, + 5 + ] + ], + "solution": [ + [ + 7, + 2, + 6, + 1, + 4, + 5, + 9, + 3, + 8 + ], + [ + 3, + 9, + 1, + 8, + 7, + 6, + 5, + 2, + 4 + ], + [ + 5, + 8, + 4, + 3, + 9, + 2, + 7, + 1, + 6 + ], + [ + 1, + 6, + 8, + 7, + 3, + 4, + 2, + 5, + 9 + ], + [ + 2, + 4, + 5, + 6, + 1, + 9, + 3, + 8, + 7 + ], + [ + 9, + 3, + 7, + 5, + 2, + 8, + 4, + 6, + 1 + ], + [ + 6, + 1, + 2, + 9, + 5, + 7, + 8, + 4, + 3 + ], + [ + 8, + 5, + 9, + 4, + 6, + 3, + 1, + 7, + 2 + ], + [ + 4, + 7, + 3, + 2, + 8, + 1, + 6, + 9, + 5 + ] + ] + }, + { + "id": 92, + "board": [ + [ + 1, + 9, + 7, + 3, + 4, + 6, + 8, + 2, + 5 + ], + [ + 0, + 5, + 0, + 1, + 2, + 7, + 0, + 0, + 0 + ], + [ + 6, + 2, + 3, + 9, + 8, + 5, + 0, + 4, + 7 + ], + [ + 9, + 6, + 5, + 8, + 3, + 4, + 7, + 0, + 2 + ], + [ + 3, + 0, + 0, + 7, + 0, + 0, + 6, + 8, + 9 + ], + [ + 0, + 7, + 0, + 6, + 1, + 9, + 5, + 3, + 4 + ], + [ + 0, + 0, + 0, + 5, + 7, + 8, + 0, + 0, + 0 + ], + [ + 5, + 8, + 6, + 2, + 9, + 3, + 4, + 7, + 1 + ], + [ + 7, + 3, + 9, + 4, + 6, + 1, + 2, + 5, + 8 + ] + ], + "solution": [ + [ + 1, + 9, + 7, + 3, + 4, + 6, + 8, + 2, + 5 + ], + [ + 4, + 5, + 8, + 1, + 2, + 7, + 3, + 9, + 6 + ], + [ + 6, + 2, + 3, + 9, + 8, + 5, + 1, + 4, + 7 + ], + [ + 9, + 6, + 5, + 8, + 3, + 4, + 7, + 1, + 2 + ], + [ + 3, + 1, + 4, + 7, + 5, + 2, + 6, + 8, + 9 + ], + [ + 8, + 7, + 2, + 6, + 1, + 9, + 5, + 3, + 4 + ], + [ + 2, + 4, + 1, + 5, + 7, + 8, + 9, + 6, + 3 + ], + [ + 5, + 8, + 6, + 2, + 9, + 3, + 4, + 7, + 1 + ], + [ + 7, + 3, + 9, + 4, + 6, + 1, + 2, + 5, + 8 + ] + ] + }, + { + "id": 93, + "board": [ + [ + 9, + 4, + 1, + 6, + 5, + 7, + 2, + 8, + 3 + ], + [ + 2, + 8, + 7, + 3, + 4, + 0, + 5, + 6, + 0 + ], + [ + 6, + 5, + 3, + 8, + 2, + 0, + 0, + 7, + 4 + ], + [ + 1, + 2, + 8, + 9, + 6, + 4, + 3, + 5, + 7 + ], + [ + 4, + 9, + 6, + 7, + 3, + 5, + 0, + 2, + 0 + ], + [ + 7, + 3, + 5, + 1, + 8, + 2, + 4, + 9, + 6 + ], + [ + 8, + 0, + 2, + 0, + 0, + 3, + 0, + 1, + 5 + ], + [ + 3, + 0, + 9, + 5, + 0, + 0, + 0, + 4, + 2 + ], + [ + 5, + 0, + 4, + 2, + 0, + 0, + 0, + 3, + 0 + ] + ], + "solution": [ + [ + 9, + 4, + 1, + 6, + 5, + 7, + 2, + 8, + 3 + ], + [ + 2, + 8, + 7, + 3, + 4, + 1, + 5, + 6, + 9 + ], + [ + 6, + 5, + 3, + 8, + 2, + 9, + 1, + 7, + 4 + ], + [ + 1, + 2, + 8, + 9, + 6, + 4, + 3, + 5, + 7 + ], + [ + 4, + 9, + 6, + 7, + 3, + 5, + 8, + 2, + 1 + ], + [ + 7, + 3, + 5, + 1, + 8, + 2, + 4, + 9, + 6 + ], + [ + 8, + 6, + 2, + 4, + 7, + 3, + 9, + 1, + 5 + ], + [ + 3, + 7, + 9, + 5, + 1, + 8, + 6, + 4, + 2 + ], + [ + 5, + 1, + 4, + 2, + 9, + 6, + 7, + 3, + 8 + ] + ] + }, + { + "id": 94, + "board": [ + [ + 6, + 1, + 8, + 0, + 5, + 0, + 0, + 0, + 7 + ], + [ + 9, + 4, + 3, + 6, + 1, + 7, + 2, + 8, + 5 + ], + [ + 5, + 0, + 7, + 8, + 3, + 9, + 0, + 0, + 6 + ], + [ + 4, + 3, + 2, + 7, + 8, + 5, + 6, + 9, + 1 + ], + [ + 1, + 0, + 9, + 4, + 6, + 2, + 0, + 5, + 0 + ], + [ + 8, + 6, + 5, + 0, + 9, + 1, + 7, + 2, + 0 + ], + [ + 0, + 9, + 6, + 5, + 0, + 8, + 0, + 7, + 2 + ], + [ + 0, + 8, + 4, + 1, + 2, + 3, + 5, + 0, + 9 + ], + [ + 2, + 5, + 1, + 9, + 7, + 6, + 0, + 4, + 0 + ] + ], + "solution": [ + [ + 6, + 1, + 8, + 2, + 5, + 4, + 9, + 3, + 7 + ], + [ + 9, + 4, + 3, + 6, + 1, + 7, + 2, + 8, + 5 + ], + [ + 5, + 2, + 7, + 8, + 3, + 9, + 4, + 1, + 6 + ], + [ + 4, + 3, + 2, + 7, + 8, + 5, + 6, + 9, + 1 + ], + [ + 1, + 7, + 9, + 4, + 6, + 2, + 3, + 5, + 8 + ], + [ + 8, + 6, + 5, + 3, + 9, + 1, + 7, + 2, + 4 + ], + [ + 3, + 9, + 6, + 5, + 4, + 8, + 1, + 7, + 2 + ], + [ + 7, + 8, + 4, + 1, + 2, + 3, + 5, + 6, + 9 + ], + [ + 2, + 5, + 1, + 9, + 7, + 6, + 8, + 4, + 3 + ] + ] + }, + { + "id": 95, + "board": [ + [ + 5, + 9, + 3, + 6, + 0, + 0, + 0, + 0, + 8 + ], + [ + 2, + 4, + 1, + 0, + 7, + 0, + 9, + 6, + 3 + ], + [ + 7, + 8, + 6, + 0, + 0, + 3, + 0, + 5, + 4 + ], + [ + 4, + 3, + 8, + 1, + 6, + 9, + 5, + 2, + 7 + ], + [ + 9, + 7, + 0, + 0, + 0, + 0, + 6, + 3, + 1 + ], + [ + 6, + 1, + 0, + 7, + 3, + 0, + 4, + 8, + 9 + ], + [ + 3, + 5, + 4, + 0, + 0, + 7, + 8, + 1, + 6 + ], + [ + 1, + 0, + 0, + 3, + 8, + 6, + 7, + 4, + 5 + ], + [ + 8, + 6, + 7, + 4, + 5, + 1, + 3, + 9, + 2 + ] + ], + "solution": [ + [ + 5, + 9, + 3, + 6, + 4, + 2, + 1, + 7, + 8 + ], + [ + 2, + 4, + 1, + 5, + 7, + 8, + 9, + 6, + 3 + ], + [ + 7, + 8, + 6, + 9, + 1, + 3, + 2, + 5, + 4 + ], + [ + 4, + 3, + 8, + 1, + 6, + 9, + 5, + 2, + 7 + ], + [ + 9, + 7, + 5, + 8, + 2, + 4, + 6, + 3, + 1 + ], + [ + 6, + 1, + 2, + 7, + 3, + 5, + 4, + 8, + 9 + ], + [ + 3, + 5, + 4, + 2, + 9, + 7, + 8, + 1, + 6 + ], + [ + 1, + 2, + 9, + 3, + 8, + 6, + 7, + 4, + 5 + ], + [ + 8, + 6, + 7, + 4, + 5, + 1, + 3, + 9, + 2 + ] + ] + }, + { + "id": 96, + "board": [ + [ + 5, + 4, + 0, + 8, + 1, + 0, + 2, + 7, + 3 + ], + [ + 0, + 0, + 8, + 0, + 4, + 5, + 1, + 9, + 6 + ], + [ + 1, + 0, + 0, + 0, + 3, + 0, + 8, + 5, + 4 + ], + [ + 8, + 3, + 4, + 6, + 7, + 2, + 5, + 0, + 9 + ], + [ + 0, + 1, + 2, + 5, + 0, + 3, + 4, + 6, + 8 + ], + [ + 0, + 9, + 5, + 1, + 8, + 4, + 7, + 3, + 2 + ], + [ + 4, + 0, + 0, + 0, + 5, + 8, + 3, + 0, + 1 + ], + [ + 9, + 5, + 3, + 4, + 2, + 1, + 0, + 8, + 7 + ], + [ + 2, + 8, + 1, + 0, + 6, + 7, + 9, + 4, + 5 + ] + ], + "solution": [ + [ + 5, + 4, + 6, + 8, + 1, + 9, + 2, + 7, + 3 + ], + [ + 3, + 2, + 8, + 7, + 4, + 5, + 1, + 9, + 6 + ], + [ + 1, + 7, + 9, + 2, + 3, + 6, + 8, + 5, + 4 + ], + [ + 8, + 3, + 4, + 6, + 7, + 2, + 5, + 1, + 9 + ], + [ + 7, + 1, + 2, + 5, + 9, + 3, + 4, + 6, + 8 + ], + [ + 6, + 9, + 5, + 1, + 8, + 4, + 7, + 3, + 2 + ], + [ + 4, + 6, + 7, + 9, + 5, + 8, + 3, + 2, + 1 + ], + [ + 9, + 5, + 3, + 4, + 2, + 1, + 6, + 8, + 7 + ], + [ + 2, + 8, + 1, + 3, + 6, + 7, + 9, + 4, + 5 + ] + ] + }, + { + "id": 97, + "board": [ + [ + 6, + 4, + 3, + 0, + 2, + 5, + 1, + 0, + 9 + ], + [ + 2, + 9, + 8, + 7, + 1, + 3, + 6, + 4, + 5 + ], + [ + 0, + 7, + 5, + 4, + 6, + 9, + 8, + 3, + 0 + ], + [ + 4, + 8, + 0, + 1, + 5, + 0, + 9, + 6, + 3 + ], + [ + 3, + 6, + 7, + 9, + 4, + 8, + 5, + 2, + 0 + ], + [ + 5, + 0, + 9, + 2, + 3, + 6, + 4, + 8, + 7 + ], + [ + 9, + 0, + 4, + 0, + 8, + 0, + 7, + 1, + 6 + ], + [ + 7, + 0, + 1, + 6, + 0, + 4, + 0, + 5, + 0 + ], + [ + 8, + 0, + 6, + 0, + 7, + 0, + 0, + 9, + 4 + ] + ], + "solution": [ + [ + 6, + 4, + 3, + 8, + 2, + 5, + 1, + 7, + 9 + ], + [ + 2, + 9, + 8, + 7, + 1, + 3, + 6, + 4, + 5 + ], + [ + 1, + 7, + 5, + 4, + 6, + 9, + 8, + 3, + 2 + ], + [ + 4, + 8, + 2, + 1, + 5, + 7, + 9, + 6, + 3 + ], + [ + 3, + 6, + 7, + 9, + 4, + 8, + 5, + 2, + 1 + ], + [ + 5, + 1, + 9, + 2, + 3, + 6, + 4, + 8, + 7 + ], + [ + 9, + 3, + 4, + 5, + 8, + 2, + 7, + 1, + 6 + ], + [ + 7, + 2, + 1, + 6, + 9, + 4, + 3, + 5, + 8 + ], + [ + 8, + 5, + 6, + 3, + 7, + 1, + 2, + 9, + 4 + ] + ] + }, + { + "id": 98, + "board": [ + [ + 2, + 3, + 0, + 7, + 1, + 6, + 4, + 8, + 5 + ], + [ + 5, + 4, + 0, + 9, + 3, + 8, + 6, + 0, + 2 + ], + [ + 7, + 0, + 0, + 5, + 2, + 0, + 9, + 1, + 3 + ], + [ + 9, + 0, + 0, + 4, + 0, + 2, + 0, + 5, + 1 + ], + [ + 1, + 0, + 3, + 6, + 8, + 5, + 2, + 9, + 4 + ], + [ + 4, + 5, + 2, + 0, + 0, + 1, + 8, + 6, + 7 + ], + [ + 8, + 2, + 4, + 1, + 6, + 7, + 5, + 3, + 9 + ], + [ + 6, + 9, + 0, + 0, + 5, + 3, + 0, + 4, + 8 + ], + [ + 3, + 1, + 0, + 8, + 4, + 9, + 7, + 0, + 0 + ] + ], + "solution": [ + [ + 2, + 3, + 9, + 7, + 1, + 6, + 4, + 8, + 5 + ], + [ + 5, + 4, + 1, + 9, + 3, + 8, + 6, + 7, + 2 + ], + [ + 7, + 6, + 8, + 5, + 2, + 4, + 9, + 1, + 3 + ], + [ + 9, + 8, + 6, + 4, + 7, + 2, + 3, + 5, + 1 + ], + [ + 1, + 7, + 3, + 6, + 8, + 5, + 2, + 9, + 4 + ], + [ + 4, + 5, + 2, + 3, + 9, + 1, + 8, + 6, + 7 + ], + [ + 8, + 2, + 4, + 1, + 6, + 7, + 5, + 3, + 9 + ], + [ + 6, + 9, + 7, + 2, + 5, + 3, + 1, + 4, + 8 + ], + [ + 3, + 1, + 5, + 8, + 4, + 9, + 7, + 2, + 6 + ] + ] + }, + { + "id": 99, + "board": [ + [ + 6, + 2, + 8, + 5, + 4, + 7, + 9, + 3, + 1 + ], + [ + 0, + 7, + 9, + 1, + 3, + 6, + 0, + 8, + 2 + ], + [ + 3, + 0, + 1, + 8, + 9, + 2, + 0, + 6, + 7 + ], + [ + 0, + 6, + 5, + 7, + 2, + 0, + 1, + 4, + 0 + ], + [ + 1, + 0, + 4, + 6, + 5, + 0, + 2, + 7, + 9 + ], + [ + 2, + 0, + 7, + 4, + 1, + 0, + 6, + 5, + 0 + ], + [ + 7, + 1, + 3, + 9, + 6, + 4, + 8, + 2, + 5 + ], + [ + 0, + 0, + 6, + 2, + 7, + 5, + 3, + 1, + 4 + ], + [ + 0, + 0, + 2, + 3, + 0, + 0, + 0, + 9, + 6 + ] + ], + "solution": [ + [ + 6, + 2, + 8, + 5, + 4, + 7, + 9, + 3, + 1 + ], + [ + 4, + 7, + 9, + 1, + 3, + 6, + 5, + 8, + 2 + ], + [ + 3, + 5, + 1, + 8, + 9, + 2, + 4, + 6, + 7 + ], + [ + 8, + 6, + 5, + 7, + 2, + 9, + 1, + 4, + 3 + ], + [ + 1, + 3, + 4, + 6, + 5, + 8, + 2, + 7, + 9 + ], + [ + 2, + 9, + 7, + 4, + 1, + 3, + 6, + 5, + 8 + ], + [ + 7, + 1, + 3, + 9, + 6, + 4, + 8, + 2, + 5 + ], + [ + 9, + 8, + 6, + 2, + 7, + 5, + 3, + 1, + 4 + ], + [ + 5, + 4, + 2, + 3, + 8, + 1, + 7, + 9, + 6 + ] + ] + }, + { + "id": 100, + "board": [ + [ + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 2, + 9 + ], + [ + 2, + 1, + 0, + 0, + 0, + 9, + 0, + 4, + 8 + ], + [ + 0, + 4, + 9, + 0, + 2, + 0, + 0, + 0, + 7 + ], + [ + 9, + 6, + 5, + 1, + 3, + 7, + 4, + 8, + 2 + ], + [ + 4, + 7, + 2, + 9, + 8, + 6, + 0, + 0, + 1 + ], + [ + 3, + 8, + 1, + 0, + 0, + 2, + 9, + 7, + 6 + ], + [ + 1, + 2, + 8, + 3, + 9, + 4, + 7, + 6, + 5 + ], + [ + 5, + 3, + 6, + 7, + 1, + 8, + 2, + 9, + 4 + ], + [ + 7, + 9, + 4, + 2, + 6, + 5, + 8, + 1, + 3 + ] + ], + "solution": [ + [ + 6, + 5, + 7, + 8, + 4, + 1, + 3, + 2, + 9 + ], + [ + 2, + 1, + 3, + 5, + 7, + 9, + 6, + 4, + 8 + ], + [ + 8, + 4, + 9, + 6, + 2, + 3, + 1, + 5, + 7 + ], + [ + 9, + 6, + 5, + 1, + 3, + 7, + 4, + 8, + 2 + ], + [ + 4, + 7, + 2, + 9, + 8, + 6, + 5, + 3, + 1 + ], + [ + 3, + 8, + 1, + 4, + 5, + 2, + 9, + 7, + 6 + ], + [ + 1, + 2, + 8, + 3, + 9, + 4, + 7, + 6, + 5 + ], + [ + 5, + 3, + 6, + 7, + 1, + 8, + 2, + 9, + 4 + ], + [ + 7, + 9, + 4, + 2, + 6, + 5, + 8, + 1, + 3 + ] + ] + } + ] + }, + "medium": { + "level": [ + { + "id": 1, + "board": [ + [ + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 4, + 3 + ], + [ + 6, + 9, + 3, + 4, + 5, + 2, + 8, + 7, + 1 + ], + [ + 8, + 4, + 5, + 1, + 3, + 7, + 0, + 6, + 9 + ], + [ + 3, + 7, + 8, + 2, + 0, + 0, + 6, + 1, + 5 + ], + [ + 0, + 5, + 6, + 8, + 0, + 1, + 3, + 2, + 4 + ], + [ + 4, + 0, + 0, + 3, + 6, + 5, + 9, + 8, + 7 + ], + [ + 5, + 3, + 0, + 6, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 1, + 3, + 4, + 5, + 6 + ], + [ + 0, + 6, + 0, + 5, + 0, + 0, + 0, + 3, + 0 + ] + ], + "solution": [ + [ + 1, + 2, + 7, + 9, + 8, + 6, + 5, + 4, + 3 + ], + [ + 6, + 9, + 3, + 4, + 5, + 2, + 8, + 7, + 1 + ], + [ + 8, + 4, + 5, + 1, + 3, + 7, + 2, + 6, + 9 + ], + [ + 3, + 7, + 8, + 2, + 4, + 9, + 6, + 1, + 5 + ], + [ + 9, + 5, + 6, + 8, + 7, + 1, + 3, + 2, + 4 + ], + [ + 4, + 1, + 2, + 3, + 6, + 5, + 9, + 8, + 7 + ], + [ + 5, + 3, + 1, + 6, + 2, + 4, + 7, + 9, + 8 + ], + [ + 2, + 8, + 9, + 7, + 1, + 3, + 4, + 5, + 6 + ], + [ + 7, + 6, + 4, + 5, + 9, + 8, + 1, + 3, + 2 + ] + ] + }, + { + "id": 2, + "board": [ + [ + 2, + 5, + 8, + 3, + 1, + 4, + 6, + 7, + 9 + ], + [ + 1, + 3, + 0, + 0, + 8, + 6, + 5, + 2, + 4 + ], + [ + 0, + 6, + 4, + 0, + 0, + 0, + 3, + 1, + 8 + ], + [ + 3, + 9, + 5, + 4, + 6, + 7, + 2, + 8, + 1 + ], + [ + 4, + 2, + 1, + 8, + 5, + 9, + 7, + 0, + 0 + ], + [ + 8, + 7, + 6, + 2, + 3, + 1, + 4, + 9, + 5 + ], + [ + 0, + 0, + 0, + 1, + 0, + 8, + 9, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 8, + 0, + 0 + ], + [ + 0, + 8, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ] + ], + "solution": [ + [ + 2, + 5, + 8, + 3, + 1, + 4, + 6, + 7, + 9 + ], + [ + 1, + 3, + 7, + 9, + 8, + 6, + 5, + 2, + 4 + ], + [ + 9, + 6, + 4, + 5, + 7, + 2, + 3, + 1, + 8 + ], + [ + 3, + 9, + 5, + 4, + 6, + 7, + 2, + 8, + 1 + ], + [ + 4, + 2, + 1, + 8, + 5, + 9, + 7, + 3, + 6 + ], + [ + 8, + 7, + 6, + 2, + 3, + 1, + 4, + 9, + 5 + ], + [ + 5, + 4, + 3, + 1, + 2, + 8, + 9, + 6, + 7 + ], + [ + 6, + 1, + 2, + 7, + 9, + 5, + 8, + 4, + 3 + ], + [ + 7, + 8, + 9, + 6, + 4, + 3, + 1, + 5, + 2 + ] + ] + }, + { + "id": 3, + "board": [ + [ + 0, + 1, + 2, + 0, + 0, + 0, + 3, + 9, + 6 + ], + [ + 0, + 0, + 0, + 0, + 3, + 2, + 4, + 7, + 1 + ], + [ + 3, + 7, + 0, + 0, + 1, + 9, + 8, + 5, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 3, + 1, + 6, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 6, + 5, + 3, + 9 + ], + [ + 1, + 6, + 0, + 9, + 0, + 0, + 2, + 8, + 0 + ], + [ + 6, + 3, + 9, + 2, + 4, + 8, + 7, + 1, + 5 + ], + [ + 5, + 2, + 7, + 3, + 9, + 1, + 6, + 4, + 8 + ], + [ + 0, + 0, + 1, + 0, + 6, + 0, + 9, + 2, + 3 + ] + ], + "solution": [ + [ + 4, + 1, + 2, + 8, + 7, + 5, + 3, + 9, + 6 + ], + [ + 9, + 5, + 8, + 6, + 3, + 2, + 4, + 7, + 1 + ], + [ + 3, + 7, + 6, + 4, + 1, + 9, + 8, + 5, + 2 + ], + [ + 2, + 9, + 5, + 7, + 8, + 3, + 1, + 6, + 4 + ], + [ + 7, + 8, + 4, + 1, + 2, + 6, + 5, + 3, + 9 + ], + [ + 1, + 6, + 3, + 9, + 5, + 4, + 2, + 8, + 7 + ], + [ + 6, + 3, + 9, + 2, + 4, + 8, + 7, + 1, + 5 + ], + [ + 5, + 2, + 7, + 3, + 9, + 1, + 6, + 4, + 8 + ], + [ + 8, + 4, + 1, + 5, + 6, + 7, + 9, + 2, + 3 + ] + ] + }, + { + "id": 4, + "board": [ + [ + 6, + 0, + 0, + 9, + 5, + 0, + 4, + 1, + 7 + ], + [ + 1, + 5, + 2, + 0, + 0, + 0, + 8, + 0, + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 8, + 3, + 5, + 2 + ], + [ + 0, + 0, + 0, + 0, + 9, + 0, + 2, + 7, + 8 + ], + [ + 3, + 8, + 9, + 7, + 0, + 1, + 5, + 6, + 0 + ], + [ + 2, + 7, + 0, + 0, + 0, + 5, + 9, + 3, + 0 + ], + [ + 0, + 9, + 1, + 0, + 0, + 4, + 6, + 2, + 5 + ], + [ + 4, + 2, + 3, + 5, + 1, + 6, + 7, + 8, + 9 + ], + [ + 8, + 6, + 5, + 2, + 7, + 9, + 0, + 4, + 0 + ] + ], + "solution": [ + [ + 6, + 3, + 8, + 9, + 5, + 2, + 4, + 1, + 7 + ], + [ + 1, + 5, + 2, + 3, + 4, + 7, + 8, + 9, + 6 + ], + [ + 9, + 4, + 7, + 1, + 6, + 8, + 3, + 5, + 2 + ], + [ + 5, + 1, + 4, + 6, + 9, + 3, + 2, + 7, + 8 + ], + [ + 3, + 8, + 9, + 7, + 2, + 1, + 5, + 6, + 4 + ], + [ + 2, + 7, + 6, + 4, + 8, + 5, + 9, + 3, + 1 + ], + [ + 7, + 9, + 1, + 8, + 3, + 4, + 6, + 2, + 5 + ], + [ + 4, + 2, + 3, + 5, + 1, + 6, + 7, + 8, + 9 + ], + [ + 8, + 6, + 5, + 2, + 7, + 9, + 1, + 4, + 3 + ] + ] + }, + { + "id": 5, + "board": [ + [ + 8, + 6, + 9, + 0, + 7, + 2, + 0, + 4, + 1 + ], + [ + 1, + 0, + 7, + 0, + 4, + 0, + 0, + 0, + 2 + ], + [ + 0, + 0, + 4, + 0, + 6, + 1, + 0, + 8, + 7 + ], + [ + 0, + 0, + 1, + 6, + 0, + 0, + 0, + 0, + 0 + ], + [ + 5, + 9, + 8, + 4, + 0, + 7, + 0, + 3, + 6 + ], + [ + 0, + 0, + 0, + 1, + 3, + 0, + 8, + 0, + 0 + ], + [ + 7, + 1, + 2, + 0, + 5, + 0, + 6, + 9, + 4 + ], + [ + 9, + 4, + 3, + 7, + 1, + 6, + 2, + 5, + 8 + ], + [ + 6, + 8, + 5, + 2, + 9, + 4, + 7, + 1, + 3 + ] + ], + "solution": [ + [ + 8, + 6, + 9, + 3, + 7, + 2, + 5, + 4, + 1 + ], + [ + 1, + 3, + 7, + 5, + 4, + 8, + 9, + 6, + 2 + ], + [ + 2, + 5, + 4, + 9, + 6, + 1, + 3, + 8, + 7 + ], + [ + 3, + 2, + 1, + 6, + 8, + 5, + 4, + 7, + 9 + ], + [ + 5, + 9, + 8, + 4, + 2, + 7, + 1, + 3, + 6 + ], + [ + 4, + 7, + 6, + 1, + 3, + 9, + 8, + 2, + 5 + ], + [ + 7, + 1, + 2, + 8, + 5, + 3, + 6, + 9, + 4 + ], + [ + 9, + 4, + 3, + 7, + 1, + 6, + 2, + 5, + 8 + ], + [ + 6, + 8, + 5, + 2, + 9, + 4, + 7, + 1, + 3 + ] + ] + }, + { + "id": 6, + "board": [ + [ + 0, + 6, + 9, + 0, + 0, + 3, + 0, + 0, + 0 + ], + [ + 0, + 7, + 4, + 0, + 0, + 2, + 3, + 1, + 9 + ], + [ + 2, + 1, + 3, + 4, + 7, + 9, + 8, + 6, + 5 + ], + [ + 3, + 2, + 6, + 1, + 4, + 5, + 9, + 7, + 8 + ], + [ + 0, + 8, + 5, + 7, + 9, + 6, + 0, + 0, + 0 + ], + [ + 4, + 9, + 7, + 2, + 3, + 8, + 6, + 5, + 1 + ], + [ + 7, + 5, + 0, + 0, + 6, + 4, + 1, + 9, + 2 + ], + [ + 6, + 4, + 0, + 9, + 0, + 0, + 0, + 0, + 0 + ], + [ + 9, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 6, + 9, + 8, + 1, + 3, + 4, + 2, + 7 + ], + [ + 8, + 7, + 4, + 6, + 5, + 2, + 3, + 1, + 9 + ], + [ + 2, + 1, + 3, + 4, + 7, + 9, + 8, + 6, + 5 + ], + [ + 3, + 2, + 6, + 1, + 4, + 5, + 9, + 7, + 8 + ], + [ + 1, + 8, + 5, + 7, + 9, + 6, + 2, + 3, + 4 + ], + [ + 4, + 9, + 7, + 2, + 3, + 8, + 6, + 5, + 1 + ], + [ + 7, + 5, + 8, + 3, + 6, + 4, + 1, + 9, + 2 + ], + [ + 6, + 4, + 1, + 9, + 2, + 7, + 5, + 8, + 3 + ], + [ + 9, + 3, + 2, + 5, + 8, + 1, + 7, + 4, + 6 + ] + ] + }, + { + "id": 7, + "board": [ + [ + 9, + 3, + 4, + 6, + 5, + 0, + 7, + 8, + 2 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 3, + 1, + 5 + ], + [ + 1, + 5, + 0, + 0, + 0, + 3, + 0, + 9, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 8, + 9, + 5, + 1 + ], + [ + 0, + 0, + 0, + 5, + 4, + 9, + 2, + 6, + 0 + ], + [ + 0, + 9, + 5, + 1, + 0, + 6, + 8, + 0, + 0 + ], + [ + 3, + 7, + 2, + 8, + 1, + 5, + 6, + 4, + 9 + ], + [ + 5, + 8, + 9, + 4, + 6, + 2, + 1, + 0, + 0 + ], + [ + 4, + 6, + 1, + 0, + 0, + 7, + 5, + 2, + 8 + ] + ], + "solution": [ + [ + 9, + 3, + 4, + 6, + 5, + 1, + 7, + 8, + 2 + ], + [ + 6, + 2, + 8, + 7, + 9, + 4, + 3, + 1, + 5 + ], + [ + 1, + 5, + 7, + 2, + 8, + 3, + 4, + 9, + 6 + ], + [ + 2, + 4, + 6, + 3, + 7, + 8, + 9, + 5, + 1 + ], + [ + 8, + 1, + 3, + 5, + 4, + 9, + 2, + 6, + 7 + ], + [ + 7, + 9, + 5, + 1, + 2, + 6, + 8, + 3, + 4 + ], + [ + 3, + 7, + 2, + 8, + 1, + 5, + 6, + 4, + 9 + ], + [ + 5, + 8, + 9, + 4, + 6, + 2, + 1, + 7, + 3 + ], + [ + 4, + 6, + 1, + 9, + 3, + 7, + 5, + 2, + 8 + ] + ] + }, + { + "id": 8, + "board": [ + [ + 3, + 5, + 7, + 0, + 9, + 0, + 0, + 0, + 0 + ], + [ + 1, + 8, + 4, + 5, + 6, + 7, + 9, + 3, + 2 + ], + [ + 6, + 2, + 9, + 3, + 0, + 0, + 7, + 5, + 0 + ], + [ + 5, + 1, + 3, + 0, + 0, + 6, + 8, + 9, + 7 + ], + [ + 9, + 7, + 8, + 1, + 3, + 5, + 0, + 2, + 0 + ], + [ + 4, + 6, + 2, + 0, + 0, + 0, + 3, + 1, + 5 + ], + [ + 0, + 9, + 6, + 0, + 0, + 0, + 5, + 4, + 0 + ], + [ + 8, + 3, + 0, + 6, + 5, + 4, + 2, + 7, + 9 + ], + [ + 0, + 4, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 5, + 7, + 4, + 9, + 2, + 1, + 6, + 8 + ], + [ + 1, + 8, + 4, + 5, + 6, + 7, + 9, + 3, + 2 + ], + [ + 6, + 2, + 9, + 3, + 1, + 8, + 7, + 5, + 4 + ], + [ + 5, + 1, + 3, + 2, + 4, + 6, + 8, + 9, + 7 + ], + [ + 9, + 7, + 8, + 1, + 3, + 5, + 4, + 2, + 6 + ], + [ + 4, + 6, + 2, + 7, + 8, + 9, + 3, + 1, + 5 + ], + [ + 2, + 9, + 6, + 8, + 7, + 1, + 5, + 4, + 3 + ], + [ + 8, + 3, + 1, + 6, + 5, + 4, + 2, + 7, + 9 + ], + [ + 7, + 4, + 5, + 9, + 2, + 3, + 6, + 8, + 1 + ] + ] + }, + { + "id": 9, + "board": [ + [ + 7, + 8, + 0, + 5, + 0, + 0, + 0, + 1, + 0 + ], + [ + 0, + 6, + 1, + 7, + 2, + 0, + 0, + 0, + 4 + ], + [ + 0, + 9, + 0, + 8, + 0, + 6, + 5, + 2, + 7 + ], + [ + 0, + 0, + 5, + 0, + 6, + 0, + 1, + 7, + 8 + ], + [ + 0, + 7, + 0, + 4, + 8, + 1, + 2, + 9, + 5 + ], + [ + 1, + 2, + 8, + 9, + 5, + 7, + 4, + 0, + 0 + ], + [ + 4, + 3, + 7, + 1, + 9, + 0, + 0, + 0, + 2 + ], + [ + 0, + 1, + 6, + 0, + 0, + 0, + 0, + 5, + 9 + ], + [ + 2, + 5, + 9, + 6, + 7, + 8, + 3, + 4, + 1 + ] + ], + "solution": [ + [ + 7, + 8, + 2, + 5, + 3, + 4, + 9, + 1, + 6 + ], + [ + 5, + 6, + 1, + 7, + 2, + 9, + 8, + 3, + 4 + ], + [ + 3, + 9, + 4, + 8, + 1, + 6, + 5, + 2, + 7 + ], + [ + 9, + 4, + 5, + 2, + 6, + 3, + 1, + 7, + 8 + ], + [ + 6, + 7, + 3, + 4, + 8, + 1, + 2, + 9, + 5 + ], + [ + 1, + 2, + 8, + 9, + 5, + 7, + 4, + 6, + 3 + ], + [ + 4, + 3, + 7, + 1, + 9, + 5, + 6, + 8, + 2 + ], + [ + 8, + 1, + 6, + 3, + 4, + 2, + 7, + 5, + 9 + ], + [ + 2, + 5, + 9, + 6, + 7, + 8, + 3, + 4, + 1 + ] + ] + }, + { + "id": 10, + "board": [ + [ + 2, + 8, + 1, + 6, + 3, + 4, + 5, + 0, + 7 + ], + [ + 0, + 9, + 0, + 7, + 5, + 2, + 0, + 0, + 1 + ], + [ + 0, + 5, + 7, + 9, + 1, + 8, + 0, + 3, + 0 + ], + [ + 0, + 1, + 0, + 8, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 6, + 0, + 0, + 7, + 0, + 0, + 1, + 3 + ], + [ + 7, + 2, + 0, + 1, + 0, + 0, + 8, + 0, + 0 + ], + [ + 5, + 3, + 9, + 4, + 8, + 7, + 1, + 2, + 6 + ], + [ + 1, + 7, + 6, + 0, + 0, + 0, + 3, + 4, + 8 + ], + [ + 8, + 4, + 2, + 3, + 6, + 1, + 9, + 7, + 5 + ] + ], + "solution": [ + [ + 2, + 8, + 1, + 6, + 3, + 4, + 5, + 9, + 7 + ], + [ + 4, + 9, + 3, + 7, + 5, + 2, + 6, + 8, + 1 + ], + [ + 6, + 5, + 7, + 9, + 1, + 8, + 2, + 3, + 4 + ], + [ + 3, + 1, + 4, + 8, + 9, + 6, + 7, + 5, + 2 + ], + [ + 9, + 6, + 8, + 2, + 7, + 5, + 4, + 1, + 3 + ], + [ + 7, + 2, + 5, + 1, + 4, + 3, + 8, + 6, + 9 + ], + [ + 5, + 3, + 9, + 4, + 8, + 7, + 1, + 2, + 6 + ], + [ + 1, + 7, + 6, + 5, + 2, + 9, + 3, + 4, + 8 + ], + [ + 8, + 4, + 2, + 3, + 6, + 1, + 9, + 7, + 5 + ] + ] + }, + { + "id": 11, + "board": [ + [ + 6, + 9, + 7, + 0, + 5, + 2, + 8, + 3, + 4 + ], + [ + 8, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 9 + ], + [ + 1, + 4, + 0, + 3, + 9, + 8, + 0, + 0, + 6 + ], + [ + 5, + 6, + 0, + 2, + 0, + 0, + 9, + 0, + 3 + ], + [ + 0, + 7, + 8, + 9, + 6, + 0, + 5, + 1, + 0 + ], + [ + 2, + 3, + 9, + 8, + 0, + 5, + 6, + 4, + 7 + ], + [ + 9, + 8, + 4, + 7, + 3, + 0, + 0, + 6, + 0 + ], + [ + 3, + 0, + 0, + 5, + 0, + 9, + 4, + 7, + 8 + ], + [ + 7, + 0, + 0, + 0, + 8, + 0, + 3, + 9, + 1 + ] + ], + "solution": [ + [ + 6, + 9, + 7, + 1, + 5, + 2, + 8, + 3, + 4 + ], + [ + 8, + 2, + 3, + 4, + 7, + 6, + 1, + 5, + 9 + ], + [ + 1, + 4, + 5, + 3, + 9, + 8, + 7, + 2, + 6 + ], + [ + 5, + 6, + 1, + 2, + 4, + 7, + 9, + 8, + 3 + ], + [ + 4, + 7, + 8, + 9, + 6, + 3, + 5, + 1, + 2 + ], + [ + 2, + 3, + 9, + 8, + 1, + 5, + 6, + 4, + 7 + ], + [ + 9, + 8, + 4, + 7, + 3, + 1, + 2, + 6, + 5 + ], + [ + 3, + 1, + 6, + 5, + 2, + 9, + 4, + 7, + 8 + ], + [ + 7, + 5, + 2, + 6, + 8, + 4, + 3, + 9, + 1 + ] + ] + }, + { + "id": 12, + "board": [ + [ + 3, + 0, + 2, + 0, + 0, + 1, + 5, + 9, + 7 + ], + [ + 4, + 5, + 7, + 9, + 2, + 3, + 1, + 0, + 0 + ], + [ + 8, + 9, + 1, + 5, + 6, + 7, + 2, + 3, + 4 + ], + [ + 2, + 0, + 0, + 0, + 7, + 9, + 4, + 5, + 0 + ], + [ + 9, + 0, + 0, + 2, + 0, + 4, + 7, + 0, + 1 + ], + [ + 5, + 7, + 0, + 0, + 0, + 0, + 9, + 2, + 3 + ], + [ + 6, + 4, + 0, + 1, + 0, + 0, + 0, + 7, + 2 + ], + [ + 7, + 2, + 0, + 0, + 0, + 0, + 0, + 1, + 5 + ], + [ + 1, + 0, + 5, + 7, + 0, + 2, + 6, + 4, + 9 + ] + ], + "solution": [ + [ + 3, + 6, + 2, + 4, + 8, + 1, + 5, + 9, + 7 + ], + [ + 4, + 5, + 7, + 9, + 2, + 3, + 1, + 6, + 8 + ], + [ + 8, + 9, + 1, + 5, + 6, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 8, + 3, + 7, + 9, + 4, + 5, + 6 + ], + [ + 9, + 3, + 6, + 2, + 5, + 4, + 7, + 8, + 1 + ], + [ + 5, + 7, + 4, + 6, + 1, + 8, + 9, + 2, + 3 + ], + [ + 6, + 4, + 3, + 1, + 9, + 5, + 8, + 7, + 2 + ], + [ + 7, + 2, + 9, + 8, + 4, + 6, + 3, + 1, + 5 + ], + [ + 1, + 8, + 5, + 7, + 3, + 2, + 6, + 4, + 9 + ] + ] + }, + { + "id": 13, + "board": [ + [ + 8, + 1, + 4, + 6, + 2, + 3, + 5, + 0, + 7 + ], + [ + 7, + 3, + 2, + 9, + 5, + 8, + 0, + 0, + 6 + ], + [ + 9, + 6, + 5, + 1, + 4, + 7, + 3, + 2, + 8 + ], + [ + 6, + 0, + 8, + 0, + 0, + 9, + 0, + 0, + 4 + ], + [ + 4, + 9, + 7, + 2, + 1, + 5, + 6, + 8, + 3 + ], + [ + 1, + 0, + 3, + 4, + 0, + 6, + 9, + 0, + 0 + ], + [ + 2, + 7, + 1, + 0, + 6, + 4, + 8, + 3, + 9 + ], + [ + 0, + 8, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 8, + 1, + 4, + 6, + 2, + 3, + 5, + 9, + 7 + ], + [ + 7, + 3, + 2, + 9, + 5, + 8, + 1, + 4, + 6 + ], + [ + 9, + 6, + 5, + 1, + 4, + 7, + 3, + 2, + 8 + ], + [ + 6, + 5, + 8, + 3, + 7, + 9, + 2, + 1, + 4 + ], + [ + 4, + 9, + 7, + 2, + 1, + 5, + 6, + 8, + 3 + ], + [ + 1, + 2, + 3, + 4, + 8, + 6, + 9, + 7, + 5 + ], + [ + 2, + 7, + 1, + 5, + 6, + 4, + 8, + 3, + 9 + ], + [ + 3, + 8, + 6, + 7, + 9, + 2, + 4, + 5, + 1 + ], + [ + 5, + 4, + 9, + 8, + 3, + 1, + 7, + 6, + 2 + ] + ] + }, + { + "id": 14, + "board": [ + [ + 0, + 7, + 0, + 0, + 0, + 1, + 0, + 9, + 2 + ], + [ + 9, + 5, + 8, + 3, + 2, + 7, + 6, + 4, + 1 + ], + [ + 1, + 2, + 4, + 9, + 6, + 8, + 5, + 7, + 3 + ], + [ + 5, + 4, + 1, + 8, + 9, + 6, + 2, + 3, + 7 + ], + [ + 7, + 6, + 9, + 2, + 3, + 4, + 1, + 8, + 5 + ], + [ + 8, + 3, + 2, + 1, + 7, + 5, + 0, + 6, + 0 + ], + [ + 0, + 0, + 5, + 7, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 7, + 5, + 0 + ], + [ + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 7, + 6, + 4, + 5, + 1, + 8, + 9, + 2 + ], + [ + 9, + 5, + 8, + 3, + 2, + 7, + 6, + 4, + 1 + ], + [ + 1, + 2, + 4, + 9, + 6, + 8, + 5, + 7, + 3 + ], + [ + 5, + 4, + 1, + 8, + 9, + 6, + 2, + 3, + 7 + ], + [ + 7, + 6, + 9, + 2, + 3, + 4, + 1, + 8, + 5 + ], + [ + 8, + 3, + 2, + 1, + 7, + 5, + 4, + 6, + 9 + ], + [ + 2, + 8, + 5, + 7, + 4, + 3, + 9, + 1, + 6 + ], + [ + 4, + 9, + 3, + 6, + 1, + 2, + 7, + 5, + 8 + ], + [ + 6, + 1, + 7, + 5, + 8, + 9, + 3, + 2, + 4 + ] + ] + }, + { + "id": 15, + "board": [ + [ + 0, + 0, + 0, + 6, + 0, + 9, + 5, + 4, + 0 + ], + [ + 9, + 2, + 4, + 1, + 3, + 5, + 6, + 7, + 8 + ], + [ + 6, + 5, + 0, + 7, + 4, + 0, + 9, + 3, + 0 + ], + [ + 0, + 0, + 9, + 5, + 0, + 0, + 3, + 1, + 7 + ], + [ + 0, + 0, + 0, + 4, + 9, + 1, + 8, + 6, + 0 + ], + [ + 5, + 1, + 6, + 0, + 7, + 0, + 2, + 9, + 4 + ], + [ + 3, + 9, + 0, + 2, + 5, + 4, + 1, + 8, + 6 + ], + [ + 0, + 0, + 5, + 0, + 0, + 0, + 7, + 2, + 9 + ], + [ + 0, + 0, + 0, + 9, + 0, + 7, + 4, + 5, + 3 + ] + ], + "solution": [ + [ + 7, + 3, + 8, + 6, + 2, + 9, + 5, + 4, + 1 + ], + [ + 9, + 2, + 4, + 1, + 3, + 5, + 6, + 7, + 8 + ], + [ + 6, + 5, + 1, + 7, + 4, + 8, + 9, + 3, + 2 + ], + [ + 4, + 8, + 9, + 5, + 6, + 2, + 3, + 1, + 7 + ], + [ + 2, + 7, + 3, + 4, + 9, + 1, + 8, + 6, + 5 + ], + [ + 5, + 1, + 6, + 8, + 7, + 3, + 2, + 9, + 4 + ], + [ + 3, + 9, + 7, + 2, + 5, + 4, + 1, + 8, + 6 + ], + [ + 1, + 4, + 5, + 3, + 8, + 6, + 7, + 2, + 9 + ], + [ + 8, + 6, + 2, + 9, + 1, + 7, + 4, + 5, + 3 + ] + ] + }, + { + "id": 16, + "board": [ + [ + 8, + 2, + 1, + 0, + 5, + 6, + 7, + 4, + 3 + ], + [ + 7, + 9, + 6, + 4, + 0, + 0, + 0, + 0, + 0 + ], + [ + 5, + 3, + 4, + 8, + 7, + 1, + 0, + 6, + 2 + ], + [ + 2, + 4, + 8, + 1, + 0, + 5, + 0, + 7, + 9 + ], + [ + 6, + 0, + 0, + 2, + 8, + 9, + 3, + 0, + 4 + ], + [ + 3, + 0, + 9, + 6, + 4, + 7, + 0, + 2, + 8 + ], + [ + 1, + 8, + 0, + 0, + 6, + 4, + 2, + 9, + 0 + ], + [ + 4, + 0, + 2, + 7, + 9, + 0, + 0, + 3, + 0 + ], + [ + 0, + 0, + 0, + 3, + 0, + 2, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 8, + 2, + 1, + 9, + 5, + 6, + 7, + 4, + 3 + ], + [ + 7, + 9, + 6, + 4, + 2, + 3, + 8, + 1, + 5 + ], + [ + 5, + 3, + 4, + 8, + 7, + 1, + 9, + 6, + 2 + ], + [ + 2, + 4, + 8, + 1, + 3, + 5, + 6, + 7, + 9 + ], + [ + 6, + 1, + 7, + 2, + 8, + 9, + 3, + 5, + 4 + ], + [ + 3, + 5, + 9, + 6, + 4, + 7, + 1, + 2, + 8 + ], + [ + 1, + 8, + 3, + 5, + 6, + 4, + 2, + 9, + 7 + ], + [ + 4, + 6, + 2, + 7, + 9, + 8, + 5, + 3, + 1 + ], + [ + 9, + 7, + 5, + 3, + 1, + 2, + 4, + 8, + 6 + ] + ] + }, + { + "id": 17, + "board": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 0, + 8 + ], + [ + 0, + 0, + 0, + 0, + 0, + 8, + 3, + 0, + 5 + ], + [ + 8, + 0, + 9, + 3, + 1, + 7, + 6, + 2, + 4 + ], + [ + 0, + 0, + 0, + 5, + 0, + 4, + 8, + 0, + 0 + ], + [ + 2, + 4, + 0, + 6, + 9, + 1, + 5, + 7, + 3 + ], + [ + 0, + 0, + 0, + 8, + 7, + 3, + 2, + 4, + 0 + ], + [ + 6, + 9, + 3, + 1, + 8, + 2, + 4, + 5, + 7 + ], + [ + 7, + 8, + 2, + 0, + 0, + 0, + 1, + 3, + 6 + ], + [ + 5, + 1, + 4, + 7, + 3, + 6, + 9, + 8, + 2 + ] + ], + "solution": [ + [ + 3, + 2, + 6, + 4, + 5, + 9, + 7, + 1, + 8 + ], + [ + 4, + 7, + 1, + 2, + 6, + 8, + 3, + 9, + 5 + ], + [ + 8, + 5, + 9, + 3, + 1, + 7, + 6, + 2, + 4 + ], + [ + 1, + 3, + 7, + 5, + 2, + 4, + 8, + 6, + 9 + ], + [ + 2, + 4, + 8, + 6, + 9, + 1, + 5, + 7, + 3 + ], + [ + 9, + 6, + 5, + 8, + 7, + 3, + 2, + 4, + 1 + ], + [ + 6, + 9, + 3, + 1, + 8, + 2, + 4, + 5, + 7 + ], + [ + 7, + 8, + 2, + 9, + 4, + 5, + 1, + 3, + 6 + ], + [ + 5, + 1, + 4, + 7, + 3, + 6, + 9, + 8, + 2 + ] + ] + }, + { + "id": 18, + "board": [ + [ + 0, + 0, + 7, + 0, + 0, + 0, + 6, + 4, + 0 + ], + [ + 0, + 0, + 6, + 7, + 4, + 0, + 3, + 1, + 0 + ], + [ + 0, + 4, + 0, + 0, + 0, + 0, + 7, + 2, + 9 + ], + [ + 6, + 5, + 0, + 4, + 7, + 3, + 1, + 8, + 2 + ], + [ + 4, + 7, + 8, + 2, + 5, + 1, + 9, + 3, + 6 + ], + [ + 0, + 1, + 0, + 0, + 0, + 8, + 4, + 5, + 7 + ], + [ + 0, + 0, + 0, + 5, + 0, + 7, + 8, + 9, + 4 + ], + [ + 7, + 9, + 5, + 8, + 3, + 4, + 2, + 6, + 1 + ], + [ + 0, + 0, + 4, + 1, + 0, + 0, + 5, + 7, + 3 + ] + ], + "solution": [ + [ + 3, + 8, + 7, + 9, + 1, + 2, + 6, + 4, + 5 + ], + [ + 9, + 2, + 6, + 7, + 4, + 5, + 3, + 1, + 8 + ], + [ + 5, + 4, + 1, + 3, + 8, + 6, + 7, + 2, + 9 + ], + [ + 6, + 5, + 9, + 4, + 7, + 3, + 1, + 8, + 2 + ], + [ + 4, + 7, + 8, + 2, + 5, + 1, + 9, + 3, + 6 + ], + [ + 2, + 1, + 3, + 6, + 9, + 8, + 4, + 5, + 7 + ], + [ + 1, + 3, + 2, + 5, + 6, + 7, + 8, + 9, + 4 + ], + [ + 7, + 9, + 5, + 8, + 3, + 4, + 2, + 6, + 1 + ], + [ + 8, + 6, + 4, + 1, + 2, + 9, + 5, + 7, + 3 + ] + ] + }, + { + "id": 19, + "board": [ + [ + 2, + 5, + 9, + 1, + 7, + 6, + 4, + 3, + 8 + ], + [ + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 0, + 6 + ], + [ + 8, + 3, + 6, + 4, + 5, + 9, + 0, + 1, + 7 + ], + [ + 0, + 0, + 3, + 0, + 4, + 0, + 0, + 6, + 0 + ], + [ + 6, + 2, + 5, + 9, + 0, + 1, + 3, + 7, + 4 + ], + [ + 0, + 0, + 8, + 0, + 6, + 0, + 0, + 2, + 0 + ], + [ + 0, + 8, + 2, + 0, + 1, + 4, + 6, + 0, + 3 + ], + [ + 3, + 7, + 4, + 6, + 9, + 5, + 1, + 8, + 2 + ], + [ + 0, + 6, + 1, + 0, + 3, + 0, + 7, + 4, + 0 + ] + ], + "solution": [ + [ + 2, + 5, + 9, + 1, + 7, + 6, + 4, + 3, + 8 + ], + [ + 1, + 4, + 7, + 8, + 2, + 3, + 5, + 9, + 6 + ], + [ + 8, + 3, + 6, + 4, + 5, + 9, + 2, + 1, + 7 + ], + [ + 7, + 9, + 3, + 5, + 4, + 2, + 8, + 6, + 1 + ], + [ + 6, + 2, + 5, + 9, + 8, + 1, + 3, + 7, + 4 + ], + [ + 4, + 1, + 8, + 3, + 6, + 7, + 9, + 2, + 5 + ], + [ + 9, + 8, + 2, + 7, + 1, + 4, + 6, + 5, + 3 + ], + [ + 3, + 7, + 4, + 6, + 9, + 5, + 1, + 8, + 2 + ], + [ + 5, + 6, + 1, + 2, + 3, + 8, + 7, + 4, + 9 + ] + ] + }, + { + "id": 20, + "board": [ + [ + 0, + 7, + 0, + 0, + 6, + 9, + 5, + 2, + 0 + ], + [ + 3, + 5, + 2, + 1, + 4, + 7, + 8, + 6, + 9 + ], + [ + 6, + 8, + 9, + 2, + 3, + 5, + 1, + 7, + 4 + ], + [ + 5, + 0, + 0, + 6, + 0, + 3, + 9, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 7, + 0, + 0 + ], + [ + 0, + 0, + 7, + 4, + 5, + 2, + 6, + 3, + 0 + ], + [ + 0, + 0, + 6, + 5, + 0, + 4, + 3, + 0, + 7 + ], + [ + 7, + 4, + 5, + 3, + 8, + 1, + 2, + 9, + 6 + ], + [ + 0, + 3, + 0, + 7, + 0, + 6, + 4, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 7, + 4, + 8, + 6, + 9, + 5, + 2, + 3 + ], + [ + 3, + 5, + 2, + 1, + 4, + 7, + 8, + 6, + 9 + ], + [ + 6, + 8, + 9, + 2, + 3, + 5, + 1, + 7, + 4 + ], + [ + 5, + 2, + 1, + 6, + 7, + 3, + 9, + 4, + 8 + ], + [ + 4, + 6, + 3, + 9, + 1, + 8, + 7, + 5, + 2 + ], + [ + 8, + 9, + 7, + 4, + 5, + 2, + 6, + 3, + 1 + ], + [ + 2, + 1, + 6, + 5, + 9, + 4, + 3, + 8, + 7 + ], + [ + 7, + 4, + 5, + 3, + 8, + 1, + 2, + 9, + 6 + ], + [ + 9, + 3, + 8, + 7, + 2, + 6, + 4, + 1, + 5 + ] + ] + }, + { + "id": 21, + "board": [ + [ + 4, + 1, + 7, + 2, + 6, + 8, + 5, + 9, + 3 + ], + [ + 6, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 9, + 8, + 0, + 0, + 0, + 0, + 2, + 6, + 0 + ], + [ + 5, + 3, + 1, + 6, + 7, + 2, + 8, + 4, + 9 + ], + [ + 8, + 7, + 4, + 5, + 9, + 3, + 6, + 1, + 2 + ], + [ + 2, + 9, + 6, + 1, + 8, + 4, + 7, + 3, + 5 + ], + [ + 0, + 4, + 0, + 0, + 3, + 5, + 0, + 0, + 6 + ], + [ + 0, + 6, + 0, + 4, + 0, + 0, + 3, + 5, + 0 + ], + [ + 3, + 5, + 0, + 0, + 0, + 6, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 1, + 7, + 2, + 6, + 8, + 5, + 9, + 3 + ], + [ + 6, + 2, + 3, + 7, + 5, + 9, + 4, + 8, + 1 + ], + [ + 9, + 8, + 5, + 3, + 4, + 1, + 2, + 6, + 7 + ], + [ + 5, + 3, + 1, + 6, + 7, + 2, + 8, + 4, + 9 + ], + [ + 8, + 7, + 4, + 5, + 9, + 3, + 6, + 1, + 2 + ], + [ + 2, + 9, + 6, + 1, + 8, + 4, + 7, + 3, + 5 + ], + [ + 7, + 4, + 8, + 9, + 3, + 5, + 1, + 2, + 6 + ], + [ + 1, + 6, + 9, + 4, + 2, + 7, + 3, + 5, + 8 + ], + [ + 3, + 5, + 2, + 8, + 1, + 6, + 9, + 7, + 4 + ] + ] + }, + { + "id": 22, + "board": [ + [ + 2, + 9, + 8, + 1, + 0, + 0, + 0, + 0, + 6 + ], + [ + 4, + 6, + 3, + 0, + 7, + 5, + 2, + 8, + 1 + ], + [ + 1, + 5, + 7, + 6, + 2, + 8, + 9, + 4, + 3 + ], + [ + 8, + 0, + 9, + 0, + 0, + 2, + 0, + 5, + 4 + ], + [ + 3, + 2, + 4, + 5, + 0, + 0, + 7, + 0, + 0 + ], + [ + 5, + 1, + 6, + 0, + 0, + 7, + 3, + 9, + 2 + ], + [ + 9, + 4, + 1, + 2, + 5, + 6, + 8, + 3, + 7 + ], + [ + 7, + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 6, + 0, + 0, + 7, + 0, + 0, + 4, + 0, + 0 + ] + ], + "solution": [ + [ + 2, + 9, + 8, + 1, + 3, + 4, + 5, + 7, + 6 + ], + [ + 4, + 6, + 3, + 9, + 7, + 5, + 2, + 8, + 1 + ], + [ + 1, + 5, + 7, + 6, + 2, + 8, + 9, + 4, + 3 + ], + [ + 8, + 7, + 9, + 3, + 6, + 2, + 1, + 5, + 4 + ], + [ + 3, + 2, + 4, + 5, + 1, + 9, + 7, + 6, + 8 + ], + [ + 5, + 1, + 6, + 4, + 8, + 7, + 3, + 9, + 2 + ], + [ + 9, + 4, + 1, + 2, + 5, + 6, + 8, + 3, + 7 + ], + [ + 7, + 3, + 5, + 8, + 4, + 1, + 6, + 2, + 9 + ], + [ + 6, + 8, + 2, + 7, + 9, + 3, + 4, + 1, + 5 + ] + ] + }, + { + "id": 23, + "board": [ + [ + 0, + 8, + 4, + 0, + 0, + 9, + 0, + 1, + 0 + ], + [ + 2, + 3, + 0, + 4, + 1, + 0, + 8, + 0, + 0 + ], + [ + 6, + 9, + 1, + 8, + 7, + 2, + 3, + 5, + 4 + ], + [ + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 1 + ], + [ + 3, + 0, + 6, + 1, + 9, + 0, + 5, + 4, + 2 + ], + [ + 0, + 4, + 0, + 0, + 0, + 0, + 9, + 0, + 8 + ], + [ + 8, + 1, + 3, + 0, + 6, + 7, + 0, + 2, + 5 + ], + [ + 0, + 6, + 5, + 3, + 2, + 4, + 1, + 8, + 9 + ], + [ + 4, + 2, + 0, + 5, + 8, + 1, + 6, + 7, + 3 + ] + ], + "solution": [ + [ + 5, + 8, + 4, + 6, + 3, + 9, + 2, + 1, + 7 + ], + [ + 2, + 3, + 7, + 4, + 1, + 5, + 8, + 9, + 6 + ], + [ + 6, + 9, + 1, + 8, + 7, + 2, + 3, + 5, + 4 + ], + [ + 9, + 5, + 8, + 2, + 4, + 3, + 7, + 6, + 1 + ], + [ + 3, + 7, + 6, + 1, + 9, + 8, + 5, + 4, + 2 + ], + [ + 1, + 4, + 2, + 7, + 5, + 6, + 9, + 3, + 8 + ], + [ + 8, + 1, + 3, + 9, + 6, + 7, + 4, + 2, + 5 + ], + [ + 7, + 6, + 5, + 3, + 2, + 4, + 1, + 8, + 9 + ], + [ + 4, + 2, + 9, + 5, + 8, + 1, + 6, + 7, + 3 + ] + ] + }, + { + "id": 24, + "board": [ + [ + 3, + 7, + 8, + 0, + 0, + 2, + 4, + 6, + 0 + ], + [ + 1, + 5, + 2, + 0, + 4, + 6, + 3, + 8, + 0 + ], + [ + 6, + 9, + 4, + 0, + 0, + 0, + 0, + 5, + 2 + ], + [ + 7, + 3, + 1, + 2, + 0, + 0, + 5, + 4, + 0 + ], + [ + 4, + 8, + 9, + 3, + 0, + 0, + 0, + 2, + 0 + ], + [ + 5, + 2, + 6, + 0, + 0, + 4, + 9, + 0, + 0 + ], + [ + 2, + 6, + 3, + 4, + 0, + 0, + 8, + 1, + 0 + ], + [ + 0, + 4, + 7, + 0, + 2, + 0, + 6, + 9, + 3 + ], + [ + 9, + 1, + 5, + 6, + 0, + 0, + 2, + 7, + 4 + ] + ], + "solution": [ + [ + 3, + 7, + 8, + 9, + 5, + 2, + 4, + 6, + 1 + ], + [ + 1, + 5, + 2, + 7, + 4, + 6, + 3, + 8, + 9 + ], + [ + 6, + 9, + 4, + 1, + 3, + 8, + 7, + 5, + 2 + ], + [ + 7, + 3, + 1, + 2, + 6, + 9, + 5, + 4, + 8 + ], + [ + 4, + 8, + 9, + 3, + 7, + 5, + 1, + 2, + 6 + ], + [ + 5, + 2, + 6, + 8, + 1, + 4, + 9, + 3, + 7 + ], + [ + 2, + 6, + 3, + 4, + 9, + 7, + 8, + 1, + 5 + ], + [ + 8, + 4, + 7, + 5, + 2, + 1, + 6, + 9, + 3 + ], + [ + 9, + 1, + 5, + 6, + 8, + 3, + 2, + 7, + 4 + ] + ] + }, + { + "id": 25, + "board": [ + [ + 0, + 1, + 4, + 2, + 9, + 8, + 0, + 3, + 7 + ], + [ + 8, + 0, + 0, + 0, + 1, + 3, + 0, + 9, + 0 + ], + [ + 0, + 0, + 0, + 6, + 5, + 7, + 4, + 1, + 8 + ], + [ + 9, + 3, + 8, + 5, + 2, + 6, + 1, + 7, + 4 + ], + [ + 0, + 0, + 0, + 8, + 0, + 9, + 0, + 6, + 0 + ], + [ + 0, + 0, + 0, + 1, + 7, + 4, + 9, + 8, + 3 + ], + [ + 0, + 6, + 0, + 7, + 4, + 2, + 0, + 5, + 9 + ], + [ + 0, + 8, + 0, + 9, + 6, + 5, + 0, + 4, + 1 + ], + [ + 0, + 0, + 0, + 3, + 8, + 1, + 7, + 2, + 6 + ] + ], + "solution": [ + [ + 5, + 1, + 4, + 2, + 9, + 8, + 6, + 3, + 7 + ], + [ + 8, + 7, + 6, + 4, + 1, + 3, + 2, + 9, + 5 + ], + [ + 2, + 9, + 3, + 6, + 5, + 7, + 4, + 1, + 8 + ], + [ + 9, + 3, + 8, + 5, + 2, + 6, + 1, + 7, + 4 + ], + [ + 1, + 4, + 7, + 8, + 3, + 9, + 5, + 6, + 2 + ], + [ + 6, + 2, + 5, + 1, + 7, + 4, + 9, + 8, + 3 + ], + [ + 3, + 6, + 1, + 7, + 4, + 2, + 8, + 5, + 9 + ], + [ + 7, + 8, + 2, + 9, + 6, + 5, + 3, + 4, + 1 + ], + [ + 4, + 5, + 9, + 3, + 8, + 1, + 7, + 2, + 6 + ] + ] + }, + { + "id": 26, + "board": [ + [ + 5, + 2, + 8, + 0, + 0, + 7, + 4, + 9, + 3 + ], + [ + 3, + 1, + 9, + 4, + 8, + 0, + 0, + 6, + 2 + ], + [ + 6, + 7, + 4, + 0, + 3, + 9, + 0, + 0, + 0 + ], + [ + 9, + 0, + 1, + 0, + 7, + 0, + 6, + 2, + 0 + ], + [ + 0, + 3, + 0, + 0, + 0, + 0, + 9, + 0, + 0 + ], + [ + 7, + 4, + 6, + 0, + 5, + 2, + 3, + 1, + 8 + ], + [ + 1, + 6, + 3, + 7, + 4, + 8, + 2, + 5, + 0 + ], + [ + 4, + 9, + 7, + 5, + 2, + 1, + 8, + 3, + 6 + ], + [ + 0, + 0, + 0, + 0, + 9, + 0, + 1, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 2, + 8, + 1, + 6, + 7, + 4, + 9, + 3 + ], + [ + 3, + 1, + 9, + 4, + 8, + 5, + 7, + 6, + 2 + ], + [ + 6, + 7, + 4, + 2, + 3, + 9, + 5, + 8, + 1 + ], + [ + 9, + 5, + 1, + 8, + 7, + 3, + 6, + 2, + 4 + ], + [ + 8, + 3, + 2, + 6, + 1, + 4, + 9, + 7, + 5 + ], + [ + 7, + 4, + 6, + 9, + 5, + 2, + 3, + 1, + 8 + ], + [ + 1, + 6, + 3, + 7, + 4, + 8, + 2, + 5, + 9 + ], + [ + 4, + 9, + 7, + 5, + 2, + 1, + 8, + 3, + 6 + ], + [ + 2, + 8, + 5, + 3, + 9, + 6, + 1, + 4, + 7 + ] + ] + }, + { + "id": 27, + "board": [ + [ + 0, + 0, + 6, + 1, + 3, + 5, + 9, + 8, + 4 + ], + [ + 4, + 1, + 3, + 7, + 9, + 8, + 2, + 5, + 6 + ], + [ + 8, + 9, + 5, + 4, + 6, + 2, + 3, + 7, + 1 + ], + [ + 0, + 0, + 4, + 0, + 0, + 6, + 0, + 3, + 0 + ], + [ + 6, + 0, + 0, + 0, + 4, + 0, + 0, + 2, + 0 + ], + [ + 0, + 8, + 0, + 2, + 0, + 0, + 4, + 6, + 5 + ], + [ + 9, + 0, + 7, + 0, + 2, + 4, + 6, + 1, + 8 + ], + [ + 0, + 4, + 2, + 6, + 8, + 0, + 0, + 9, + 3 + ], + [ + 0, + 6, + 8, + 0, + 0, + 0, + 0, + 4, + 2 + ] + ], + "solution": [ + [ + 2, + 7, + 6, + 1, + 3, + 5, + 9, + 8, + 4 + ], + [ + 4, + 1, + 3, + 7, + 9, + 8, + 2, + 5, + 6 + ], + [ + 8, + 9, + 5, + 4, + 6, + 2, + 3, + 7, + 1 + ], + [ + 5, + 2, + 4, + 8, + 7, + 6, + 1, + 3, + 9 + ], + [ + 6, + 3, + 1, + 5, + 4, + 9, + 8, + 2, + 7 + ], + [ + 7, + 8, + 9, + 2, + 1, + 3, + 4, + 6, + 5 + ], + [ + 9, + 5, + 7, + 3, + 2, + 4, + 6, + 1, + 8 + ], + [ + 1, + 4, + 2, + 6, + 8, + 7, + 5, + 9, + 3 + ], + [ + 3, + 6, + 8, + 9, + 5, + 1, + 7, + 4, + 2 + ] + ] + }, + { + "id": 28, + "board": [ + [ + 9, + 8, + 0, + 0, + 0, + 0, + 5, + 0, + 0 + ], + [ + 0, + 4, + 0, + 9, + 5, + 1, + 8, + 6, + 3 + ], + [ + 3, + 6, + 5, + 8, + 0, + 0, + 1, + 0, + 9 + ], + [ + 0, + 3, + 0, + 0, + 9, + 5, + 4, + 1, + 7 + ], + [ + 4, + 0, + 9, + 2, + 8, + 7, + 6, + 3, + 5 + ], + [ + 5, + 7, + 6, + 0, + 0, + 0, + 2, + 9, + 8 + ], + [ + 6, + 0, + 0, + 4, + 0, + 9, + 3, + 0, + 1 + ], + [ + 1, + 9, + 4, + 5, + 3, + 8, + 7, + 2, + 6 + ], + [ + 0, + 0, + 3, + 0, + 0, + 0, + 9, + 0, + 4 + ] + ], + "solution": [ + [ + 9, + 8, + 1, + 3, + 6, + 4, + 5, + 7, + 2 + ], + [ + 7, + 4, + 2, + 9, + 5, + 1, + 8, + 6, + 3 + ], + [ + 3, + 6, + 5, + 8, + 7, + 2, + 1, + 4, + 9 + ], + [ + 2, + 3, + 8, + 6, + 9, + 5, + 4, + 1, + 7 + ], + [ + 4, + 1, + 9, + 2, + 8, + 7, + 6, + 3, + 5 + ], + [ + 5, + 7, + 6, + 1, + 4, + 3, + 2, + 9, + 8 + ], + [ + 6, + 5, + 7, + 4, + 2, + 9, + 3, + 8, + 1 + ], + [ + 1, + 9, + 4, + 5, + 3, + 8, + 7, + 2, + 6 + ], + [ + 8, + 2, + 3, + 7, + 1, + 6, + 9, + 5, + 4 + ] + ] + }, + { + "id": 29, + "board": [ + [ + 6, + 0, + 0, + 0, + 0, + 0, + 4, + 8, + 0 + ], + [ + 7, + 0, + 8, + 0, + 0, + 6, + 3, + 5, + 0 + ], + [ + 0, + 0, + 1, + 5, + 0, + 0, + 6, + 0, + 0 + ], + [ + 8, + 7, + 9, + 0, + 0, + 0, + 5, + 2, + 6 + ], + [ + 4, + 5, + 0, + 6, + 9, + 8, + 7, + 1, + 3 + ], + [ + 1, + 6, + 3, + 7, + 5, + 2, + 9, + 4, + 8 + ], + [ + 5, + 8, + 6, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 9, + 2, + 7, + 8, + 6, + 5, + 1, + 3, + 4 + ], + [ + 3, + 1, + 4, + 0, + 0, + 0, + 8, + 6, + 5 + ] + ], + "solution": [ + [ + 6, + 3, + 5, + 1, + 7, + 9, + 4, + 8, + 2 + ], + [ + 7, + 9, + 8, + 2, + 4, + 6, + 3, + 5, + 1 + ], + [ + 2, + 4, + 1, + 5, + 8, + 3, + 6, + 7, + 9 + ], + [ + 8, + 7, + 9, + 3, + 1, + 4, + 5, + 2, + 6 + ], + [ + 4, + 5, + 2, + 6, + 9, + 8, + 7, + 1, + 3 + ], + [ + 1, + 6, + 3, + 7, + 5, + 2, + 9, + 4, + 8 + ], + [ + 5, + 8, + 6, + 4, + 3, + 1, + 2, + 9, + 7 + ], + [ + 9, + 2, + 7, + 8, + 6, + 5, + 1, + 3, + 4 + ], + [ + 3, + 1, + 4, + 9, + 2, + 7, + 8, + 6, + 5 + ] + ] + }, + { + "id": 30, + "board": [ + [ + 0, + 0, + 2, + 1, + 0, + 3, + 4, + 9, + 6 + ], + [ + 3, + 4, + 9, + 7, + 6, + 5, + 1, + 8, + 2 + ], + [ + 8, + 0, + 6, + 2, + 4, + 9, + 5, + 7, + 3 + ], + [ + 1, + 0, + 3, + 0, + 2, + 7, + 0, + 6, + 5 + ], + [ + 4, + 0, + 0, + 8, + 3, + 6, + 9, + 1, + 0 + ], + [ + 6, + 8, + 0, + 0, + 5, + 1, + 2, + 3, + 0 + ], + [ + 7, + 0, + 4, + 5, + 1, + 8, + 6, + 0, + 9 + ], + [ + 0, + 0, + 0, + 6, + 7, + 0, + 3, + 0, + 1 + ], + [ + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 7, + 2, + 1, + 8, + 3, + 4, + 9, + 6 + ], + [ + 3, + 4, + 9, + 7, + 6, + 5, + 1, + 8, + 2 + ], + [ + 8, + 1, + 6, + 2, + 4, + 9, + 5, + 7, + 3 + ], + [ + 1, + 9, + 3, + 4, + 2, + 7, + 8, + 6, + 5 + ], + [ + 4, + 2, + 5, + 8, + 3, + 6, + 9, + 1, + 7 + ], + [ + 6, + 8, + 7, + 9, + 5, + 1, + 2, + 3, + 4 + ], + [ + 7, + 3, + 4, + 5, + 1, + 8, + 6, + 2, + 9 + ], + [ + 9, + 5, + 8, + 6, + 7, + 2, + 3, + 4, + 1 + ], + [ + 2, + 6, + 1, + 3, + 9, + 4, + 7, + 5, + 8 + ] + ] + }, + { + "id": 31, + "board": [ + [ + 1, + 8, + 6, + 2, + 0, + 7, + 0, + 0, + 0 + ], + [ + 5, + 7, + 0, + 0, + 3, + 0, + 0, + 0, + 6 + ], + [ + 0, + 4, + 0, + 5, + 8, + 6, + 1, + 7, + 2 + ], + [ + 0, + 2, + 5, + 0, + 7, + 1, + 6, + 0, + 8 + ], + [ + 8, + 1, + 0, + 6, + 0, + 4, + 2, + 3, + 0 + ], + [ + 0, + 6, + 0, + 0, + 0, + 2, + 0, + 1, + 0 + ], + [ + 2, + 3, + 1, + 7, + 0, + 5, + 8, + 0, + 0 + ], + [ + 6, + 9, + 8, + 4, + 0, + 0, + 7, + 2, + 5 + ], + [ + 7, + 5, + 4, + 9, + 2, + 8, + 3, + 6, + 1 + ] + ], + "solution": [ + [ + 1, + 8, + 6, + 2, + 4, + 7, + 9, + 5, + 3 + ], + [ + 5, + 7, + 2, + 1, + 3, + 9, + 4, + 8, + 6 + ], + [ + 3, + 4, + 9, + 5, + 8, + 6, + 1, + 7, + 2 + ], + [ + 9, + 2, + 5, + 3, + 7, + 1, + 6, + 4, + 8 + ], + [ + 8, + 1, + 7, + 6, + 5, + 4, + 2, + 3, + 9 + ], + [ + 4, + 6, + 3, + 8, + 9, + 2, + 5, + 1, + 7 + ], + [ + 2, + 3, + 1, + 7, + 6, + 5, + 8, + 9, + 4 + ], + [ + 6, + 9, + 8, + 4, + 1, + 3, + 7, + 2, + 5 + ], + [ + 7, + 5, + 4, + 9, + 2, + 8, + 3, + 6, + 1 + ] + ] + }, + { + "id": 32, + "board": [ + [ + 7, + 3, + 8, + 6, + 1, + 4, + 9, + 2, + 5 + ], + [ + 4, + 5, + 0, + 2, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 2, + 7, + 5, + 0, + 0, + 4, + 8 + ], + [ + 5, + 4, + 0, + 8, + 9, + 0, + 0, + 0, + 0 + ], + [ + 0, + 6, + 0, + 5, + 3, + 0, + 0, + 9, + 4 + ], + [ + 0, + 9, + 0, + 4, + 6, + 0, + 0, + 0, + 0 + ], + [ + 3, + 2, + 4, + 9, + 7, + 8, + 0, + 0, + 0 + ], + [ + 0, + 7, + 0, + 1, + 2, + 5, + 4, + 8, + 3 + ], + [ + 1, + 8, + 5, + 3, + 4, + 6, + 2, + 7, + 9 + ] + ], + "solution": [ + [ + 7, + 3, + 8, + 6, + 1, + 4, + 9, + 2, + 5 + ], + [ + 4, + 5, + 6, + 2, + 8, + 9, + 3, + 1, + 7 + ], + [ + 9, + 1, + 2, + 7, + 5, + 3, + 6, + 4, + 8 + ], + [ + 5, + 4, + 7, + 8, + 9, + 2, + 1, + 3, + 6 + ], + [ + 2, + 6, + 1, + 5, + 3, + 7, + 8, + 9, + 4 + ], + [ + 8, + 9, + 3, + 4, + 6, + 1, + 7, + 5, + 2 + ], + [ + 3, + 2, + 4, + 9, + 7, + 8, + 5, + 6, + 1 + ], + [ + 6, + 7, + 9, + 1, + 2, + 5, + 4, + 8, + 3 + ], + [ + 1, + 8, + 5, + 3, + 4, + 6, + 2, + 7, + 9 + ] + ] + }, + { + "id": 33, + "board": [ + [ + 9, + 6, + 2, + 0, + 4, + 7, + 5, + 8, + 1 + ], + [ + 1, + 0, + 0, + 2, + 8, + 5, + 0, + 0, + 7 + ], + [ + 7, + 8, + 5, + 0, + 0, + 1, + 0, + 0, + 2 + ], + [ + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 4 + ], + [ + 4, + 2, + 6, + 5, + 7, + 8, + 0, + 1, + 9 + ], + [ + 8, + 7, + 0, + 0, + 0, + 3, + 0, + 0, + 0 + ], + [ + 6, + 9, + 8, + 1, + 2, + 4, + 0, + 5, + 3 + ], + [ + 3, + 1, + 4, + 7, + 5, + 6, + 0, + 0, + 8 + ], + [ + 2, + 5, + 7, + 8, + 0, + 9, + 1, + 0, + 0 + ] + ], + "solution": [ + [ + 9, + 6, + 2, + 3, + 4, + 7, + 5, + 8, + 1 + ], + [ + 1, + 4, + 3, + 2, + 8, + 5, + 6, + 9, + 7 + ], + [ + 7, + 8, + 5, + 6, + 9, + 1, + 4, + 3, + 2 + ], + [ + 5, + 3, + 1, + 9, + 6, + 2, + 8, + 7, + 4 + ], + [ + 4, + 2, + 6, + 5, + 7, + 8, + 3, + 1, + 9 + ], + [ + 8, + 7, + 9, + 4, + 1, + 3, + 2, + 6, + 5 + ], + [ + 6, + 9, + 8, + 1, + 2, + 4, + 7, + 5, + 3 + ], + [ + 3, + 1, + 4, + 7, + 5, + 6, + 9, + 2, + 8 + ], + [ + 2, + 5, + 7, + 8, + 3, + 9, + 1, + 4, + 6 + ] + ] + }, + { + "id": 34, + "board": [ + [ + 2, + 6, + 8, + 0, + 5, + 1, + 0, + 3, + 7 + ], + [ + 4, + 3, + 9, + 0, + 0, + 0, + 8, + 5, + 1 + ], + [ + 5, + 7, + 1, + 0, + 3, + 0, + 2, + 6, + 0 + ], + [ + 0, + 9, + 3, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 8, + 0, + 2, + 0, + 9, + 0, + 1, + 7, + 3 + ], + [ + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 8, + 0 + ], + [ + 7, + 2, + 5, + 1, + 8, + 9, + 3, + 4, + 6 + ], + [ + 9, + 8, + 6, + 0, + 4, + 0, + 7, + 1, + 2 + ], + [ + 3, + 1, + 4, + 0, + 2, + 0, + 5, + 9, + 8 + ] + ], + "solution": [ + [ + 2, + 6, + 8, + 4, + 5, + 1, + 9, + 3, + 7 + ], + [ + 4, + 3, + 9, + 2, + 6, + 7, + 8, + 5, + 1 + ], + [ + 5, + 7, + 1, + 9, + 3, + 8, + 2, + 6, + 4 + ], + [ + 1, + 9, + 3, + 8, + 7, + 4, + 6, + 2, + 5 + ], + [ + 8, + 4, + 2, + 6, + 9, + 5, + 1, + 7, + 3 + ], + [ + 6, + 5, + 7, + 3, + 1, + 2, + 4, + 8, + 9 + ], + [ + 7, + 2, + 5, + 1, + 8, + 9, + 3, + 4, + 6 + ], + [ + 9, + 8, + 6, + 5, + 4, + 3, + 7, + 1, + 2 + ], + [ + 3, + 1, + 4, + 7, + 2, + 6, + 5, + 9, + 8 + ] + ] + }, + { + "id": 35, + "board": [ + [ + 5, + 0, + 0, + 4, + 1, + 0, + 0, + 6, + 0 + ], + [ + 4, + 0, + 1, + 8, + 6, + 0, + 5, + 0, + 0 + ], + [ + 0, + 6, + 8, + 2, + 5, + 0, + 0, + 4, + 0 + ], + [ + 0, + 3, + 4, + 0, + 9, + 5, + 0, + 0, + 0 + ], + [ + 6, + 1, + 7, + 3, + 2, + 8, + 9, + 5, + 4 + ], + [ + 0, + 0, + 5, + 0, + 4, + 6, + 0, + 3, + 0 + ], + [ + 7, + 8, + 2, + 5, + 3, + 4, + 0, + 0, + 0 + ], + [ + 1, + 4, + 6, + 9, + 8, + 2, + 3, + 7, + 5 + ], + [ + 0, + 5, + 0, + 6, + 7, + 1, + 4, + 8, + 2 + ] + ], + "solution": [ + [ + 5, + 2, + 3, + 4, + 1, + 7, + 8, + 6, + 9 + ], + [ + 4, + 7, + 1, + 8, + 6, + 9, + 5, + 2, + 3 + ], + [ + 9, + 6, + 8, + 2, + 5, + 3, + 1, + 4, + 7 + ], + [ + 8, + 3, + 4, + 7, + 9, + 5, + 2, + 1, + 6 + ], + [ + 6, + 1, + 7, + 3, + 2, + 8, + 9, + 5, + 4 + ], + [ + 2, + 9, + 5, + 1, + 4, + 6, + 7, + 3, + 8 + ], + [ + 7, + 8, + 2, + 5, + 3, + 4, + 6, + 9, + 1 + ], + [ + 1, + 4, + 6, + 9, + 8, + 2, + 3, + 7, + 5 + ], + [ + 3, + 5, + 9, + 6, + 7, + 1, + 4, + 8, + 2 + ] + ] + }, + { + "id": 36, + "board": [ + [ + 8, + 2, + 4, + 1, + 3, + 7, + 0, + 5, + 6 + ], + [ + 7, + 6, + 9, + 5, + 8, + 2, + 0, + 1, + 0 + ], + [ + 0, + 3, + 0, + 0, + 9, + 4, + 8, + 2, + 0 + ], + [ + 2, + 4, + 0, + 7, + 5, + 3, + 1, + 9, + 0 + ], + [ + 3, + 7, + 8, + 0, + 1, + 0, + 2, + 6, + 0 + ], + [ + 0, + 9, + 5, + 8, + 2, + 6, + 3, + 7, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 3, + 2 + ], + [ + 9, + 8, + 3, + 2, + 0, + 0, + 0, + 4, + 0 + ], + [ + 0, + 5, + 2, + 0, + 7, + 0, + 0, + 8, + 9 + ] + ], + "solution": [ + [ + 8, + 2, + 4, + 1, + 3, + 7, + 9, + 5, + 6 + ], + [ + 7, + 6, + 9, + 5, + 8, + 2, + 4, + 1, + 3 + ], + [ + 5, + 3, + 1, + 6, + 9, + 4, + 8, + 2, + 7 + ], + [ + 2, + 4, + 6, + 7, + 5, + 3, + 1, + 9, + 8 + ], + [ + 3, + 7, + 8, + 4, + 1, + 9, + 2, + 6, + 5 + ], + [ + 1, + 9, + 5, + 8, + 2, + 6, + 3, + 7, + 4 + ], + [ + 6, + 1, + 7, + 9, + 4, + 8, + 5, + 3, + 2 + ], + [ + 9, + 8, + 3, + 2, + 6, + 5, + 7, + 4, + 1 + ], + [ + 4, + 5, + 2, + 3, + 7, + 1, + 6, + 8, + 9 + ] + ] + }, + { + "id": 37, + "board": [ + [ + 0, + 1, + 9, + 5, + 4, + 0, + 7, + 0, + 2 + ], + [ + 0, + 4, + 0, + 2, + 9, + 8, + 0, + 1, + 5 + ], + [ + 0, + 0, + 5, + 6, + 7, + 0, + 3, + 4, + 0 + ], + [ + 9, + 0, + 4, + 0, + 1, + 0, + 5, + 3, + 8 + ], + [ + 5, + 3, + 0, + 8, + 2, + 0, + 4, + 0, + 6 + ], + [ + 8, + 7, + 6, + 4, + 3, + 5, + 9, + 2, + 0 + ], + [ + 1, + 9, + 8, + 3, + 0, + 7, + 2, + 5, + 4 + ], + [ + 0, + 5, + 0, + 9, + 8, + 0, + 1, + 0, + 3 + ], + [ + 0, + 6, + 0, + 1, + 0, + 0, + 8, + 0, + 0 + ] + ], + "solution": [ + [ + 6, + 1, + 9, + 5, + 4, + 3, + 7, + 8, + 2 + ], + [ + 3, + 4, + 7, + 2, + 9, + 8, + 6, + 1, + 5 + ], + [ + 2, + 8, + 5, + 6, + 7, + 1, + 3, + 4, + 9 + ], + [ + 9, + 2, + 4, + 7, + 1, + 6, + 5, + 3, + 8 + ], + [ + 5, + 3, + 1, + 8, + 2, + 9, + 4, + 7, + 6 + ], + [ + 8, + 7, + 6, + 4, + 3, + 5, + 9, + 2, + 1 + ], + [ + 1, + 9, + 8, + 3, + 6, + 7, + 2, + 5, + 4 + ], + [ + 7, + 5, + 2, + 9, + 8, + 4, + 1, + 6, + 3 + ], + [ + 4, + 6, + 3, + 1, + 5, + 2, + 8, + 9, + 7 + ] + ] + }, + { + "id": 38, + "board": [ + [ + 0, + 0, + 8, + 0, + 0, + 3, + 4, + 9, + 0 + ], + [ + 3, + 4, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 5, + 9, + 6, + 7, + 0, + 8, + 2, + 1, + 0 + ], + [ + 0, + 0, + 1, + 0, + 8, + 9, + 0, + 4, + 0 + ], + [ + 9, + 2, + 7, + 4, + 0, + 0, + 3, + 0, + 8 + ], + [ + 8, + 3, + 4, + 6, + 0, + 7, + 9, + 5, + 0 + ], + [ + 1, + 0, + 5, + 8, + 0, + 4, + 6, + 0, + 9 + ], + [ + 4, + 6, + 3, + 1, + 9, + 2, + 5, + 8, + 0 + ], + [ + 2, + 0, + 9, + 5, + 7, + 6, + 1, + 3, + 4 + ] + ], + "solution": [ + [ + 7, + 1, + 8, + 2, + 5, + 3, + 4, + 9, + 6 + ], + [ + 3, + 4, + 2, + 9, + 6, + 1, + 8, + 7, + 5 + ], + [ + 5, + 9, + 6, + 7, + 4, + 8, + 2, + 1, + 3 + ], + [ + 6, + 5, + 1, + 3, + 8, + 9, + 7, + 4, + 2 + ], + [ + 9, + 2, + 7, + 4, + 1, + 5, + 3, + 6, + 8 + ], + [ + 8, + 3, + 4, + 6, + 2, + 7, + 9, + 5, + 1 + ], + [ + 1, + 7, + 5, + 8, + 3, + 4, + 6, + 2, + 9 + ], + [ + 4, + 6, + 3, + 1, + 9, + 2, + 5, + 8, + 7 + ], + [ + 2, + 8, + 9, + 5, + 7, + 6, + 1, + 3, + 4 + ] + ] + }, + { + "id": 39, + "board": [ + [ + 2, + 4, + 0, + 8, + 0, + 0, + 0, + 0, + 9 + ], + [ + 0, + 9, + 8, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 7, + 0, + 0, + 0, + 0, + 6, + 8, + 0 + ], + [ + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 6, + 8 + ], + [ + 9, + 0, + 2, + 6, + 8, + 5, + 1, + 4, + 7 + ], + [ + 8, + 6, + 4, + 7, + 2, + 1, + 5, + 9, + 3 + ], + [ + 4, + 1, + 3, + 2, + 6, + 8, + 0, + 7, + 5 + ], + [ + 5, + 2, + 9, + 4, + 1, + 7, + 8, + 3, + 6 + ], + [ + 0, + 8, + 0, + 5, + 3, + 9, + 4, + 2, + 1 + ] + ], + "solution": [ + [ + 2, + 4, + 1, + 8, + 7, + 6, + 3, + 5, + 9 + ], + [ + 6, + 9, + 8, + 3, + 5, + 2, + 7, + 1, + 4 + ], + [ + 3, + 7, + 5, + 1, + 9, + 4, + 6, + 8, + 2 + ], + [ + 1, + 5, + 7, + 9, + 4, + 3, + 2, + 6, + 8 + ], + [ + 9, + 3, + 2, + 6, + 8, + 5, + 1, + 4, + 7 + ], + [ + 8, + 6, + 4, + 7, + 2, + 1, + 5, + 9, + 3 + ], + [ + 4, + 1, + 3, + 2, + 6, + 8, + 9, + 7, + 5 + ], + [ + 5, + 2, + 9, + 4, + 1, + 7, + 8, + 3, + 6 + ], + [ + 7, + 8, + 6, + 5, + 3, + 9, + 4, + 2, + 1 + ] + ] + }, + { + "id": 40, + "board": [ + [ + 2, + 9, + 3, + 0, + 4, + 1, + 6, + 0, + 7 + ], + [ + 0, + 0, + 7, + 0, + 0, + 9, + 3, + 0, + 2 + ], + [ + 0, + 6, + 8, + 0, + 3, + 7, + 4, + 1, + 0 + ], + [ + 8, + 7, + 1, + 3, + 2, + 6, + 5, + 9, + 4 + ], + [ + 3, + 2, + 4, + 7, + 9, + 5, + 8, + 6, + 0 + ], + [ + 0, + 5, + 6, + 4, + 0, + 8, + 2, + 7, + 3 + ], + [ + 6, + 8, + 2, + 1, + 0, + 4, + 9, + 3, + 5 + ], + [ + 0, + 0, + 0, + 0, + 5, + 0, + 0, + 0, + 8 + ], + [ + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 6 + ] + ], + "solution": [ + [ + 2, + 9, + 3, + 5, + 4, + 1, + 6, + 8, + 7 + ], + [ + 1, + 4, + 7, + 8, + 6, + 9, + 3, + 5, + 2 + ], + [ + 5, + 6, + 8, + 2, + 3, + 7, + 4, + 1, + 9 + ], + [ + 8, + 7, + 1, + 3, + 2, + 6, + 5, + 9, + 4 + ], + [ + 3, + 2, + 4, + 7, + 9, + 5, + 8, + 6, + 1 + ], + [ + 9, + 5, + 6, + 4, + 1, + 8, + 2, + 7, + 3 + ], + [ + 6, + 8, + 2, + 1, + 7, + 4, + 9, + 3, + 5 + ], + [ + 4, + 1, + 9, + 6, + 5, + 3, + 7, + 2, + 8 + ], + [ + 7, + 3, + 5, + 9, + 8, + 2, + 1, + 4, + 6 + ] + ] + }, + { + "id": 41, + "board": [ + [ + 0, + 0, + 9, + 7, + 5, + 1, + 4, + 6, + 0 + ], + [ + 1, + 6, + 4, + 0, + 0, + 9, + 5, + 7, + 2 + ], + [ + 7, + 0, + 0, + 4, + 6, + 2, + 0, + 9, + 0 + ], + [ + 0, + 0, + 3, + 5, + 9, + 0, + 7, + 1, + 6 + ], + [ + 0, + 9, + 7, + 0, + 1, + 6, + 0, + 3, + 5 + ], + [ + 0, + 5, + 1, + 0, + 7, + 3, + 0, + 2, + 4 + ], + [ + 3, + 7, + 2, + 0, + 4, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 8, + 6, + 2, + 0, + 3, + 4, + 7 + ], + [ + 0, + 4, + 6, + 0, + 3, + 0, + 2, + 8, + 1 + ] + ], + "solution": [ + [ + 2, + 3, + 9, + 7, + 5, + 1, + 4, + 6, + 8 + ], + [ + 1, + 6, + 4, + 3, + 8, + 9, + 5, + 7, + 2 + ], + [ + 7, + 8, + 5, + 4, + 6, + 2, + 1, + 9, + 3 + ], + [ + 8, + 2, + 3, + 5, + 9, + 4, + 7, + 1, + 6 + ], + [ + 4, + 9, + 7, + 2, + 1, + 6, + 8, + 3, + 5 + ], + [ + 6, + 5, + 1, + 8, + 7, + 3, + 9, + 2, + 4 + ], + [ + 3, + 7, + 2, + 1, + 4, + 8, + 6, + 5, + 9 + ], + [ + 9, + 1, + 8, + 6, + 2, + 5, + 3, + 4, + 7 + ], + [ + 5, + 4, + 6, + 9, + 3, + 7, + 2, + 8, + 1 + ] + ] + }, + { + "id": 42, + "board": [ + [ + 2, + 6, + 8, + 0, + 3, + 0, + 0, + 0, + 0 + ], + [ + 0, + 9, + 0, + 8, + 2, + 4, + 3, + 0, + 6 + ], + [ + 4, + 3, + 0, + 6, + 0, + 0, + 0, + 0, + 8 + ], + [ + 3, + 0, + 4, + 0, + 6, + 2, + 0, + 8, + 1 + ], + [ + 1, + 0, + 6, + 7, + 0, + 8, + 0, + 3, + 0 + ], + [ + 8, + 0, + 9, + 4, + 1, + 3, + 6, + 0, + 0 + ], + [ + 9, + 1, + 0, + 3, + 0, + 0, + 0, + 4, + 0 + ], + [ + 7, + 8, + 3, + 2, + 4, + 5, + 1, + 6, + 9 + ], + [ + 6, + 4, + 2, + 1, + 7, + 9, + 8, + 5, + 3 + ] + ], + "solution": [ + [ + 2, + 6, + 8, + 9, + 3, + 1, + 4, + 7, + 5 + ], + [ + 5, + 9, + 7, + 8, + 2, + 4, + 3, + 1, + 6 + ], + [ + 4, + 3, + 1, + 6, + 5, + 7, + 2, + 9, + 8 + ], + [ + 3, + 7, + 4, + 5, + 6, + 2, + 9, + 8, + 1 + ], + [ + 1, + 2, + 6, + 7, + 9, + 8, + 5, + 3, + 4 + ], + [ + 8, + 5, + 9, + 4, + 1, + 3, + 6, + 2, + 7 + ], + [ + 9, + 1, + 5, + 3, + 8, + 6, + 7, + 4, + 2 + ], + [ + 7, + 8, + 3, + 2, + 4, + 5, + 1, + 6, + 9 + ], + [ + 6, + 4, + 2, + 1, + 7, + 9, + 8, + 5, + 3 + ] + ] + }, + { + "id": 43, + "board": [ + [ + 7, + 0, + 4, + 0, + 5, + 0, + 0, + 1, + 0 + ], + [ + 5, + 9, + 8, + 1, + 6, + 4, + 2, + 0, + 7 + ], + [ + 0, + 0, + 6, + 0, + 0, + 0, + 5, + 0, + 4 + ], + [ + 0, + 4, + 0, + 0, + 8, + 2, + 7, + 0, + 0 + ], + [ + 0, + 5, + 2, + 0, + 0, + 1, + 4, + 0, + 0 + ], + [ + 9, + 0, + 7, + 5, + 4, + 6, + 0, + 2, + 1 + ], + [ + 0, + 1, + 3, + 4, + 2, + 7, + 9, + 0, + 5 + ], + [ + 4, + 6, + 5, + 0, + 9, + 0, + 1, + 7, + 2 + ], + [ + 2, + 7, + 9, + 6, + 1, + 5, + 8, + 4, + 3 + ] + ], + "solution": [ + [ + 7, + 2, + 4, + 3, + 5, + 8, + 6, + 1, + 9 + ], + [ + 5, + 9, + 8, + 1, + 6, + 4, + 2, + 3, + 7 + ], + [ + 1, + 3, + 6, + 2, + 7, + 9, + 5, + 8, + 4 + ], + [ + 3, + 4, + 1, + 9, + 8, + 2, + 7, + 5, + 6 + ], + [ + 6, + 5, + 2, + 7, + 3, + 1, + 4, + 9, + 8 + ], + [ + 9, + 8, + 7, + 5, + 4, + 6, + 3, + 2, + 1 + ], + [ + 8, + 1, + 3, + 4, + 2, + 7, + 9, + 6, + 5 + ], + [ + 4, + 6, + 5, + 8, + 9, + 3, + 1, + 7, + 2 + ], + [ + 2, + 7, + 9, + 6, + 1, + 5, + 8, + 4, + 3 + ] + ] + }, + { + "id": 44, + "board": [ + [ + 5, + 7, + 6, + 0, + 8, + 2, + 0, + 3, + 0 + ], + [ + 1, + 8, + 3, + 0, + 5, + 9, + 0, + 0, + 0 + ], + [ + 2, + 4, + 0, + 0, + 3, + 7, + 8, + 5, + 0 + ], + [ + 8, + 1, + 4, + 7, + 2, + 5, + 6, + 9, + 3 + ], + [ + 0, + 2, + 5, + 3, + 4, + 6, + 1, + 7, + 0 + ], + [ + 6, + 3, + 0, + 8, + 9, + 1, + 5, + 0, + 0 + ], + [ + 4, + 5, + 2, + 0, + 0, + 8, + 3, + 0, + 7 + ], + [ + 3, + 6, + 1, + 0, + 7, + 4, + 2, + 8, + 0 + ], + [ + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 7, + 6, + 1, + 8, + 2, + 9, + 3, + 4 + ], + [ + 1, + 8, + 3, + 4, + 5, + 9, + 7, + 2, + 6 + ], + [ + 2, + 4, + 9, + 6, + 3, + 7, + 8, + 5, + 1 + ], + [ + 8, + 1, + 4, + 7, + 2, + 5, + 6, + 9, + 3 + ], + [ + 9, + 2, + 5, + 3, + 4, + 6, + 1, + 7, + 8 + ], + [ + 6, + 3, + 7, + 8, + 9, + 1, + 5, + 4, + 2 + ], + [ + 4, + 5, + 2, + 9, + 1, + 8, + 3, + 6, + 7 + ], + [ + 3, + 6, + 1, + 5, + 7, + 4, + 2, + 8, + 9 + ], + [ + 7, + 9, + 8, + 2, + 6, + 3, + 4, + 1, + 5 + ] + ] + }, + { + "id": 45, + "board": [ + [ + 8, + 9, + 2, + 4, + 6, + 7, + 5, + 0, + 0 + ], + [ + 5, + 1, + 3, + 0, + 0, + 0, + 7, + 4, + 6 + ], + [ + 7, + 4, + 6, + 0, + 0, + 1, + 9, + 8, + 2 + ], + [ + 9, + 0, + 1, + 0, + 0, + 6, + 4, + 0, + 0 + ], + [ + 6, + 0, + 7, + 0, + 0, + 4, + 8, + 0, + 0 + ], + [ + 4, + 0, + 5, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 1, + 0, + 9, + 0, + 0, + 8, + 3, + 6, + 4 + ], + [ + 3, + 7, + 4, + 6, + 1, + 5, + 2, + 9, + 8 + ], + [ + 2, + 6, + 8, + 9, + 4, + 0, + 0, + 5, + 7 + ] + ], + "solution": [ + [ + 8, + 9, + 2, + 4, + 6, + 7, + 5, + 1, + 3 + ], + [ + 5, + 1, + 3, + 2, + 8, + 9, + 7, + 4, + 6 + ], + [ + 7, + 4, + 6, + 3, + 5, + 1, + 9, + 8, + 2 + ], + [ + 9, + 2, + 1, + 8, + 3, + 6, + 4, + 7, + 5 + ], + [ + 6, + 3, + 7, + 5, + 9, + 4, + 8, + 2, + 1 + ], + [ + 4, + 8, + 5, + 1, + 7, + 2, + 6, + 3, + 9 + ], + [ + 1, + 5, + 9, + 7, + 2, + 8, + 3, + 6, + 4 + ], + [ + 3, + 7, + 4, + 6, + 1, + 5, + 2, + 9, + 8 + ], + [ + 2, + 6, + 8, + 9, + 4, + 3, + 1, + 5, + 7 + ] + ] + }, + { + "id": 46, + "board": [ + [ + 3, + 9, + 4, + 7, + 6, + 2, + 8, + 5, + 1 + ], + [ + 1, + 5, + 7, + 0, + 0, + 8, + 0, + 2, + 6 + ], + [ + 8, + 2, + 6, + 0, + 0, + 5, + 0, + 3, + 0 + ], + [ + 7, + 4, + 9, + 0, + 5, + 0, + 2, + 1, + 8 + ], + [ + 5, + 0, + 0, + 2, + 7, + 1, + 6, + 9, + 4 + ], + [ + 0, + 0, + 0, + 8, + 4, + 9, + 3, + 7, + 5 + ], + [ + 4, + 0, + 0, + 0, + 0, + 7, + 5, + 0, + 0 + ], + [ + 9, + 0, + 5, + 0, + 0, + 4, + 7, + 0, + 0 + ], + [ + 0, + 7, + 0, + 5, + 8, + 0, + 1, + 4, + 9 + ] + ], + "solution": [ + [ + 3, + 9, + 4, + 7, + 6, + 2, + 8, + 5, + 1 + ], + [ + 1, + 5, + 7, + 4, + 3, + 8, + 9, + 2, + 6 + ], + [ + 8, + 2, + 6, + 1, + 9, + 5, + 4, + 3, + 7 + ], + [ + 7, + 4, + 9, + 3, + 5, + 6, + 2, + 1, + 8 + ], + [ + 5, + 3, + 8, + 2, + 7, + 1, + 6, + 9, + 4 + ], + [ + 2, + 6, + 1, + 8, + 4, + 9, + 3, + 7, + 5 + ], + [ + 4, + 8, + 3, + 9, + 1, + 7, + 5, + 6, + 2 + ], + [ + 9, + 1, + 5, + 6, + 2, + 4, + 7, + 8, + 3 + ], + [ + 6, + 7, + 2, + 5, + 8, + 3, + 1, + 4, + 9 + ] + ] + }, + { + "id": 47, + "board": [ + [ + 7, + 1, + 2, + 3, + 6, + 0, + 9, + 5, + 4 + ], + [ + 9, + 8, + 4, + 2, + 5, + 1, + 3, + 7, + 0 + ], + [ + 5, + 6, + 3, + 9, + 4, + 7, + 1, + 8, + 2 + ], + [ + 8, + 0, + 0, + 0, + 3, + 0, + 6, + 2, + 0 + ], + [ + 4, + 0, + 0, + 0, + 0, + 6, + 0, + 1, + 3 + ], + [ + 3, + 0, + 0, + 7, + 1, + 0, + 8, + 0, + 9 + ], + [ + 2, + 0, + 5, + 6, + 8, + 0, + 0, + 0, + 0 + ], + [ + 1, + 4, + 9, + 0, + 7, + 3, + 0, + 6, + 8 + ], + [ + 6, + 0, + 8, + 1, + 0, + 0, + 0, + 0, + 5 + ] + ], + "solution": [ + [ + 7, + 1, + 2, + 3, + 6, + 8, + 9, + 5, + 4 + ], + [ + 9, + 8, + 4, + 2, + 5, + 1, + 3, + 7, + 6 + ], + [ + 5, + 6, + 3, + 9, + 4, + 7, + 1, + 8, + 2 + ], + [ + 8, + 5, + 1, + 4, + 3, + 9, + 6, + 2, + 7 + ], + [ + 4, + 9, + 7, + 8, + 2, + 6, + 5, + 1, + 3 + ], + [ + 3, + 2, + 6, + 7, + 1, + 5, + 8, + 4, + 9 + ], + [ + 2, + 3, + 5, + 6, + 8, + 4, + 7, + 9, + 1 + ], + [ + 1, + 4, + 9, + 5, + 7, + 3, + 2, + 6, + 8 + ], + [ + 6, + 7, + 8, + 1, + 9, + 2, + 4, + 3, + 5 + ] + ] + }, + { + "id": 48, + "board": [ + [ + 4, + 5, + 0, + 0, + 8, + 9, + 0, + 1, + 0 + ], + [ + 7, + 0, + 0, + 5, + 6, + 3, + 4, + 9, + 2 + ], + [ + 9, + 0, + 6, + 0, + 0, + 1, + 5, + 8, + 0 + ], + [ + 5, + 7, + 0, + 0, + 0, + 8, + 0, + 2, + 0 + ], + [ + 1, + 0, + 0, + 6, + 5, + 4, + 0, + 7, + 8 + ], + [ + 8, + 6, + 0, + 0, + 0, + 7, + 0, + 5, + 0 + ], + [ + 2, + 1, + 8, + 0, + 0, + 5, + 0, + 6, + 0 + ], + [ + 3, + 0, + 5, + 8, + 7, + 6, + 2, + 4, + 1 + ], + [ + 6, + 4, + 7, + 1, + 9, + 2, + 8, + 3, + 5 + ] + ], + "solution": [ + [ + 4, + 5, + 2, + 7, + 8, + 9, + 3, + 1, + 6 + ], + [ + 7, + 8, + 1, + 5, + 6, + 3, + 4, + 9, + 2 + ], + [ + 9, + 3, + 6, + 2, + 4, + 1, + 5, + 8, + 7 + ], + [ + 5, + 7, + 4, + 9, + 1, + 8, + 6, + 2, + 3 + ], + [ + 1, + 2, + 3, + 6, + 5, + 4, + 9, + 7, + 8 + ], + [ + 8, + 6, + 9, + 3, + 2, + 7, + 1, + 5, + 4 + ], + [ + 2, + 1, + 8, + 4, + 3, + 5, + 7, + 6, + 9 + ], + [ + 3, + 9, + 5, + 8, + 7, + 6, + 2, + 4, + 1 + ], + [ + 6, + 4, + 7, + 1, + 9, + 2, + 8, + 3, + 5 + ] + ] + }, + { + "id": 49, + "board": [ + [ + 0, + 0, + 4, + 3, + 0, + 8, + 6, + 0, + 7 + ], + [ + 7, + 8, + 0, + 6, + 9, + 1, + 3, + 4, + 2 + ], + [ + 0, + 9, + 3, + 7, + 0, + 4, + 1, + 0, + 0 + ], + [ + 3, + 7, + 8, + 2, + 1, + 5, + 4, + 6, + 9 + ], + [ + 9, + 2, + 0, + 4, + 8, + 7, + 5, + 1, + 3 + ], + [ + 4, + 0, + 0, + 9, + 0, + 0, + 7, + 2, + 8 + ], + [ + 1, + 0, + 0, + 8, + 0, + 2, + 0, + 0, + 0 + ], + [ + 5, + 0, + 2, + 1, + 0, + 9, + 8, + 0, + 4 + ], + [ + 8, + 4, + 9, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "solution": [ + [ + 2, + 1, + 4, + 3, + 5, + 8, + 6, + 9, + 7 + ], + [ + 7, + 8, + 5, + 6, + 9, + 1, + 3, + 4, + 2 + ], + [ + 6, + 9, + 3, + 7, + 2, + 4, + 1, + 8, + 5 + ], + [ + 3, + 7, + 8, + 2, + 1, + 5, + 4, + 6, + 9 + ], + [ + 9, + 2, + 6, + 4, + 8, + 7, + 5, + 1, + 3 + ], + [ + 4, + 5, + 1, + 9, + 3, + 6, + 7, + 2, + 8 + ], + [ + 1, + 3, + 7, + 8, + 4, + 2, + 9, + 5, + 6 + ], + [ + 5, + 6, + 2, + 1, + 7, + 9, + 8, + 3, + 4 + ], + [ + 8, + 4, + 9, + 5, + 6, + 3, + 2, + 7, + 1 + ] + ] + }, + { + "id": 50, + "board": [ + [ + 8, + 3, + 2, + 6, + 1, + 7, + 4, + 5, + 9 + ], + [ + 4, + 9, + 1, + 0, + 0, + 3, + 8, + 7, + 6 + ], + [ + 7, + 5, + 6, + 0, + 0, + 0, + 1, + 3, + 2 + ], + [ + 0, + 1, + 3, + 0, + 0, + 0, + 9, + 0, + 7 + ], + [ + 0, + 7, + 9, + 0, + 0, + 1, + 2, + 8, + 0 + ], + [ + 0, + 4, + 8, + 0, + 7, + 0, + 0, + 1, + 0 + ], + [ + 3, + 2, + 7, + 0, + 0, + 8, + 5, + 0, + 1 + ], + [ + 9, + 6, + 4, + 1, + 3, + 5, + 7, + 2, + 8 + ], + [ + 1, + 0, + 5, + 7, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 8, + 3, + 2, + 6, + 1, + 7, + 4, + 5, + 9 + ], + [ + 4, + 9, + 1, + 2, + 5, + 3, + 8, + 7, + 6 + ], + [ + 7, + 5, + 6, + 8, + 9, + 4, + 1, + 3, + 2 + ], + [ + 2, + 1, + 3, + 5, + 8, + 6, + 9, + 4, + 7 + ], + [ + 6, + 7, + 9, + 3, + 4, + 1, + 2, + 8, + 5 + ], + [ + 5, + 4, + 8, + 9, + 7, + 2, + 6, + 1, + 3 + ], + [ + 3, + 2, + 7, + 4, + 6, + 8, + 5, + 9, + 1 + ], + [ + 9, + 6, + 4, + 1, + 3, + 5, + 7, + 2, + 8 + ], + [ + 1, + 8, + 5, + 7, + 2, + 9, + 3, + 6, + 4 + ] + ] + }, + { + "id": 51, + "board": [ + [ + 3, + 7, + 0, + 4, + 6, + 2, + 1, + 5, + 9 + ], + [ + 5, + 9, + 6, + 7, + 8, + 0, + 3, + 2, + 0 + ], + [ + 2, + 4, + 1, + 3, + 0, + 9, + 0, + 6, + 7 + ], + [ + 4, + 0, + 0, + 8, + 0, + 0, + 0, + 3, + 6 + ], + [ + 0, + 3, + 0, + 0, + 4, + 0, + 0, + 1, + 2 + ], + [ + 0, + 6, + 0, + 2, + 0, + 0, + 0, + 4, + 8 + ], + [ + 6, + 0, + 4, + 0, + 0, + 0, + 2, + 7, + 1 + ], + [ + 7, + 0, + 3, + 6, + 2, + 8, + 4, + 9, + 5 + ], + [ + 9, + 0, + 0, + 1, + 7, + 0, + 6, + 8, + 3 + ] + ], + "solution": [ + [ + 3, + 7, + 8, + 4, + 6, + 2, + 1, + 5, + 9 + ], + [ + 5, + 9, + 6, + 7, + 8, + 1, + 3, + 2, + 4 + ], + [ + 2, + 4, + 1, + 3, + 5, + 9, + 8, + 6, + 7 + ], + [ + 4, + 2, + 7, + 8, + 1, + 5, + 9, + 3, + 6 + ], + [ + 8, + 3, + 5, + 9, + 4, + 6, + 7, + 1, + 2 + ], + [ + 1, + 6, + 9, + 2, + 3, + 7, + 5, + 4, + 8 + ], + [ + 6, + 8, + 4, + 5, + 9, + 3, + 2, + 7, + 1 + ], + [ + 7, + 1, + 3, + 6, + 2, + 8, + 4, + 9, + 5 + ], + [ + 9, + 5, + 2, + 1, + 7, + 4, + 6, + 8, + 3 + ] + ] + }, + { + "id": 52, + "board": [ + [ + 4, + 0, + 0, + 0, + 0, + 6, + 7, + 0, + 0 + ], + [ + 2, + 0, + 7, + 4, + 0, + 5, + 0, + 6, + 8 + ], + [ + 1, + 0, + 6, + 9, + 0, + 7, + 4, + 2, + 5 + ], + [ + 6, + 0, + 4, + 8, + 2, + 3, + 5, + 9, + 7 + ], + [ + 0, + 7, + 0, + 0, + 4, + 9, + 0, + 8, + 1 + ], + [ + 9, + 8, + 2, + 7, + 5, + 1, + 6, + 4, + 3 + ], + [ + 0, + 4, + 3, + 0, + 9, + 2, + 8, + 7, + 6 + ], + [ + 0, + 6, + 0, + 0, + 0, + 4, + 0, + 5, + 2 + ], + [ + 0, + 0, + 0, + 5, + 6, + 8, + 0, + 0, + 4 + ] + ], + "solution": [ + [ + 4, + 5, + 8, + 2, + 1, + 6, + 7, + 3, + 9 + ], + [ + 2, + 9, + 7, + 4, + 3, + 5, + 1, + 6, + 8 + ], + [ + 1, + 3, + 6, + 9, + 8, + 7, + 4, + 2, + 5 + ], + [ + 6, + 1, + 4, + 8, + 2, + 3, + 5, + 9, + 7 + ], + [ + 3, + 7, + 5, + 6, + 4, + 9, + 2, + 8, + 1 + ], + [ + 9, + 8, + 2, + 7, + 5, + 1, + 6, + 4, + 3 + ], + [ + 5, + 4, + 3, + 1, + 9, + 2, + 8, + 7, + 6 + ], + [ + 8, + 6, + 1, + 3, + 7, + 4, + 9, + 5, + 2 + ], + [ + 7, + 2, + 9, + 5, + 6, + 8, + 3, + 1, + 4 + ] + ] + }, + { + "id": 53, + "board": [ + [ + 0, + 6, + 2, + 9, + 1, + 3, + 0, + 0, + 0 + ], + [ + 0, + 5, + 1, + 7, + 6, + 2, + 0, + 3, + 0 + ], + [ + 9, + 7, + 3, + 8, + 4, + 5, + 2, + 6, + 1 + ], + [ + 0, + 0, + 8, + 0, + 3, + 0, + 0, + 0, + 2 + ], + [ + 1, + 3, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 8, + 4, + 0, + 0, + 0 + ], + [ + 3, + 8, + 7, + 4, + 9, + 1, + 5, + 2, + 6 + ], + [ + 2, + 1, + 6, + 3, + 5, + 8, + 7, + 9, + 4 + ], + [ + 5, + 9, + 4, + 2, + 7, + 6, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 6, + 2, + 9, + 1, + 3, + 8, + 5, + 7 + ], + [ + 8, + 5, + 1, + 7, + 6, + 2, + 4, + 3, + 9 + ], + [ + 9, + 7, + 3, + 8, + 4, + 5, + 2, + 6, + 1 + ], + [ + 7, + 4, + 8, + 5, + 3, + 9, + 6, + 1, + 2 + ], + [ + 1, + 3, + 5, + 6, + 2, + 7, + 9, + 4, + 8 + ], + [ + 6, + 2, + 9, + 1, + 8, + 4, + 3, + 7, + 5 + ], + [ + 3, + 8, + 7, + 4, + 9, + 1, + 5, + 2, + 6 + ], + [ + 2, + 1, + 6, + 3, + 5, + 8, + 7, + 9, + 4 + ], + [ + 5, + 9, + 4, + 2, + 7, + 6, + 1, + 8, + 3 + ] + ] + }, + { + "id": 54, + "board": [ + [ + 0, + 6, + 3, + 7, + 8, + 2, + 5, + 1, + 4 + ], + [ + 1, + 4, + 8, + 0, + 0, + 0, + 9, + 2, + 7 + ], + [ + 7, + 5, + 2, + 0, + 4, + 0, + 8, + 3, + 6 + ], + [ + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 8 + ], + [ + 5, + 9, + 0, + 8, + 2, + 0, + 0, + 0, + 3 + ], + [ + 0, + 8, + 7, + 4, + 0, + 0, + 2, + 9, + 5 + ], + [ + 8, + 2, + 5, + 0, + 0, + 0, + 0, + 6, + 9 + ], + [ + 4, + 7, + 9, + 2, + 6, + 8, + 3, + 5, + 1 + ], + [ + 3, + 1, + 6, + 0, + 0, + 0, + 0, + 8, + 2 + ] + ], + "solution": [ + [ + 9, + 6, + 3, + 7, + 8, + 2, + 5, + 1, + 4 + ], + [ + 1, + 4, + 8, + 5, + 3, + 6, + 9, + 2, + 7 + ], + [ + 7, + 5, + 2, + 1, + 4, + 9, + 8, + 3, + 6 + ], + [ + 2, + 3, + 4, + 6, + 9, + 5, + 1, + 7, + 8 + ], + [ + 5, + 9, + 1, + 8, + 2, + 7, + 6, + 4, + 3 + ], + [ + 6, + 8, + 7, + 4, + 1, + 3, + 2, + 9, + 5 + ], + [ + 8, + 2, + 5, + 3, + 7, + 1, + 4, + 6, + 9 + ], + [ + 4, + 7, + 9, + 2, + 6, + 8, + 3, + 5, + 1 + ], + [ + 3, + 1, + 6, + 9, + 5, + 4, + 7, + 8, + 2 + ] + ] + }, + { + "id": 55, + "board": [ + [ + 1, + 5, + 7, + 3, + 2, + 8, + 6, + 4, + 9 + ], + [ + 6, + 8, + 3, + 0, + 5, + 0, + 7, + 2, + 1 + ], + [ + 0, + 0, + 0, + 7, + 1, + 6, + 0, + 5, + 0 + ], + [ + 0, + 3, + 0, + 8, + 0, + 0, + 0, + 6, + 5 + ], + [ + 0, + 0, + 5, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 0, + 0, + 8, + 5, + 0, + 3, + 0, + 9, + 4 + ], + [ + 3, + 7, + 1, + 0, + 4, + 0, + 5, + 8, + 6 + ], + [ + 8, + 0, + 0, + 6, + 3, + 5, + 9, + 1, + 7 + ], + [ + 5, + 9, + 0, + 1, + 8, + 7, + 4, + 3, + 2 + ] + ], + "solution": [ + [ + 1, + 5, + 7, + 3, + 2, + 8, + 6, + 4, + 9 + ], + [ + 6, + 8, + 3, + 4, + 5, + 9, + 7, + 2, + 1 + ], + [ + 4, + 2, + 9, + 7, + 1, + 6, + 3, + 5, + 8 + ], + [ + 7, + 3, + 4, + 8, + 9, + 1, + 2, + 6, + 5 + ], + [ + 9, + 1, + 5, + 2, + 6, + 4, + 8, + 7, + 3 + ], + [ + 2, + 6, + 8, + 5, + 7, + 3, + 1, + 9, + 4 + ], + [ + 3, + 7, + 1, + 9, + 4, + 2, + 5, + 8, + 6 + ], + [ + 8, + 4, + 2, + 6, + 3, + 5, + 9, + 1, + 7 + ], + [ + 5, + 9, + 6, + 1, + 8, + 7, + 4, + 3, + 2 + ] + ] + }, + { + "id": 56, + "board": [ + [ + 3, + 2, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 4, + 0, + 5, + 2, + 9, + 7, + 3, + 0, + 8 + ], + [ + 1, + 9, + 0, + 3, + 5, + 8, + 0, + 6, + 4 + ], + [ + 6, + 7, + 1, + 9, + 8, + 0, + 4, + 5, + 2 + ], + [ + 8, + 4, + 9, + 5, + 0, + 2, + 6, + 3, + 0 + ], + [ + 0, + 3, + 0, + 6, + 4, + 0, + 0, + 0, + 9 + ], + [ + 0, + 1, + 0, + 0, + 3, + 5, + 0, + 0, + 7 + ], + [ + 7, + 5, + 3, + 8, + 2, + 9, + 1, + 4, + 6 + ], + [ + 0, + 0, + 4, + 7, + 1, + 0, + 5, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 2, + 8, + 1, + 6, + 4, + 7, + 9, + 5 + ], + [ + 4, + 6, + 5, + 2, + 9, + 7, + 3, + 1, + 8 + ], + [ + 1, + 9, + 7, + 3, + 5, + 8, + 2, + 6, + 4 + ], + [ + 6, + 7, + 1, + 9, + 8, + 3, + 4, + 5, + 2 + ], + [ + 8, + 4, + 9, + 5, + 7, + 2, + 6, + 3, + 1 + ], + [ + 5, + 3, + 2, + 6, + 4, + 1, + 8, + 7, + 9 + ], + [ + 2, + 1, + 6, + 4, + 3, + 5, + 9, + 8, + 7 + ], + [ + 7, + 5, + 3, + 8, + 2, + 9, + 1, + 4, + 6 + ], + [ + 9, + 8, + 4, + 7, + 1, + 6, + 5, + 2, + 3 + ] + ] + }, + { + "id": 57, + "board": [ + [ + 0, + 0, + 0, + 0, + 3, + 1, + 7, + 2, + 8 + ], + [ + 3, + 0, + 7, + 0, + 5, + 9, + 6, + 0, + 4 + ], + [ + 4, + 2, + 1, + 0, + 7, + 6, + 5, + 0, + 9 + ], + [ + 8, + 0, + 0, + 0, + 2, + 0, + 3, + 0, + 1 + ], + [ + 0, + 7, + 2, + 5, + 0, + 3, + 9, + 0, + 6 + ], + [ + 0, + 3, + 0, + 0, + 1, + 0, + 8, + 0, + 2 + ], + [ + 0, + 0, + 9, + 7, + 4, + 2, + 1, + 8, + 3 + ], + [ + 0, + 4, + 3, + 0, + 0, + 8, + 0, + 6, + 5 + ], + [ + 2, + 1, + 8, + 3, + 6, + 5, + 4, + 9, + 7 + ] + ], + "solution": [ + [ + 6, + 9, + 5, + 4, + 3, + 1, + 7, + 2, + 8 + ], + [ + 3, + 8, + 7, + 2, + 5, + 9, + 6, + 1, + 4 + ], + [ + 4, + 2, + 1, + 8, + 7, + 6, + 5, + 3, + 9 + ], + [ + 8, + 5, + 6, + 9, + 2, + 4, + 3, + 7, + 1 + ], + [ + 1, + 7, + 2, + 5, + 8, + 3, + 9, + 4, + 6 + ], + [ + 9, + 3, + 4, + 6, + 1, + 7, + 8, + 5, + 2 + ], + [ + 5, + 6, + 9, + 7, + 4, + 2, + 1, + 8, + 3 + ], + [ + 7, + 4, + 3, + 1, + 9, + 8, + 2, + 6, + 5 + ], + [ + 2, + 1, + 8, + 3, + 6, + 5, + 4, + 9, + 7 + ] + ] + }, + { + "id": 58, + "board": [ + [ + 6, + 3, + 8, + 2, + 7, + 5, + 4, + 1, + 9 + ], + [ + 0, + 7, + 2, + 0, + 0, + 0, + 5, + 8, + 3 + ], + [ + 0, + 5, + 0, + 0, + 0, + 0, + 7, + 2, + 6 + ], + [ + 7, + 6, + 3, + 9, + 2, + 1, + 8, + 4, + 5 + ], + [ + 8, + 0, + 0, + 5, + 0, + 0, + 0, + 7, + 2 + ], + [ + 0, + 2, + 5, + 0, + 8, + 0, + 0, + 3, + 1 + ], + [ + 5, + 8, + 7, + 3, + 6, + 2, + 1, + 9, + 4 + ], + [ + 3, + 0, + 0, + 0, + 5, + 0, + 2, + 6, + 0 + ], + [ + 2, + 0, + 6, + 0, + 0, + 0, + 3, + 5, + 0 + ] + ], + "solution": [ + [ + 6, + 3, + 8, + 2, + 7, + 5, + 4, + 1, + 9 + ], + [ + 1, + 7, + 2, + 4, + 9, + 6, + 5, + 8, + 3 + ], + [ + 9, + 5, + 4, + 8, + 1, + 3, + 7, + 2, + 6 + ], + [ + 7, + 6, + 3, + 9, + 2, + 1, + 8, + 4, + 5 + ], + [ + 8, + 1, + 9, + 5, + 3, + 4, + 6, + 7, + 2 + ], + [ + 4, + 2, + 5, + 6, + 8, + 7, + 9, + 3, + 1 + ], + [ + 5, + 8, + 7, + 3, + 6, + 2, + 1, + 9, + 4 + ], + [ + 3, + 4, + 1, + 7, + 5, + 9, + 2, + 6, + 8 + ], + [ + 2, + 9, + 6, + 1, + 4, + 8, + 3, + 5, + 7 + ] + ] + }, + { + "id": 59, + "board": [ + [ + 9, + 3, + 0, + 0, + 5, + 6, + 7, + 1, + 4 + ], + [ + 6, + 8, + 7, + 4, + 9, + 1, + 3, + 5, + 2 + ], + [ + 1, + 5, + 4, + 3, + 7, + 2, + 9, + 8, + 6 + ], + [ + 0, + 2, + 0, + 0, + 1, + 7, + 4, + 6, + 3 + ], + [ + 0, + 9, + 3, + 5, + 6, + 4, + 8, + 2, + 1 + ], + [ + 4, + 6, + 1, + 2, + 8, + 3, + 5, + 0, + 0 + ], + [ + 0, + 7, + 9, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 4, + 8, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 2, + 0, + 0 + ] + ], + "solution": [ + [ + 9, + 3, + 2, + 8, + 5, + 6, + 7, + 1, + 4 + ], + [ + 6, + 8, + 7, + 4, + 9, + 1, + 3, + 5, + 2 + ], + [ + 1, + 5, + 4, + 3, + 7, + 2, + 9, + 8, + 6 + ], + [ + 8, + 2, + 5, + 9, + 1, + 7, + 4, + 6, + 3 + ], + [ + 7, + 9, + 3, + 5, + 6, + 4, + 8, + 2, + 1 + ], + [ + 4, + 6, + 1, + 2, + 8, + 3, + 5, + 7, + 9 + ], + [ + 2, + 7, + 9, + 6, + 3, + 5, + 1, + 4, + 8 + ], + [ + 5, + 4, + 8, + 1, + 2, + 9, + 6, + 3, + 7 + ], + [ + 3, + 1, + 6, + 7, + 4, + 8, + 2, + 9, + 5 + ] + ] + }, + { + "id": 60, + "board": [ + [ + 1, + 6, + 0, + 4, + 3, + 9, + 2, + 7, + 8 + ], + [ + 9, + 8, + 2, + 1, + 0, + 7, + 0, + 0, + 4 + ], + [ + 4, + 3, + 7, + 2, + 8, + 6, + 1, + 5, + 9 + ], + [ + 5, + 0, + 6, + 3, + 0, + 0, + 8, + 0, + 7 + ], + [ + 2, + 1, + 8, + 7, + 0, + 5, + 0, + 0, + 6 + ], + [ + 3, + 7, + 9, + 6, + 4, + 8, + 5, + 2, + 1 + ], + [ + 0, + 0, + 0, + 8, + 7, + 4, + 9, + 1, + 5 + ], + [ + 8, + 0, + 0, + 0, + 0, + 0, + 7, + 0, + 0 + ], + [ + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 0 + ] + ], + "solution": [ + [ + 1, + 6, + 5, + 4, + 3, + 9, + 2, + 7, + 8 + ], + [ + 9, + 8, + 2, + 1, + 5, + 7, + 3, + 6, + 4 + ], + [ + 4, + 3, + 7, + 2, + 8, + 6, + 1, + 5, + 9 + ], + [ + 5, + 4, + 6, + 3, + 1, + 2, + 8, + 9, + 7 + ], + [ + 2, + 1, + 8, + 7, + 9, + 5, + 4, + 3, + 6 + ], + [ + 3, + 7, + 9, + 6, + 4, + 8, + 5, + 2, + 1 + ], + [ + 6, + 2, + 3, + 8, + 7, + 4, + 9, + 1, + 5 + ], + [ + 8, + 5, + 1, + 9, + 6, + 3, + 7, + 4, + 2 + ], + [ + 7, + 9, + 4, + 5, + 2, + 1, + 6, + 8, + 3 + ] + ] + }, + { + "id": 61, + "board": [ + [ + 2, + 7, + 9, + 0, + 4, + 3, + 8, + 1, + 5 + ], + [ + 0, + 8, + 1, + 7, + 5, + 9, + 3, + 4, + 2 + ], + [ + 5, + 0, + 3, + 8, + 0, + 0, + 9, + 6, + 7 + ], + [ + 8, + 0, + 0, + 9, + 0, + 0, + 0, + 3, + 4 + ], + [ + 3, + 1, + 6, + 2, + 7, + 4, + 5, + 9, + 8 + ], + [ + 4, + 9, + 0, + 3, + 0, + 0, + 0, + 0, + 6 + ], + [ + 9, + 0, + 0, + 4, + 0, + 0, + 6, + 0, + 1 + ], + [ + 7, + 0, + 8, + 1, + 0, + 0, + 4, + 0, + 9 + ], + [ + 1, + 0, + 4, + 5, + 9, + 0, + 0, + 0, + 3 + ] + ], + "solution": [ + [ + 2, + 7, + 9, + 6, + 4, + 3, + 8, + 1, + 5 + ], + [ + 6, + 8, + 1, + 7, + 5, + 9, + 3, + 4, + 2 + ], + [ + 5, + 4, + 3, + 8, + 1, + 2, + 9, + 6, + 7 + ], + [ + 8, + 2, + 5, + 9, + 6, + 1, + 7, + 3, + 4 + ], + [ + 3, + 1, + 6, + 2, + 7, + 4, + 5, + 9, + 8 + ], + [ + 4, + 9, + 7, + 3, + 8, + 5, + 1, + 2, + 6 + ], + [ + 9, + 5, + 2, + 4, + 3, + 7, + 6, + 8, + 1 + ], + [ + 7, + 3, + 8, + 1, + 2, + 6, + 4, + 5, + 9 + ], + [ + 1, + 6, + 4, + 5, + 9, + 8, + 2, + 7, + 3 + ] + ] + }, + { + "id": 62, + "board": [ + [ + 6, + 5, + 4, + 9, + 1, + 2, + 8, + 0, + 0 + ], + [ + 7, + 9, + 1, + 8, + 5, + 3, + 4, + 6, + 2 + ], + [ + 3, + 8, + 2, + 0, + 0, + 0, + 1, + 5, + 9 + ], + [ + 9, + 1, + 5, + 0, + 2, + 0, + 6, + 4, + 0 + ], + [ + 2, + 4, + 7, + 0, + 0, + 0, + 9, + 0, + 0 + ], + [ + 8, + 3, + 6, + 0, + 9, + 4, + 7, + 2, + 0 + ], + [ + 4, + 0, + 0, + 2, + 0, + 9, + 0, + 1, + 0 + ], + [ + 5, + 2, + 9, + 0, + 6, + 1, + 3, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 5, + 2, + 9, + 0 + ] + ], + "solution": [ + [ + 6, + 5, + 4, + 9, + 1, + 2, + 8, + 3, + 7 + ], + [ + 7, + 9, + 1, + 8, + 5, + 3, + 4, + 6, + 2 + ], + [ + 3, + 8, + 2, + 6, + 4, + 7, + 1, + 5, + 9 + ], + [ + 9, + 1, + 5, + 7, + 2, + 8, + 6, + 4, + 3 + ], + [ + 2, + 4, + 7, + 1, + 3, + 6, + 9, + 8, + 5 + ], + [ + 8, + 3, + 6, + 5, + 9, + 4, + 7, + 2, + 1 + ], + [ + 4, + 7, + 3, + 2, + 8, + 9, + 5, + 1, + 6 + ], + [ + 5, + 2, + 9, + 4, + 6, + 1, + 3, + 7, + 8 + ], + [ + 1, + 6, + 8, + 3, + 7, + 5, + 2, + 9, + 4 + ] + ] + }, + { + "id": 63, + "board": [ + [ + 4, + 0, + 6, + 5, + 0, + 0, + 0, + 8, + 0 + ], + [ + 0, + 7, + 1, + 6, + 3, + 0, + 9, + 5, + 4 + ], + [ + 0, + 0, + 5, + 0, + 7, + 4, + 0, + 1, + 6 + ], + [ + 7, + 6, + 3, + 2, + 0, + 0, + 4, + 9, + 8 + ], + [ + 0, + 2, + 8, + 3, + 4, + 7, + 1, + 6, + 5 + ], + [ + 5, + 1, + 4, + 0, + 0, + 0, + 0, + 3, + 0 + ], + [ + 6, + 4, + 0, + 1, + 8, + 3, + 5, + 0, + 9 + ], + [ + 3, + 0, + 0, + 4, + 0, + 0, + 6, + 0, + 1 + ], + [ + 1, + 5, + 9, + 7, + 0, + 0, + 8, + 4, + 3 + ] + ], + "solution": [ + [ + 4, + 3, + 6, + 5, + 1, + 9, + 2, + 8, + 7 + ], + [ + 8, + 7, + 1, + 6, + 3, + 2, + 9, + 5, + 4 + ], + [ + 2, + 9, + 5, + 8, + 7, + 4, + 3, + 1, + 6 + ], + [ + 7, + 6, + 3, + 2, + 5, + 1, + 4, + 9, + 8 + ], + [ + 9, + 2, + 8, + 3, + 4, + 7, + 1, + 6, + 5 + ], + [ + 5, + 1, + 4, + 9, + 6, + 8, + 7, + 3, + 2 + ], + [ + 6, + 4, + 2, + 1, + 8, + 3, + 5, + 7, + 9 + ], + [ + 3, + 8, + 7, + 4, + 9, + 5, + 6, + 2, + 1 + ], + [ + 1, + 5, + 9, + 7, + 2, + 6, + 8, + 4, + 3 + ] + ] + }, + { + "id": 64, + "board": [ + [ + 3, + 6, + 0, + 4, + 1, + 0, + 0, + 0, + 0 + ], + [ + 5, + 0, + 0, + 3, + 9, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 5, + 2, + 6, + 3, + 0, + 8 + ], + [ + 0, + 9, + 3, + 7, + 5, + 2, + 0, + 0, + 0 + ], + [ + 0, + 5, + 1, + 9, + 4, + 3, + 0, + 0, + 0 + ], + [ + 2, + 7, + 4, + 8, + 6, + 1, + 9, + 5, + 3 + ], + [ + 4, + 0, + 0, + 0, + 3, + 9, + 5, + 6, + 7 + ], + [ + 7, + 1, + 6, + 2, + 8, + 5, + 4, + 3, + 9 + ], + [ + 9, + 3, + 5, + 6, + 7, + 4, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 6, + 8, + 4, + 1, + 7, + 2, + 9, + 5 + ], + [ + 5, + 2, + 7, + 3, + 9, + 8, + 1, + 4, + 6 + ], + [ + 1, + 4, + 9, + 5, + 2, + 6, + 3, + 7, + 8 + ], + [ + 8, + 9, + 3, + 7, + 5, + 2, + 6, + 1, + 4 + ], + [ + 6, + 5, + 1, + 9, + 4, + 3, + 7, + 8, + 2 + ], + [ + 2, + 7, + 4, + 8, + 6, + 1, + 9, + 5, + 3 + ], + [ + 4, + 8, + 2, + 1, + 3, + 9, + 5, + 6, + 7 + ], + [ + 7, + 1, + 6, + 2, + 8, + 5, + 4, + 3, + 9 + ], + [ + 9, + 3, + 5, + 6, + 7, + 4, + 8, + 2, + 1 + ] + ] + }, + { + "id": 65, + "board": [ + [ + 2, + 4, + 0, + 0, + 7, + 0, + 0, + 0, + 0 + ], + [ + 3, + 9, + 6, + 0, + 4, + 2, + 0, + 0, + 0 + ], + [ + 1, + 7, + 0, + 0, + 9, + 0, + 0, + 0, + 2 + ], + [ + 4, + 3, + 7, + 2, + 1, + 0, + 0, + 0, + 6 + ], + [ + 6, + 8, + 2, + 4, + 3, + 0, + 0, + 0, + 0 + ], + [ + 5, + 1, + 9, + 8, + 6, + 7, + 2, + 3, + 4 + ], + [ + 7, + 6, + 3, + 9, + 8, + 4, + 5, + 2, + 1 + ], + [ + 9, + 5, + 1, + 3, + 2, + 6, + 0, + 0, + 0 + ], + [ + 8, + 2, + 4, + 7, + 5, + 1, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 2, + 4, + 5, + 1, + 7, + 8, + 3, + 6, + 9 + ], + [ + 3, + 9, + 6, + 5, + 4, + 2, + 7, + 1, + 8 + ], + [ + 1, + 7, + 8, + 6, + 9, + 3, + 4, + 5, + 2 + ], + [ + 4, + 3, + 7, + 2, + 1, + 5, + 9, + 8, + 6 + ], + [ + 6, + 8, + 2, + 4, + 3, + 9, + 1, + 7, + 5 + ], + [ + 5, + 1, + 9, + 8, + 6, + 7, + 2, + 3, + 4 + ], + [ + 7, + 6, + 3, + 9, + 8, + 4, + 5, + 2, + 1 + ], + [ + 9, + 5, + 1, + 3, + 2, + 6, + 8, + 4, + 7 + ], + [ + 8, + 2, + 4, + 7, + 5, + 1, + 6, + 9, + 3 + ] + ] + }, + { + "id": 66, + "board": [ + [ + 1, + 9, + 4, + 6, + 3, + 0, + 2, + 5, + 0 + ], + [ + 2, + 3, + 7, + 9, + 4, + 5, + 8, + 1, + 6 + ], + [ + 5, + 6, + 8, + 2, + 0, + 1, + 0, + 9, + 4 + ], + [ + 3, + 1, + 5, + 8, + 9, + 4, + 6, + 7, + 2 + ], + [ + 6, + 7, + 9, + 1, + 2, + 3, + 4, + 8, + 5 + ], + [ + 4, + 8, + 2, + 5, + 6, + 7, + 1, + 3, + 9 + ], + [ + 8, + 0, + 0, + 7, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 9, + 4, + 6, + 3, + 8, + 2, + 5, + 7 + ], + [ + 2, + 3, + 7, + 9, + 4, + 5, + 8, + 1, + 6 + ], + [ + 5, + 6, + 8, + 2, + 7, + 1, + 3, + 9, + 4 + ], + [ + 3, + 1, + 5, + 8, + 9, + 4, + 6, + 7, + 2 + ], + [ + 6, + 7, + 9, + 1, + 2, + 3, + 4, + 8, + 5 + ], + [ + 4, + 8, + 2, + 5, + 6, + 7, + 1, + 3, + 9 + ], + [ + 8, + 5, + 6, + 7, + 1, + 2, + 9, + 4, + 3 + ], + [ + 7, + 2, + 3, + 4, + 8, + 9, + 5, + 6, + 1 + ], + [ + 9, + 4, + 1, + 3, + 5, + 6, + 7, + 2, + 8 + ] + ] + }, + { + "id": 67, + "board": [ + [ + 9, + 5, + 7, + 4, + 8, + 0, + 3, + 0, + 0 + ], + [ + 2, + 8, + 0, + 0, + 9, + 6, + 0, + 0, + 4 + ], + [ + 6, + 0, + 1, + 5, + 2, + 3, + 9, + 7, + 8 + ], + [ + 1, + 7, + 0, + 9, + 0, + 4, + 8, + 0, + 3 + ], + [ + 0, + 6, + 4, + 8, + 0, + 0, + 2, + 9, + 0 + ], + [ + 8, + 9, + 0, + 0, + 6, + 0, + 0, + 4, + 1 + ], + [ + 5, + 0, + 9, + 0, + 0, + 0, + 0, + 3, + 0 + ], + [ + 7, + 1, + 6, + 2, + 3, + 5, + 4, + 8, + 9 + ], + [ + 0, + 0, + 0, + 6, + 7, + 9, + 5, + 1, + 2 + ] + ], + "solution": [ + [ + 9, + 5, + 7, + 4, + 8, + 1, + 3, + 2, + 6 + ], + [ + 2, + 8, + 3, + 7, + 9, + 6, + 1, + 5, + 4 + ], + [ + 6, + 4, + 1, + 5, + 2, + 3, + 9, + 7, + 8 + ], + [ + 1, + 7, + 2, + 9, + 5, + 4, + 8, + 6, + 3 + ], + [ + 3, + 6, + 4, + 8, + 1, + 7, + 2, + 9, + 5 + ], + [ + 8, + 9, + 5, + 3, + 6, + 2, + 7, + 4, + 1 + ], + [ + 5, + 2, + 9, + 1, + 4, + 8, + 6, + 3, + 7 + ], + [ + 7, + 1, + 6, + 2, + 3, + 5, + 4, + 8, + 9 + ], + [ + 4, + 3, + 8, + 6, + 7, + 9, + 5, + 1, + 2 + ] + ] + }, + { + "id": 68, + "board": [ + [ + 4, + 2, + 0, + 9, + 8, + 5, + 0, + 0, + 7 + ], + [ + 5, + 8, + 0, + 4, + 6, + 7, + 0, + 0, + 0 + ], + [ + 7, + 9, + 6, + 2, + 1, + 3, + 4, + 8, + 5 + ], + [ + 2, + 0, + 0, + 3, + 5, + 9, + 0, + 0, + 0 + ], + [ + 3, + 7, + 5, + 1, + 4, + 6, + 0, + 2, + 0 + ], + [ + 1, + 0, + 9, + 8, + 7, + 2, + 5, + 0, + 0 + ], + [ + 0, + 5, + 4, + 7, + 3, + 0, + 0, + 0, + 0 + ], + [ + 9, + 3, + 7, + 6, + 2, + 0, + 0, + 5, + 4 + ], + [ + 0, + 1, + 2, + 5, + 9, + 4, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 2, + 1, + 9, + 8, + 5, + 3, + 6, + 7 + ], + [ + 5, + 8, + 3, + 4, + 6, + 7, + 2, + 1, + 9 + ], + [ + 7, + 9, + 6, + 2, + 1, + 3, + 4, + 8, + 5 + ], + [ + 2, + 4, + 8, + 3, + 5, + 9, + 6, + 7, + 1 + ], + [ + 3, + 7, + 5, + 1, + 4, + 6, + 9, + 2, + 8 + ], + [ + 1, + 6, + 9, + 8, + 7, + 2, + 5, + 4, + 3 + ], + [ + 6, + 5, + 4, + 7, + 3, + 1, + 8, + 9, + 2 + ], + [ + 9, + 3, + 7, + 6, + 2, + 8, + 1, + 5, + 4 + ], + [ + 8, + 1, + 2, + 5, + 9, + 4, + 7, + 3, + 6 + ] + ] + }, + { + "id": 69, + "board": [ + [ + 5, + 3, + 8, + 9, + 0, + 2, + 0, + 7, + 1 + ], + [ + 2, + 4, + 1, + 7, + 5, + 8, + 0, + 0, + 6 + ], + [ + 0, + 6, + 7, + 3, + 4, + 1, + 0, + 8, + 2 + ], + [ + 1, + 9, + 5, + 2, + 3, + 4, + 0, + 6, + 8 + ], + [ + 7, + 0, + 0, + 8, + 0, + 0, + 0, + 0, + 4 + ], + [ + 3, + 8, + 4, + 6, + 0, + 7, + 2, + 0, + 5 + ], + [ + 6, + 0, + 2, + 0, + 8, + 9, + 1, + 0, + 3 + ], + [ + 0, + 5, + 0, + 1, + 0, + 0, + 0, + 2, + 9 + ], + [ + 8, + 0, + 0, + 0, + 2, + 3, + 0, + 0, + 7 + ] + ], + "solution": [ + [ + 5, + 3, + 8, + 9, + 6, + 2, + 4, + 7, + 1 + ], + [ + 2, + 4, + 1, + 7, + 5, + 8, + 3, + 9, + 6 + ], + [ + 9, + 6, + 7, + 3, + 4, + 1, + 5, + 8, + 2 + ], + [ + 1, + 9, + 5, + 2, + 3, + 4, + 7, + 6, + 8 + ], + [ + 7, + 2, + 6, + 8, + 1, + 5, + 9, + 3, + 4 + ], + [ + 3, + 8, + 4, + 6, + 9, + 7, + 2, + 1, + 5 + ], + [ + 6, + 7, + 2, + 4, + 8, + 9, + 1, + 5, + 3 + ], + [ + 4, + 5, + 3, + 1, + 7, + 6, + 8, + 2, + 9 + ], + [ + 8, + 1, + 9, + 5, + 2, + 3, + 6, + 4, + 7 + ] + ] + }, + { + "id": 70, + "board": [ + [ + 8, + 0, + 4, + 5, + 6, + 3, + 0, + 1, + 9 + ], + [ + 1, + 0, + 5, + 0, + 0, + 0, + 0, + 6, + 3 + ], + [ + 3, + 0, + 0, + 0, + 1, + 2, + 0, + 5, + 8 + ], + [ + 6, + 0, + 0, + 0, + 0, + 0, + 5, + 2, + 1 + ], + [ + 5, + 0, + 0, + 0, + 2, + 6, + 8, + 4, + 7 + ], + [ + 2, + 0, + 7, + 0, + 5, + 0, + 0, + 3, + 6 + ], + [ + 4, + 8, + 2, + 0, + 0, + 0, + 6, + 7, + 5 + ], + [ + 7, + 0, + 0, + 2, + 8, + 5, + 3, + 9, + 4 + ], + [ + 9, + 5, + 3, + 6, + 4, + 7, + 1, + 8, + 2 + ] + ], + "solution": [ + [ + 8, + 2, + 4, + 5, + 6, + 3, + 7, + 1, + 9 + ], + [ + 1, + 7, + 5, + 4, + 9, + 8, + 2, + 6, + 3 + ], + [ + 3, + 6, + 9, + 7, + 1, + 2, + 4, + 5, + 8 + ], + [ + 6, + 3, + 8, + 9, + 7, + 4, + 5, + 2, + 1 + ], + [ + 5, + 9, + 1, + 3, + 2, + 6, + 8, + 4, + 7 + ], + [ + 2, + 4, + 7, + 8, + 5, + 1, + 9, + 3, + 6 + ], + [ + 4, + 8, + 2, + 1, + 3, + 9, + 6, + 7, + 5 + ], + [ + 7, + 1, + 6, + 2, + 8, + 5, + 3, + 9, + 4 + ], + [ + 9, + 5, + 3, + 6, + 4, + 7, + 1, + 8, + 2 + ] + ] + }, + { + "id": 71, + "board": [ + [ + 4, + 6, + 2, + 1, + 3, + 9, + 8, + 5, + 7 + ], + [ + 3, + 5, + 9, + 7, + 8, + 4, + 0, + 0, + 6 + ], + [ + 8, + 1, + 7, + 6, + 2, + 5, + 4, + 9, + 3 + ], + [ + 1, + 0, + 0, + 3, + 9, + 0, + 0, + 0, + 4 + ], + [ + 0, + 4, + 0, + 5, + 1, + 0, + 0, + 0, + 9 + ], + [ + 9, + 0, + 0, + 4, + 6, + 8, + 0, + 7, + 0 + ], + [ + 5, + 0, + 4, + 2, + 7, + 1, + 0, + 0, + 8 + ], + [ + 0, + 8, + 1, + 9, + 5, + 0, + 0, + 4, + 2 + ], + [ + 2, + 0, + 0, + 8, + 4, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 6, + 2, + 1, + 3, + 9, + 8, + 5, + 7 + ], + [ + 3, + 5, + 9, + 7, + 8, + 4, + 1, + 2, + 6 + ], + [ + 8, + 1, + 7, + 6, + 2, + 5, + 4, + 9, + 3 + ], + [ + 1, + 2, + 6, + 3, + 9, + 7, + 5, + 8, + 4 + ], + [ + 7, + 4, + 8, + 5, + 1, + 2, + 3, + 6, + 9 + ], + [ + 9, + 3, + 5, + 4, + 6, + 8, + 2, + 7, + 1 + ], + [ + 5, + 9, + 4, + 2, + 7, + 1, + 6, + 3, + 8 + ], + [ + 6, + 8, + 1, + 9, + 5, + 3, + 7, + 4, + 2 + ], + [ + 2, + 7, + 3, + 8, + 4, + 6, + 9, + 1, + 5 + ] + ] + }, + { + "id": 72, + "board": [ + [ + 4, + 8, + 5, + 3, + 7, + 9, + 2, + 6, + 1 + ], + [ + 0, + 0, + 0, + 4, + 8, + 1, + 5, + 7, + 3 + ], + [ + 3, + 7, + 1, + 2, + 5, + 6, + 9, + 8, + 4 + ], + [ + 6, + 4, + 3, + 0, + 9, + 7, + 1, + 5, + 2 + ], + [ + 7, + 2, + 9, + 5, + 1, + 4, + 6, + 3, + 8 + ], + [ + 5, + 1, + 8, + 6, + 3, + 2, + 7, + 4, + 9 + ], + [ + 0, + 5, + 4, + 0, + 0, + 3, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 8, + 5, + 3, + 7, + 9, + 2, + 6, + 1 + ], + [ + 2, + 9, + 6, + 4, + 8, + 1, + 5, + 7, + 3 + ], + [ + 3, + 7, + 1, + 2, + 5, + 6, + 9, + 8, + 4 + ], + [ + 6, + 4, + 3, + 8, + 9, + 7, + 1, + 5, + 2 + ], + [ + 7, + 2, + 9, + 5, + 1, + 4, + 6, + 3, + 8 + ], + [ + 5, + 1, + 8, + 6, + 3, + 2, + 7, + 4, + 9 + ], + [ + 1, + 5, + 4, + 7, + 2, + 3, + 8, + 9, + 6 + ], + [ + 8, + 3, + 2, + 9, + 6, + 5, + 4, + 1, + 7 + ], + [ + 9, + 6, + 7, + 1, + 4, + 8, + 3, + 2, + 5 + ] + ] + }, + { + "id": 73, + "board": [ + [ + 0, + 6, + 7, + 2, + 1, + 4, + 9, + 0, + 0 + ], + [ + 8, + 0, + 2, + 6, + 5, + 9, + 7, + 0, + 3 + ], + [ + 1, + 5, + 9, + 3, + 7, + 0, + 4, + 2, + 6 + ], + [ + 5, + 0, + 0, + 7, + 2, + 0, + 0, + 3, + 0 + ], + [ + 7, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 9, + 0, + 8, + 3, + 5, + 0, + 4, + 0 + ], + [ + 0, + 7, + 8, + 5, + 0, + 2, + 3, + 0, + 1 + ], + [ + 0, + 0, + 3, + 0, + 8, + 7, + 5, + 0, + 2 + ], + [ + 9, + 2, + 5, + 1, + 6, + 3, + 8, + 7, + 4 + ] + ], + "solution": [ + [ + 3, + 6, + 7, + 2, + 1, + 4, + 9, + 5, + 8 + ], + [ + 8, + 4, + 2, + 6, + 5, + 9, + 7, + 1, + 3 + ], + [ + 1, + 5, + 9, + 3, + 7, + 8, + 4, + 2, + 6 + ], + [ + 5, + 8, + 4, + 7, + 2, + 1, + 6, + 3, + 9 + ], + [ + 7, + 3, + 1, + 4, + 9, + 6, + 2, + 8, + 5 + ], + [ + 2, + 9, + 6, + 8, + 3, + 5, + 1, + 4, + 7 + ], + [ + 6, + 7, + 8, + 5, + 4, + 2, + 3, + 9, + 1 + ], + [ + 4, + 1, + 3, + 9, + 8, + 7, + 5, + 6, + 2 + ], + [ + 9, + 2, + 5, + 1, + 6, + 3, + 8, + 7, + 4 + ] + ] + }, + { + "id": 74, + "board": [ + [ + 0, + 7, + 2, + 0, + 0, + 1, + 0, + 5, + 3 + ], + [ + 3, + 0, + 5, + 0, + 7, + 2, + 0, + 6, + 0 + ], + [ + 8, + 6, + 1, + 5, + 3, + 0, + 2, + 4, + 7 + ], + [ + 0, + 2, + 9, + 0, + 5, + 8, + 4, + 3, + 6 + ], + [ + 5, + 0, + 0, + 2, + 9, + 6, + 1, + 7, + 8 + ], + [ + 7, + 8, + 6, + 1, + 4, + 0, + 5, + 2, + 0 + ], + [ + 6, + 0, + 3, + 9, + 2, + 4, + 7, + 8, + 5 + ], + [ + 0, + 0, + 7, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 3, + 0, + 7, + 6, + 9, + 0 + ] + ], + "solution": [ + [ + 4, + 7, + 2, + 6, + 8, + 1, + 9, + 5, + 3 + ], + [ + 3, + 9, + 5, + 4, + 7, + 2, + 8, + 6, + 1 + ], + [ + 8, + 6, + 1, + 5, + 3, + 9, + 2, + 4, + 7 + ], + [ + 1, + 2, + 9, + 7, + 5, + 8, + 4, + 3, + 6 + ], + [ + 5, + 3, + 4, + 2, + 9, + 6, + 1, + 7, + 8 + ], + [ + 7, + 8, + 6, + 1, + 4, + 3, + 5, + 2, + 9 + ], + [ + 6, + 1, + 3, + 9, + 2, + 4, + 7, + 8, + 5 + ], + [ + 9, + 4, + 7, + 8, + 6, + 5, + 3, + 1, + 2 + ], + [ + 2, + 5, + 8, + 3, + 1, + 7, + 6, + 9, + 4 + ] + ] + }, + { + "id": 75, + "board": [ + [ + 2, + 0, + 8, + 3, + 4, + 1, + 0, + 0, + 0 + ], + [ + 9, + 3, + 4, + 6, + 5, + 7, + 8, + 1, + 2 + ], + [ + 0, + 0, + 0, + 9, + 8, + 2, + 0, + 0, + 0 + ], + [ + 7, + 0, + 2, + 0, + 6, + 3, + 0, + 0, + 0 + ], + [ + 8, + 0, + 9, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 3, + 1, + 0, + 2, + 9, + 8, + 0, + 0, + 0 + ], + [ + 4, + 9, + 3, + 7, + 1, + 6, + 0, + 0, + 0 + ], + [ + 5, + 2, + 1, + 8, + 3, + 4, + 7, + 6, + 9 + ], + [ + 6, + 8, + 7, + 5, + 2, + 9, + 4, + 3, + 1 + ] + ], + "solution": [ + [ + 2, + 6, + 8, + 3, + 4, + 1, + 9, + 5, + 7 + ], + [ + 9, + 3, + 4, + 6, + 5, + 7, + 8, + 1, + 2 + ], + [ + 1, + 7, + 5, + 9, + 8, + 2, + 3, + 4, + 6 + ], + [ + 7, + 5, + 2, + 4, + 6, + 3, + 1, + 9, + 8 + ], + [ + 8, + 4, + 9, + 1, + 7, + 5, + 6, + 2, + 3 + ], + [ + 3, + 1, + 6, + 2, + 9, + 8, + 5, + 7, + 4 + ], + [ + 4, + 9, + 3, + 7, + 1, + 6, + 2, + 8, + 5 + ], + [ + 5, + 2, + 1, + 8, + 3, + 4, + 7, + 6, + 9 + ], + [ + 6, + 8, + 7, + 5, + 2, + 9, + 4, + 3, + 1 + ] + ] + } + ] + }, + "hard": { + "level": [ + { + "id": 1, + "board": [ + [ + 0, + 6, + 0, + 1, + 2, + 5, + 0, + 0, + 8 + ], + [ + 4, + 1, + 9, + 0, + 6, + 8, + 0, + 7, + 0 + ], + [ + 0, + 2, + 8, + 0, + 0, + 7, + 0, + 6, + 0 + ], + [ + 1, + 5, + 4, + 7, + 3, + 9, + 0, + 8, + 0 + ], + [ + 0, + 7, + 0, + 0, + 5, + 0, + 0, + 0, + 0 + ], + [ + 9, + 3, + 2, + 6, + 8, + 4, + 1, + 5, + 0 + ], + [ + 0, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 9, + 0, + 8, + 0, + 2, + 0, + 1, + 0 + ], + [ + 6, + 4, + 0, + 5, + 0, + 3, + 8, + 2, + 9 + ] + ], + "solution": [ + [ + 3, + 6, + 7, + 1, + 2, + 5, + 4, + 9, + 8 + ], + [ + 4, + 1, + 9, + 3, + 6, + 8, + 2, + 7, + 5 + ], + [ + 5, + 2, + 8, + 4, + 9, + 7, + 3, + 6, + 1 + ], + [ + 1, + 5, + 4, + 7, + 3, + 9, + 6, + 8, + 2 + ], + [ + 8, + 7, + 6, + 2, + 5, + 1, + 9, + 3, + 4 + ], + [ + 9, + 3, + 2, + 6, + 8, + 4, + 1, + 5, + 7 + ], + [ + 2, + 8, + 5, + 9, + 1, + 6, + 7, + 4, + 3 + ], + [ + 7, + 9, + 3, + 8, + 4, + 2, + 5, + 1, + 6 + ], + [ + 6, + 4, + 1, + 5, + 7, + 3, + 8, + 2, + 9 + ] + ] + }, + { + "id": 2, + "board": [ + [ + 6, + 9, + 4, + 2, + 0, + 0, + 1, + 5, + 0 + ], + [ + 1, + 2, + 7, + 3, + 0, + 0, + 0, + 0, + 4 + ], + [ + 5, + 3, + 8, + 0, + 4, + 1, + 6, + 7, + 2 + ], + [ + 4, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 6 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 8 + ], + [ + 8, + 6, + 2, + 5, + 3, + 9, + 4, + 1, + 7 + ], + [ + 0, + 4, + 3, + 8, + 1, + 0, + 0, + 0, + 5 + ] + ], + "solution": [ + [ + 6, + 9, + 4, + 2, + 7, + 8, + 1, + 5, + 3 + ], + [ + 1, + 2, + 7, + 3, + 5, + 6, + 8, + 9, + 4 + ], + [ + 5, + 3, + 8, + 9, + 4, + 1, + 6, + 7, + 2 + ], + [ + 4, + 5, + 9, + 1, + 2, + 3, + 7, + 8, + 6 + ], + [ + 2, + 8, + 6, + 4, + 9, + 7, + 5, + 3, + 1 + ], + [ + 3, + 7, + 1, + 6, + 8, + 5, + 2, + 4, + 9 + ], + [ + 9, + 1, + 5, + 7, + 6, + 4, + 3, + 2, + 8 + ], + [ + 8, + 6, + 2, + 5, + 3, + 9, + 4, + 1, + 7 + ], + [ + 7, + 4, + 3, + 8, + 1, + 2, + 9, + 6, + 5 + ] + ] + }, + { + "id": 3, + "board": [ + [ + 5, + 3, + 4, + 8, + 0, + 1, + 2, + 9, + 7 + ], + [ + 2, + 0, + 0, + 7, + 5, + 4, + 8, + 0, + 3 + ], + [ + 7, + 0, + 6, + 0, + 0, + 0, + 1, + 4, + 5 + ], + [ + 0, + 0, + 0, + 0, + 0, + 7, + 6, + 5, + 0 + ], + [ + 0, + 0, + 5, + 0, + 3, + 0, + 7, + 2, + 0 + ], + [ + 9, + 6, + 7, + 5, + 8, + 2, + 4, + 3, + 1 + ], + [ + 6, + 7, + 0, + 0, + 4, + 0, + 0, + 1, + 2 + ], + [ + 1, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 4 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6 + ] + ], + "solution": [ + [ + 5, + 3, + 4, + 8, + 6, + 1, + 2, + 9, + 7 + ], + [ + 2, + 1, + 9, + 7, + 5, + 4, + 8, + 6, + 3 + ], + [ + 7, + 8, + 6, + 3, + 2, + 9, + 1, + 4, + 5 + ], + [ + 3, + 2, + 1, + 4, + 9, + 7, + 6, + 5, + 8 + ], + [ + 8, + 4, + 5, + 1, + 3, + 6, + 7, + 2, + 9 + ], + [ + 9, + 6, + 7, + 5, + 8, + 2, + 4, + 3, + 1 + ], + [ + 6, + 7, + 3, + 9, + 4, + 8, + 5, + 1, + 2 + ], + [ + 1, + 5, + 2, + 6, + 7, + 3, + 9, + 8, + 4 + ], + [ + 4, + 9, + 8, + 2, + 1, + 5, + 3, + 7, + 6 + ] + ] + }, + { + "id": 4, + "board": [ + [ + 0, + 3, + 2, + 1, + 0, + 6, + 5, + 9, + 4 + ], + [ + 0, + 6, + 0, + 3, + 8, + 0, + 2, + 7, + 1 + ], + [ + 0, + 1, + 0, + 2, + 5, + 0, + 6, + 8, + 3 + ], + [ + 0, + 9, + 0, + 0, + 0, + 7, + 8, + 0, + 0 + ], + [ + 0, + 4, + 0, + 0, + 0, + 8, + 0, + 0, + 0 + ], + [ + 0, + 8, + 0, + 0, + 0, + 3, + 0, + 0, + 0 + ], + [ + 3, + 5, + 0, + 6, + 0, + 2, + 7, + 1, + 0 + ], + [ + 0, + 2, + 0, + 7, + 3, + 5, + 4, + 6, + 8 + ], + [ + 0, + 7, + 0, + 8, + 9, + 1, + 3, + 0, + 0 + ] + ], + "solution": [ + [ + 8, + 3, + 2, + 1, + 7, + 6, + 5, + 9, + 4 + ], + [ + 5, + 6, + 9, + 3, + 8, + 4, + 2, + 7, + 1 + ], + [ + 4, + 1, + 7, + 2, + 5, + 9, + 6, + 8, + 3 + ], + [ + 1, + 9, + 5, + 4, + 2, + 7, + 8, + 3, + 6 + ], + [ + 2, + 4, + 3, + 9, + 6, + 8, + 1, + 5, + 7 + ], + [ + 7, + 8, + 6, + 5, + 1, + 3, + 9, + 4, + 2 + ], + [ + 3, + 5, + 8, + 6, + 4, + 2, + 7, + 1, + 9 + ], + [ + 9, + 2, + 1, + 7, + 3, + 5, + 4, + 6, + 8 + ], + [ + 6, + 7, + 4, + 8, + 9, + 1, + 3, + 2, + 5 + ] + ] + }, + { + "id": 5, + "board": [ + [ + 0, + 5, + 0, + 6, + 0, + 3, + 0, + 0, + 8 + ], + [ + 0, + 0, + 0, + 7, + 0, + 4, + 0, + 0, + 6 + ], + [ + 0, + 0, + 0, + 2, + 0, + 8, + 0, + 0, + 7 + ], + [ + 0, + 7, + 0, + 8, + 4, + 1, + 3, + 2, + 9 + ], + [ + 8, + 1, + 2, + 3, + 7, + 9, + 0, + 0, + 4 + ], + [ + 0, + 0, + 4, + 5, + 2, + 6, + 0, + 7, + 1 + ], + [ + 0, + 0, + 9, + 1, + 3, + 5, + 0, + 0, + 2 + ], + [ + 0, + 4, + 0, + 9, + 6, + 2, + 0, + 0, + 3 + ], + [ + 3, + 2, + 0, + 4, + 0, + 0, + 0, + 0, + 5 + ] + ], + "solution": [ + [ + 2, + 5, + 7, + 6, + 1, + 3, + 4, + 9, + 8 + ], + [ + 1, + 9, + 8, + 7, + 5, + 4, + 2, + 3, + 6 + ], + [ + 4, + 6, + 3, + 2, + 9, + 8, + 1, + 5, + 7 + ], + [ + 6, + 7, + 5, + 8, + 4, + 1, + 3, + 2, + 9 + ], + [ + 8, + 1, + 2, + 3, + 7, + 9, + 5, + 6, + 4 + ], + [ + 9, + 3, + 4, + 5, + 2, + 6, + 8, + 7, + 1 + ], + [ + 7, + 8, + 9, + 1, + 3, + 5, + 6, + 4, + 2 + ], + [ + 5, + 4, + 1, + 9, + 6, + 2, + 7, + 8, + 3 + ], + [ + 3, + 2, + 6, + 4, + 8, + 7, + 9, + 1, + 5 + ] + ] + }, + { + "id": 6, + "board": [ + [ + 2, + 5, + 4, + 9, + 8, + 1, + 0, + 0, + 6 + ], + [ + 0, + 7, + 0, + 0, + 6, + 0, + 4, + 9, + 2 + ], + [ + 0, + 0, + 3, + 4, + 2, + 7, + 8, + 1, + 5 + ], + [ + 0, + 1, + 9, + 0, + 4, + 8, + 0, + 0, + 0 + ], + [ + 4, + 8, + 0, + 0, + 3, + 0, + 9, + 0, + 1 + ], + [ + 7, + 3, + 0, + 0, + 0, + 0, + 6, + 4, + 8 + ], + [ + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 0, + 0 + ], + [ + 3, + 2, + 7, + 8, + 5, + 4, + 1, + 6, + 9 + ] + ], + "solution": [ + [ + 2, + 5, + 4, + 9, + 8, + 1, + 3, + 7, + 6 + ], + [ + 1, + 7, + 8, + 3, + 6, + 5, + 4, + 9, + 2 + ], + [ + 6, + 9, + 3, + 4, + 2, + 7, + 8, + 1, + 5 + ], + [ + 5, + 1, + 9, + 6, + 4, + 8, + 2, + 3, + 7 + ], + [ + 4, + 8, + 6, + 7, + 3, + 2, + 9, + 5, + 1 + ], + [ + 7, + 3, + 2, + 5, + 1, + 9, + 6, + 4, + 8 + ], + [ + 8, + 4, + 5, + 1, + 9, + 6, + 7, + 2, + 3 + ], + [ + 9, + 6, + 1, + 2, + 7, + 3, + 5, + 8, + 4 + ], + [ + 3, + 2, + 7, + 8, + 5, + 4, + 1, + 6, + 9 + ] + ] + }, + { + "id": 7, + "board": [ + [ + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 4, + 0, + 7, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 5, + 3, + 6, + 9, + 1, + 2, + 4, + 8, + 7 + ], + [ + 1, + 9, + 7, + 8, + 4, + 3, + 0, + 0, + 2 + ], + [ + 8, + 4, + 2, + 6, + 5, + 7, + 0, + 9, + 0 + ], + [ + 0, + 1, + 5, + 7, + 2, + 0, + 8, + 0, + 0 + ], + [ + 0, + 7, + 3, + 5, + 0, + 8, + 2, + 1, + 4 + ], + [ + 0, + 2, + 8, + 0, + 0, + 0, + 0, + 7, + 5 + ] + ], + "solution": [ + [ + 7, + 5, + 9, + 3, + 8, + 4, + 6, + 2, + 1 + ], + [ + 2, + 8, + 4, + 1, + 7, + 6, + 3, + 5, + 9 + ], + [ + 3, + 6, + 1, + 2, + 9, + 5, + 7, + 4, + 8 + ], + [ + 5, + 3, + 6, + 9, + 1, + 2, + 4, + 8, + 7 + ], + [ + 1, + 9, + 7, + 8, + 4, + 3, + 5, + 6, + 2 + ], + [ + 8, + 4, + 2, + 6, + 5, + 7, + 1, + 9, + 3 + ], + [ + 4, + 1, + 5, + 7, + 2, + 9, + 8, + 3, + 6 + ], + [ + 9, + 7, + 3, + 5, + 6, + 8, + 2, + 1, + 4 + ], + [ + 6, + 2, + 8, + 4, + 3, + 1, + 9, + 7, + 5 + ] + ] + }, + { + "id": 8, + "board": [ + [ + 8, + 3, + 0, + 0, + 0, + 0, + 7, + 0, + 0 + ], + [ + 0, + 5, + 0, + 0, + 8, + 0, + 1, + 3, + 0 + ], + [ + 4, + 6, + 0, + 3, + 0, + 7, + 0, + 0, + 8 + ], + [ + 9, + 1, + 7, + 0, + 0, + 0, + 0, + 0, + 3 + ], + [ + 6, + 4, + 3, + 8, + 7, + 1, + 0, + 0, + 0 + ], + [ + 2, + 0, + 5, + 9, + 0, + 3, + 0, + 7, + 1 + ], + [ + 3, + 7, + 4, + 1, + 5, + 2, + 0, + 8, + 0 + ], + [ + 1, + 0, + 6, + 0, + 3, + 8, + 0, + 0, + 0 + ], + [ + 5, + 2, + 0, + 0, + 0, + 6, + 0, + 1, + 7 + ] + ], + "solution": [ + [ + 8, + 3, + 1, + 2, + 4, + 5, + 7, + 9, + 6 + ], + [ + 7, + 5, + 2, + 6, + 8, + 9, + 1, + 3, + 4 + ], + [ + 4, + 6, + 9, + 3, + 1, + 7, + 2, + 5, + 8 + ], + [ + 9, + 1, + 7, + 5, + 2, + 4, + 8, + 6, + 3 + ], + [ + 6, + 4, + 3, + 8, + 7, + 1, + 9, + 2, + 5 + ], + [ + 2, + 8, + 5, + 9, + 6, + 3, + 4, + 7, + 1 + ], + [ + 3, + 7, + 4, + 1, + 5, + 2, + 6, + 8, + 9 + ], + [ + 1, + 9, + 6, + 7, + 3, + 8, + 5, + 4, + 2 + ], + [ + 5, + 2, + 8, + 4, + 9, + 6, + 3, + 1, + 7 + ] + ] + }, + { + "id": 9, + "board": [ + [ + 0, + 7, + 3, + 6, + 5, + 2, + 0, + 0, + 9 + ], + [ + 1, + 0, + 0, + 9, + 0, + 7, + 0, + 0, + 4 + ], + [ + 2, + 9, + 0, + 8, + 1, + 0, + 0, + 5, + 3 + ], + [ + 5, + 0, + 7, + 0, + 9, + 3, + 0, + 8, + 0 + ], + [ + 0, + 4, + 1, + 7, + 2, + 6, + 3, + 9, + 5 + ], + [ + 0, + 3, + 9, + 4, + 8, + 5, + 0, + 7, + 0 + ], + [ + 3, + 1, + 8, + 0, + 0, + 0, + 0, + 0, + 7 + ], + [ + 7, + 5, + 2, + 3, + 0, + 8, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 7, + 3, + 6, + 5, + 2, + 8, + 1, + 9 + ], + [ + 1, + 8, + 5, + 9, + 3, + 7, + 2, + 6, + 4 + ], + [ + 2, + 9, + 6, + 8, + 1, + 4, + 7, + 5, + 3 + ], + [ + 5, + 2, + 7, + 1, + 9, + 3, + 4, + 8, + 6 + ], + [ + 8, + 4, + 1, + 7, + 2, + 6, + 3, + 9, + 5 + ], + [ + 6, + 3, + 9, + 4, + 8, + 5, + 1, + 7, + 2 + ], + [ + 3, + 1, + 8, + 5, + 4, + 9, + 6, + 2, + 7 + ], + [ + 7, + 5, + 2, + 3, + 6, + 8, + 9, + 4, + 1 + ], + [ + 9, + 6, + 4, + 2, + 7, + 1, + 5, + 3, + 8 + ] + ] + }, + { + "id": 10, + "board": [ + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 9 + ], + [ + 0, + 9, + 2, + 0, + 0, + 1, + 3, + 0, + 0 + ], + [ + 4, + 6, + 0, + 7, + 0, + 0, + 2, + 8, + 1 + ], + [ + 1, + 2, + 6, + 5, + 3, + 7, + 0, + 0, + 0 + ], + [ + 9, + 8, + 0, + 0, + 4, + 0, + 0, + 0, + 3 + ], + [ + 3, + 7, + 4, + 8, + 1, + 9, + 0, + 2, + 0 + ], + [ + 6, + 3, + 9, + 1, + 7, + 4, + 8, + 5, + 2 + ], + [ + 0, + 5, + 1, + 0, + 0, + 0, + 0, + 0, + 4 + ], + [ + 0, + 4, + 0, + 0, + 5, + 0, + 1, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 1, + 7, + 3, + 2, + 8, + 4, + 6, + 9 + ], + [ + 8, + 9, + 2, + 4, + 6, + 1, + 3, + 7, + 5 + ], + [ + 4, + 6, + 3, + 7, + 9, + 5, + 2, + 8, + 1 + ], + [ + 1, + 2, + 6, + 5, + 3, + 7, + 9, + 4, + 8 + ], + [ + 9, + 8, + 5, + 2, + 4, + 6, + 7, + 1, + 3 + ], + [ + 3, + 7, + 4, + 8, + 1, + 9, + 5, + 2, + 6 + ], + [ + 6, + 3, + 9, + 1, + 7, + 4, + 8, + 5, + 2 + ], + [ + 7, + 5, + 1, + 9, + 8, + 2, + 6, + 3, + 4 + ], + [ + 2, + 4, + 8, + 6, + 5, + 3, + 1, + 9, + 7 + ] + ] + }, + { + "id": 11, + "board": [ + [ + 0, + 9, + 7, + 4, + 0, + 0, + 2, + 0, + 1 + ], + [ + 0, + 3, + 1, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 8, + 1, + 0, + 6, + 3, + 0, + 0 + ], + [ + 0, + 8, + 0, + 7, + 6, + 0, + 1, + 3, + 9 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 6 + ], + [ + 1, + 6, + 0, + 0, + 3, + 0, + 8, + 0, + 0 + ], + [ + 7, + 1, + 6, + 3, + 2, + 5, + 0, + 4, + 8 + ], + [ + 9, + 5, + 3, + 6, + 0, + 8, + 7, + 1, + 0 + ], + [ + 8, + 0, + 0, + 9, + 1, + 0, + 5, + 0, + 3 + ] + ], + "solution": [ + [ + 6, + 9, + 7, + 4, + 5, + 3, + 2, + 8, + 1 + ], + [ + 4, + 3, + 1, + 8, + 7, + 2, + 6, + 9, + 5 + ], + [ + 5, + 2, + 8, + 1, + 9, + 6, + 3, + 7, + 4 + ], + [ + 2, + 8, + 5, + 7, + 6, + 4, + 1, + 3, + 9 + ], + [ + 3, + 7, + 9, + 5, + 8, + 1, + 4, + 2, + 6 + ], + [ + 1, + 6, + 4, + 2, + 3, + 9, + 8, + 5, + 7 + ], + [ + 7, + 1, + 6, + 3, + 2, + 5, + 9, + 4, + 8 + ], + [ + 9, + 5, + 3, + 6, + 4, + 8, + 7, + 1, + 2 + ], + [ + 8, + 4, + 2, + 9, + 1, + 7, + 5, + 6, + 3 + ] + ] + }, + { + "id": 12, + "board": [ + [ + 1, + 7, + 8, + 6, + 3, + 4, + 9, + 2, + 5 + ], + [ + 6, + 9, + 3, + 0, + 5, + 8, + 0, + 0, + 0 + ], + [ + 0, + 5, + 4, + 7, + 1, + 9, + 0, + 0, + 6 + ], + [ + 4, + 8, + 0, + 0, + 0, + 0, + 0, + 9, + 0 + ], + [ + 3, + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 7, + 3, + 0, + 0, + 8, + 6, + 0, + 4, + 9 + ], + [ + 8, + 0, + 0, + 4, + 9, + 0, + 0, + 0, + 0 + ], + [ + 5, + 4, + 9, + 3, + 2, + 7, + 1, + 6, + 8 + ] + ], + "solution": [ + [ + 1, + 7, + 8, + 6, + 3, + 4, + 9, + 2, + 5 + ], + [ + 6, + 9, + 3, + 2, + 5, + 8, + 4, + 1, + 7 + ], + [ + 2, + 5, + 4, + 7, + 1, + 9, + 3, + 8, + 6 + ], + [ + 4, + 8, + 5, + 1, + 6, + 3, + 7, + 9, + 2 + ], + [ + 3, + 1, + 6, + 9, + 7, + 2, + 8, + 5, + 4 + ], + [ + 9, + 2, + 7, + 8, + 4, + 5, + 6, + 3, + 1 + ], + [ + 7, + 3, + 1, + 5, + 8, + 6, + 2, + 4, + 9 + ], + [ + 8, + 6, + 2, + 4, + 9, + 1, + 5, + 7, + 3 + ], + [ + 5, + 4, + 9, + 3, + 2, + 7, + 1, + 6, + 8 + ] + ] + }, + { + "id": 13, + "board": [ + [ + 4, + 6, + 8, + 5, + 9, + 1, + 7, + 0, + 0 + ], + [ + 0, + 5, + 7, + 8, + 6, + 3, + 0, + 0, + 0 + ], + [ + 1, + 9, + 3, + 7, + 4, + 2, + 8, + 6, + 5 + ], + [ + 3, + 4, + 2, + 9, + 1, + 8, + 6, + 5, + 7 + ], + [ + 8, + 1, + 5, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 9, + 7, + 6, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 6, + 0, + 4, + 1, + 0, + 9, + 0, + 0, + 0 + ], + [ + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 6, + 8, + 5, + 9, + 1, + 7, + 2, + 3 + ], + [ + 2, + 5, + 7, + 8, + 6, + 3, + 9, + 1, + 4 + ], + [ + 1, + 9, + 3, + 7, + 4, + 2, + 8, + 6, + 5 + ], + [ + 3, + 4, + 2, + 9, + 1, + 8, + 6, + 5, + 7 + ], + [ + 8, + 1, + 5, + 6, + 2, + 7, + 3, + 4, + 9 + ], + [ + 9, + 7, + 6, + 4, + 3, + 5, + 1, + 8, + 2 + ], + [ + 6, + 2, + 4, + 1, + 7, + 9, + 5, + 3, + 8 + ], + [ + 5, + 3, + 9, + 2, + 8, + 6, + 4, + 7, + 1 + ], + [ + 7, + 8, + 1, + 3, + 5, + 4, + 2, + 9, + 6 + ] + ] + }, + { + "id": 14, + "board": [ + [ + 0, + 3, + 0, + 7, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 7, + 0, + 0, + 8, + 0, + 9, + 0, + 5 + ], + [ + 0, + 5, + 0, + 0, + 1, + 0, + 7, + 0, + 0 + ], + [ + 0, + 0, + 3, + 0, + 7, + 0, + 0, + 0, + 0 + ], + [ + 4, + 0, + 8, + 3, + 9, + 1, + 0, + 5, + 7 + ], + [ + 0, + 0, + 7, + 0, + 6, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 5, + 6, + 4, + 7, + 3, + 9, + 8 + ], + [ + 3, + 8, + 9, + 1, + 2, + 5, + 4, + 7, + 6 + ], + [ + 7, + 4, + 6, + 0, + 3, + 0, + 5, + 1, + 2 + ] + ], + "solution": [ + [ + 8, + 3, + 2, + 7, + 5, + 9, + 6, + 4, + 1 + ], + [ + 6, + 7, + 1, + 4, + 8, + 3, + 9, + 2, + 5 + ], + [ + 9, + 5, + 4, + 2, + 1, + 6, + 7, + 8, + 3 + ], + [ + 1, + 2, + 3, + 5, + 7, + 4, + 8, + 6, + 9 + ], + [ + 4, + 6, + 8, + 3, + 9, + 1, + 2, + 5, + 7 + ], + [ + 5, + 9, + 7, + 8, + 6, + 2, + 1, + 3, + 4 + ], + [ + 2, + 1, + 5, + 6, + 4, + 7, + 3, + 9, + 8 + ], + [ + 3, + 8, + 9, + 1, + 2, + 5, + 4, + 7, + 6 + ], + [ + 7, + 4, + 6, + 9, + 3, + 8, + 5, + 1, + 2 + ] + ] + }, + { + "id": 15, + "board": [ + [ + 0, + 0, + 0, + 0, + 0, + 9, + 3, + 5, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 7, + 4, + 1, + 0 + ], + [ + 0, + 0, + 0, + 3, + 0, + 4, + 7, + 9, + 6 + ], + [ + 0, + 6, + 0, + 0, + 8, + 2, + 9, + 3, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 7 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 0, + 4, + 5 + ], + [ + 6, + 8, + 2, + 0, + 0, + 1, + 5, + 7, + 3 + ], + [ + 3, + 9, + 1, + 2, + 7, + 5, + 8, + 0, + 4 + ], + [ + 5, + 0, + 0, + 6, + 3, + 8, + 1, + 2, + 9 + ] + ], + "solution": [ + [ + 4, + 7, + 6, + 1, + 2, + 9, + 3, + 5, + 8 + ], + [ + 9, + 3, + 5, + 8, + 6, + 7, + 4, + 1, + 2 + ], + [ + 1, + 2, + 8, + 3, + 5, + 4, + 7, + 9, + 6 + ], + [ + 7, + 6, + 4, + 5, + 8, + 2, + 9, + 3, + 1 + ], + [ + 2, + 5, + 9, + 4, + 1, + 3, + 6, + 8, + 7 + ], + [ + 8, + 1, + 3, + 7, + 9, + 6, + 2, + 4, + 5 + ], + [ + 6, + 8, + 2, + 9, + 4, + 1, + 5, + 7, + 3 + ], + [ + 3, + 9, + 1, + 2, + 7, + 5, + 8, + 6, + 4 + ], + [ + 5, + 4, + 7, + 6, + 3, + 8, + 1, + 2, + 9 + ] + ] + }, + { + "id": 16, + "board": [ + [ + 5, + 3, + 1, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 2, + 9, + 6, + 3, + 1, + 0, + 0, + 0, + 0 + ], + [ + 7, + 4, + 8, + 5, + 2, + 6, + 1, + 9, + 3 + ], + [ + 0, + 0, + 2, + 1, + 5, + 3, + 0, + 0, + 0 + ], + [ + 9, + 1, + 4, + 6, + 8, + 7, + 3, + 0, + 5 + ], + [ + 3, + 0, + 5, + 2, + 0, + 0, + 0, + 1, + 6 + ], + [ + 0, + 0, + 7, + 9, + 0, + 5, + 0, + 0, + 1 + ], + [ + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 8 + ], + [ + 0, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 9 + ] + ], + "solution": [ + [ + 5, + 3, + 1, + 7, + 9, + 8, + 4, + 6, + 2 + ], + [ + 2, + 9, + 6, + 3, + 1, + 4, + 5, + 8, + 7 + ], + [ + 7, + 4, + 8, + 5, + 2, + 6, + 1, + 9, + 3 + ], + [ + 8, + 6, + 2, + 1, + 5, + 3, + 9, + 7, + 4 + ], + [ + 9, + 1, + 4, + 6, + 8, + 7, + 3, + 2, + 5 + ], + [ + 3, + 7, + 5, + 2, + 4, + 9, + 8, + 1, + 6 + ], + [ + 4, + 8, + 7, + 9, + 6, + 5, + 2, + 3, + 1 + ], + [ + 6, + 2, + 9, + 4, + 3, + 1, + 7, + 5, + 8 + ], + [ + 1, + 5, + 3, + 8, + 7, + 2, + 6, + 4, + 9 + ] + ] + }, + { + "id": 17, + "board": [ + [ + 0, + 0, + 3, + 4, + 0, + 9, + 7, + 6, + 0 + ], + [ + 9, + 0, + 6, + 0, + 0, + 0, + 0, + 5, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 0 + ], + [ + 8, + 7, + 5, + 6, + 1, + 4, + 3, + 2, + 9 + ], + [ + 1, + 3, + 9, + 7, + 2, + 5, + 0, + 4, + 0 + ], + [ + 6, + 0, + 0, + 8, + 9, + 3, + 5, + 1, + 7 + ], + [ + 0, + 9, + 0, + 3, + 0, + 0, + 1, + 7, + 2 + ], + [ + 0, + 0, + 1, + 9, + 0, + 0, + 0, + 3, + 0 + ], + [ + 3, + 0, + 0, + 0, + 4, + 0, + 9, + 8, + 0 + ] + ], + "solution": [ + [ + 2, + 5, + 3, + 4, + 8, + 9, + 7, + 6, + 1 + ], + [ + 9, + 8, + 6, + 1, + 3, + 7, + 2, + 5, + 4 + ], + [ + 7, + 1, + 4, + 5, + 6, + 2, + 8, + 9, + 3 + ], + [ + 8, + 7, + 5, + 6, + 1, + 4, + 3, + 2, + 9 + ], + [ + 1, + 3, + 9, + 7, + 2, + 5, + 6, + 4, + 8 + ], + [ + 6, + 4, + 2, + 8, + 9, + 3, + 5, + 1, + 7 + ], + [ + 4, + 9, + 8, + 3, + 5, + 6, + 1, + 7, + 2 + ], + [ + 5, + 2, + 1, + 9, + 7, + 8, + 4, + 3, + 6 + ], + [ + 3, + 6, + 7, + 2, + 4, + 1, + 9, + 8, + 5 + ] + ] + }, + { + "id": 18, + "board": [ + [ + 6, + 5, + 3, + 0, + 8, + 9, + 0, + 1, + 0 + ], + [ + 1, + 8, + 9, + 0, + 0, + 6, + 0, + 0, + 3 + ], + [ + 7, + 4, + 2, + 5, + 3, + 1, + 6, + 9, + 8 + ], + [ + 4, + 0, + 6, + 8, + 2, + 7, + 9, + 0, + 0 + ], + [ + 0, + 0, + 7, + 6, + 5, + 0, + 8, + 0, + 0 + ], + [ + 8, + 2, + 5, + 1, + 9, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 8, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 2, + 6, + 0, + 0, + 0, + 5, + 0, + 8, + 9 + ], + [ + 0, + 7, + 0, + 0, + 0, + 8, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 6, + 5, + 3, + 2, + 8, + 9, + 4, + 1, + 7 + ], + [ + 1, + 8, + 9, + 7, + 4, + 6, + 2, + 5, + 3 + ], + [ + 7, + 4, + 2, + 5, + 3, + 1, + 6, + 9, + 8 + ], + [ + 4, + 1, + 6, + 8, + 2, + 7, + 9, + 3, + 5 + ], + [ + 3, + 9, + 7, + 6, + 5, + 4, + 8, + 2, + 1 + ], + [ + 8, + 2, + 5, + 1, + 9, + 3, + 7, + 4, + 6 + ], + [ + 5, + 3, + 8, + 9, + 6, + 2, + 1, + 7, + 4 + ], + [ + 2, + 6, + 1, + 4, + 7, + 5, + 3, + 8, + 9 + ], + [ + 9, + 7, + 4, + 3, + 1, + 8, + 5, + 6, + 2 + ] + ] + }, + { + "id": 19, + "board": [ + [ + 0, + 6, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 9, + 1, + 3, + 0, + 8, + 0, + 6, + 0 + ], + [ + 0, + 0, + 0, + 0, + 6, + 4, + 0, + 0, + 0 + ], + [ + 0, + 0, + 5, + 4, + 8, + 6, + 3, + 0, + 7 + ], + [ + 0, + 0, + 6, + 7, + 5, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 3, + 1, + 5, + 2, + 0 + ], + [ + 6, + 5, + 0, + 8, + 9, + 3, + 7, + 4, + 1 + ], + [ + 7, + 4, + 9, + 1, + 2, + 5, + 6, + 3, + 8 + ], + [ + 3, + 0, + 8, + 6, + 0, + 7, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 6, + 7, + 2, + 1, + 9, + 4, + 8, + 3 + ], + [ + 4, + 9, + 1, + 3, + 7, + 8, + 2, + 6, + 5 + ], + [ + 2, + 8, + 3, + 5, + 6, + 4, + 1, + 7, + 9 + ], + [ + 1, + 2, + 5, + 4, + 8, + 6, + 3, + 9, + 7 + ], + [ + 9, + 3, + 6, + 7, + 5, + 2, + 8, + 1, + 4 + ], + [ + 8, + 7, + 4, + 9, + 3, + 1, + 5, + 2, + 6 + ], + [ + 6, + 5, + 2, + 8, + 9, + 3, + 7, + 4, + 1 + ], + [ + 7, + 4, + 9, + 1, + 2, + 5, + 6, + 3, + 8 + ], + [ + 3, + 1, + 8, + 6, + 4, + 7, + 9, + 5, + 2 + ] + ] + }, + { + "id": 20, + "board": [ + [ + 0, + 2, + 9, + 5, + 6, + 0, + 7, + 3, + 0 + ], + [ + 0, + 0, + 7, + 9, + 0, + 0, + 5, + 2, + 6 + ], + [ + 3, + 5, + 6, + 0, + 0, + 0, + 9, + 4, + 0 + ], + [ + 9, + 6, + 0, + 2, + 4, + 0, + 1, + 7, + 3 + ], + [ + 7, + 0, + 0, + 0, + 9, + 0, + 8, + 6, + 2 + ], + [ + 2, + 0, + 0, + 0, + 0, + 6, + 0, + 5, + 9 + ], + [ + 5, + 7, + 3, + 6, + 1, + 9, + 2, + 8, + 4 + ], + [ + 0, + 0, + 0, + 0, + 5, + 0, + 0, + 0, + 7 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5 + ] + ], + "solution": [ + [ + 4, + 2, + 9, + 5, + 6, + 8, + 7, + 3, + 1 + ], + [ + 1, + 8, + 7, + 9, + 3, + 4, + 5, + 2, + 6 + ], + [ + 3, + 5, + 6, + 1, + 2, + 7, + 9, + 4, + 8 + ], + [ + 9, + 6, + 8, + 2, + 4, + 5, + 1, + 7, + 3 + ], + [ + 7, + 4, + 5, + 3, + 9, + 1, + 8, + 6, + 2 + ], + [ + 2, + 3, + 1, + 7, + 8, + 6, + 4, + 5, + 9 + ], + [ + 5, + 7, + 3, + 6, + 1, + 9, + 2, + 8, + 4 + ], + [ + 6, + 1, + 4, + 8, + 5, + 2, + 3, + 9, + 7 + ], + [ + 8, + 9, + 2, + 4, + 7, + 3, + 6, + 1, + 5 + ] + ] + }, + { + "id": 21, + "board": [ + [ + 0, + 5, + 4, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 3, + 9, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 9, + 8, + 7, + 5, + 6, + 4, + 3, + 1 + ], + [ + 3, + 6, + 0, + 8, + 7, + 1, + 0, + 0, + 0 + ], + [ + 9, + 7, + 0, + 0, + 0, + 0, + 1, + 8, + 3 + ], + [ + 4, + 8, + 1, + 3, + 9, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 5, + 6, + 0, + 3, + 0, + 0 + ], + [ + 0, + 4, + 0, + 2, + 0, + 0, + 5, + 0, + 0 + ], + [ + 5, + 3, + 6, + 4, + 1, + 7, + 8, + 0, + 0 + ] + ], + "solution": [ + [ + 6, + 5, + 4, + 1, + 2, + 3, + 7, + 9, + 8 + ], + [ + 7, + 1, + 3, + 9, + 8, + 4, + 2, + 5, + 6 + ], + [ + 2, + 9, + 8, + 7, + 5, + 6, + 4, + 3, + 1 + ], + [ + 3, + 6, + 2, + 8, + 7, + 1, + 9, + 4, + 5 + ], + [ + 9, + 7, + 5, + 6, + 4, + 2, + 1, + 8, + 3 + ], + [ + 4, + 8, + 1, + 3, + 9, + 5, + 6, + 7, + 2 + ], + [ + 8, + 2, + 7, + 5, + 6, + 9, + 3, + 1, + 4 + ], + [ + 1, + 4, + 9, + 2, + 3, + 8, + 5, + 6, + 7 + ], + [ + 5, + 3, + 6, + 4, + 1, + 7, + 8, + 2, + 9 + ] + ] + }, + { + "id": 22, + "board": [ + [ + 0, + 0, + 0, + 3, + 8, + 0, + 6, + 4, + 7 + ], + [ + 0, + 0, + 5, + 4, + 0, + 7, + 8, + 9, + 0 + ], + [ + 8, + 4, + 7, + 0, + 9, + 6, + 2, + 5, + 3 + ], + [ + 7, + 8, + 0, + 5, + 0, + 3, + 1, + 2, + 9 + ], + [ + 0, + 0, + 0, + 7, + 6, + 9, + 0, + 0, + 5 + ], + [ + 0, + 0, + 0, + 2, + 1, + 0, + 7, + 6, + 0 + ], + [ + 0, + 0, + 8, + 6, + 7, + 4, + 9, + 0, + 0 + ], + [ + 0, + 0, + 0, + 9, + 0, + 1, + 5, + 7, + 8 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 2, + 9, + 3, + 8, + 5, + 6, + 4, + 7 + ], + [ + 6, + 3, + 5, + 4, + 2, + 7, + 8, + 9, + 1 + ], + [ + 8, + 4, + 7, + 1, + 9, + 6, + 2, + 5, + 3 + ], + [ + 7, + 8, + 6, + 5, + 4, + 3, + 1, + 2, + 9 + ], + [ + 2, + 1, + 4, + 7, + 6, + 9, + 3, + 8, + 5 + ], + [ + 5, + 9, + 3, + 2, + 1, + 8, + 7, + 6, + 4 + ], + [ + 3, + 5, + 8, + 6, + 7, + 4, + 9, + 1, + 2 + ], + [ + 4, + 6, + 2, + 9, + 3, + 1, + 5, + 7, + 8 + ], + [ + 9, + 7, + 1, + 8, + 5, + 2, + 4, + 3, + 6 + ] + ] + }, + { + "id": 23, + "board": [ + [ + 1, + 0, + 4, + 6, + 3, + 0, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 4, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 8, + 2, + 7, + 1, + 0, + 4 + ], + [ + 0, + 1, + 0, + 0, + 4, + 6, + 0, + 7, + 0 + ], + [ + 4, + 0, + 0, + 1, + 8, + 2, + 6, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 7, + 3, + 4, + 1, + 0 + ], + [ + 0, + 0, + 0, + 2, + 9, + 8, + 0, + 4, + 0 + ], + [ + 0, + 0, + 0, + 3, + 6, + 4, + 5, + 2, + 0 + ], + [ + 3, + 4, + 2, + 7, + 5, + 1, + 8, + 9, + 6 + ] + ], + "solution": [ + [ + 1, + 2, + 4, + 6, + 3, + 5, + 7, + 8, + 9 + ], + [ + 7, + 6, + 8, + 4, + 1, + 9, + 2, + 5, + 3 + ], + [ + 5, + 3, + 9, + 8, + 2, + 7, + 1, + 6, + 4 + ], + [ + 8, + 1, + 3, + 5, + 4, + 6, + 9, + 7, + 2 + ], + [ + 4, + 9, + 7, + 1, + 8, + 2, + 6, + 3, + 5 + ], + [ + 2, + 5, + 6, + 9, + 7, + 3, + 4, + 1, + 8 + ], + [ + 6, + 7, + 5, + 2, + 9, + 8, + 3, + 4, + 1 + ], + [ + 9, + 8, + 1, + 3, + 6, + 4, + 5, + 2, + 7 + ], + [ + 3, + 4, + 2, + 7, + 5, + 1, + 8, + 9, + 6 + ] + ] + }, + { + "id": 24, + "board": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 2, + 0, + 6, + 1, + 0, + 8, + 0, + 0, + 4 + ], + [ + 0, + 1, + 7, + 0, + 0, + 0, + 8, + 0, + 6 + ], + [ + 6, + 8, + 4, + 0, + 0, + 7, + 0, + 0, + 0 + ], + [ + 7, + 5, + 9, + 6, + 0, + 1, + 0, + 4, + 0 + ], + [ + 1, + 2, + 3, + 0, + 0, + 4, + 7, + 6, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 3, + 8, + 0 + ], + [ + 0, + 6, + 8, + 7, + 1, + 3, + 4, + 0, + 9 + ], + [ + 3, + 7, + 2, + 0, + 4, + 9, + 6, + 1, + 5 + ] + ], + "solution": [ + [ + 8, + 4, + 5, + 3, + 7, + 6, + 1, + 9, + 2 + ], + [ + 2, + 3, + 6, + 1, + 9, + 8, + 5, + 7, + 4 + ], + [ + 9, + 1, + 7, + 4, + 2, + 5, + 8, + 3, + 6 + ], + [ + 6, + 8, + 4, + 2, + 3, + 7, + 9, + 5, + 1 + ], + [ + 7, + 5, + 9, + 6, + 8, + 1, + 2, + 4, + 3 + ], + [ + 1, + 2, + 3, + 9, + 5, + 4, + 7, + 6, + 8 + ], + [ + 4, + 9, + 1, + 5, + 6, + 2, + 3, + 8, + 7 + ], + [ + 5, + 6, + 8, + 7, + 1, + 3, + 4, + 2, + 9 + ], + [ + 3, + 7, + 2, + 8, + 4, + 9, + 6, + 1, + 5 + ] + ] + }, + { + "id": 25, + "board": [ + [ + 0, + 0, + 4, + 8, + 0, + 5, + 3, + 0, + 7 + ], + [ + 0, + 0, + 0, + 3, + 0, + 4, + 0, + 0, + 0 + ], + [ + 5, + 3, + 8, + 6, + 2, + 7, + 1, + 0, + 9 + ], + [ + 9, + 0, + 0, + 5, + 6, + 0, + 0, + 0, + 0 + ], + [ + 6, + 8, + 5, + 7, + 4, + 1, + 2, + 9, + 3 + ], + [ + 0, + 4, + 0, + 9, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 7, + 0, + 0, + 3, + 9, + 6, + 5, + 0 + ], + [ + 4, + 5, + 6, + 1, + 7, + 8, + 9, + 3, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 2, + 4, + 8, + 9, + 5, + 3, + 6, + 7 + ], + [ + 7, + 6, + 9, + 3, + 1, + 4, + 8, + 2, + 5 + ], + [ + 5, + 3, + 8, + 6, + 2, + 7, + 1, + 4, + 9 + ], + [ + 9, + 1, + 2, + 5, + 6, + 3, + 4, + 7, + 8 + ], + [ + 6, + 8, + 5, + 7, + 4, + 1, + 2, + 9, + 3 + ], + [ + 3, + 4, + 7, + 9, + 8, + 2, + 5, + 1, + 6 + ], + [ + 8, + 7, + 1, + 2, + 3, + 9, + 6, + 5, + 4 + ], + [ + 4, + 5, + 6, + 1, + 7, + 8, + 9, + 3, + 2 + ], + [ + 2, + 9, + 3, + 4, + 5, + 6, + 7, + 8, + 1 + ] + ] + }, + { + "id": 26, + "board": [ + [ + 5, + 3, + 7, + 1, + 8, + 0, + 9, + 0, + 0 + ], + [ + 0, + 9, + 1, + 0, + 0, + 0, + 3, + 7, + 0 + ], + [ + 6, + 4, + 2, + 3, + 7, + 9, + 5, + 1, + 8 + ], + [ + 4, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 9, + 7, + 0, + 8, + 1, + 2, + 0, + 5, + 0 + ], + [ + 2, + 1, + 0, + 0, + 0, + 3, + 0, + 0, + 0 + ], + [ + 7, + 2, + 0, + 0, + 3, + 1, + 0, + 0, + 5 + ], + [ + 3, + 6, + 0, + 9, + 0, + 8, + 1, + 0, + 7 + ], + [ + 1, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 3, + 7, + 1, + 8, + 4, + 9, + 2, + 6 + ], + [ + 8, + 9, + 1, + 2, + 6, + 5, + 3, + 7, + 4 + ], + [ + 6, + 4, + 2, + 3, + 7, + 9, + 5, + 1, + 8 + ], + [ + 4, + 5, + 3, + 7, + 9, + 6, + 2, + 8, + 1 + ], + [ + 9, + 7, + 6, + 8, + 1, + 2, + 4, + 5, + 3 + ], + [ + 2, + 1, + 8, + 4, + 5, + 3, + 7, + 6, + 9 + ], + [ + 7, + 2, + 4, + 6, + 3, + 1, + 8, + 9, + 5 + ], + [ + 3, + 6, + 5, + 9, + 2, + 8, + 1, + 4, + 7 + ], + [ + 1, + 8, + 9, + 5, + 4, + 7, + 6, + 3, + 2 + ] + ] + }, + { + "id": 27, + "board": [ + [ + 0, + 8, + 6, + 0, + 0, + 0, + 9, + 0, + 5 + ], + [ + 9, + 5, + 2, + 0, + 6, + 1, + 8, + 4, + 3 + ], + [ + 7, + 3, + 0, + 5, + 8, + 9, + 0, + 6, + 1 + ], + [ + 0, + 0, + 5, + 8, + 7, + 0, + 1, + 3, + 0 + ], + [ + 8, + 1, + 7, + 0, + 0, + 0, + 0, + 5, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 5, + 0, + 0, + 7 + ], + [ + 3, + 7, + 0, + 6, + 0, + 0, + 5, + 0, + 0 + ], + [ + 0, + 0, + 8, + 1, + 0, + 0, + 0, + 2, + 6 + ], + [ + 6, + 2, + 1, + 0, + 0, + 0, + 7, + 9, + 0 + ] + ], + "solution": [ + [ + 1, + 8, + 6, + 3, + 4, + 2, + 9, + 7, + 5 + ], + [ + 9, + 5, + 2, + 7, + 6, + 1, + 8, + 4, + 3 + ], + [ + 7, + 3, + 4, + 5, + 8, + 9, + 2, + 6, + 1 + ], + [ + 2, + 6, + 5, + 8, + 7, + 4, + 1, + 3, + 9 + ], + [ + 8, + 1, + 7, + 9, + 3, + 6, + 4, + 5, + 2 + ], + [ + 4, + 9, + 3, + 2, + 1, + 5, + 6, + 8, + 7 + ], + [ + 3, + 7, + 9, + 6, + 2, + 8, + 5, + 1, + 4 + ], + [ + 5, + 4, + 8, + 1, + 9, + 7, + 3, + 2, + 6 + ], + [ + 6, + 2, + 1, + 4, + 5, + 3, + 7, + 9, + 8 + ] + ] + }, + { + "id": 28, + "board": [ + [ + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 5, + 0 + ], + [ + 0, + 2, + 0, + 0, + 7, + 5, + 0, + 6, + 8 + ], + [ + 6, + 0, + 5, + 0, + 9, + 0, + 0, + 0, + 7 + ], + [ + 2, + 9, + 8, + 7, + 1, + 3, + 5, + 4, + 6 + ], + [ + 0, + 0, + 6, + 0, + 4, + 0, + 7, + 2, + 3 + ], + [ + 3, + 4, + 7, + 5, + 2, + 6, + 8, + 9, + 1 + ], + [ + 8, + 0, + 0, + 6, + 3, + 0, + 0, + 0, + 0 + ], + [ + 0, + 3, + 0, + 0, + 5, + 0, + 6, + 8, + 0 + ], + [ + 0, + 6, + 1, + 0, + 8, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 9, + 7, + 3, + 4, + 6, + 8, + 1, + 5, + 2 + ], + [ + 1, + 2, + 4, + 3, + 7, + 5, + 9, + 6, + 8 + ], + [ + 6, + 8, + 5, + 2, + 9, + 1, + 4, + 3, + 7 + ], + [ + 2, + 9, + 8, + 7, + 1, + 3, + 5, + 4, + 6 + ], + [ + 5, + 1, + 6, + 8, + 4, + 9, + 7, + 2, + 3 + ], + [ + 3, + 4, + 7, + 5, + 2, + 6, + 8, + 9, + 1 + ], + [ + 8, + 5, + 9, + 6, + 3, + 7, + 2, + 1, + 4 + ], + [ + 7, + 3, + 2, + 1, + 5, + 4, + 6, + 8, + 9 + ], + [ + 4, + 6, + 1, + 9, + 8, + 2, + 3, + 7, + 5 + ] + ] + }, + { + "id": 29, + "board": [ + [ + 0, + 0, + 0, + 2, + 1, + 0, + 0, + 0, + 7 + ], + [ + 0, + 0, + 0, + 9, + 4, + 6, + 3, + 8, + 1 + ], + [ + 9, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 4 + ], + [ + 0, + 0, + 0, + 4, + 0, + 0, + 1, + 9, + 3 + ], + [ + 0, + 0, + 4, + 6, + 9, + 1, + 8, + 7, + 5 + ], + [ + 1, + 8, + 9, + 3, + 0, + 0, + 4, + 2, + 6 + ], + [ + 0, + 0, + 0, + 7, + 6, + 0, + 5, + 1, + 0 + ], + [ + 0, + 0, + 1, + 5, + 0, + 9, + 6, + 4, + 0 + ], + [ + 5, + 0, + 0, + 1, + 0, + 0, + 7, + 3, + 0 + ] + ], + "solution": [ + [ + 6, + 4, + 8, + 2, + 1, + 3, + 9, + 5, + 7 + ], + [ + 2, + 5, + 7, + 9, + 4, + 6, + 3, + 8, + 1 + ], + [ + 9, + 1, + 3, + 8, + 5, + 7, + 2, + 6, + 4 + ], + [ + 7, + 6, + 5, + 4, + 8, + 2, + 1, + 9, + 3 + ], + [ + 3, + 2, + 4, + 6, + 9, + 1, + 8, + 7, + 5 + ], + [ + 1, + 8, + 9, + 3, + 7, + 5, + 4, + 2, + 6 + ], + [ + 4, + 3, + 2, + 7, + 6, + 8, + 5, + 1, + 9 + ], + [ + 8, + 7, + 1, + 5, + 3, + 9, + 6, + 4, + 2 + ], + [ + 5, + 9, + 6, + 1, + 2, + 4, + 7, + 3, + 8 + ] + ] + }, + { + "id": 30, + "board": [ + [ + 6, + 3, + 0, + 9, + 4, + 1, + 0, + 0, + 0 + ], + [ + 4, + 9, + 0, + 2, + 0, + 5, + 3, + 6, + 1 + ], + [ + 0, + 0, + 1, + 0, + 0, + 6, + 4, + 9, + 0 + ], + [ + 0, + 0, + 0, + 6, + 0, + 0, + 9, + 3, + 4 + ], + [ + 9, + 4, + 0, + 0, + 0, + 0, + 6, + 7, + 5 + ], + [ + 3, + 7, + 6, + 5, + 9, + 4, + 1, + 0, + 0 + ], + [ + 0, + 0, + 4, + 0, + 6, + 9, + 0, + 1, + 3 + ], + [ + 0, + 6, + 3, + 4, + 0, + 0, + 0, + 0, + 9 + ], + [ + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 4, + 6 + ] + ], + "solution": [ + [ + 6, + 3, + 8, + 9, + 4, + 1, + 2, + 5, + 7 + ], + [ + 4, + 9, + 7, + 2, + 8, + 5, + 3, + 6, + 1 + ], + [ + 2, + 5, + 1, + 3, + 7, + 6, + 4, + 9, + 8 + ], + [ + 8, + 1, + 5, + 6, + 2, + 7, + 9, + 3, + 4 + ], + [ + 9, + 4, + 2, + 8, + 1, + 3, + 6, + 7, + 5 + ], + [ + 3, + 7, + 6, + 5, + 9, + 4, + 1, + 8, + 2 + ], + [ + 5, + 2, + 4, + 7, + 6, + 9, + 8, + 1, + 3 + ], + [ + 1, + 6, + 3, + 4, + 5, + 8, + 7, + 2, + 9 + ], + [ + 7, + 8, + 9, + 1, + 3, + 2, + 5, + 4, + 6 + ] + ] + }, + { + "id": 31, + "board": [ + [ + 0, + 0, + 0, + 0, + 7, + 9, + 3, + 1, + 5 + ], + [ + 7, + 0, + 3, + 0, + 8, + 0, + 4, + 9, + 6 + ], + [ + 0, + 0, + 5, + 3, + 4, + 0, + 7, + 8, + 2 + ], + [ + 0, + 0, + 7, + 0, + 6, + 0, + 0, + 4, + 3 + ], + [ + 3, + 4, + 6, + 9, + 5, + 7, + 8, + 2, + 1 + ], + [ + 0, + 5, + 0, + 0, + 0, + 4, + 6, + 0, + 9 + ], + [ + 0, + 3, + 0, + 7, + 0, + 0, + 0, + 0, + 4 + ], + [ + 0, + 7, + 0, + 0, + 2, + 0, + 1, + 3, + 8 + ], + [ + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 7 + ] + ], + "solution": [ + [ + 4, + 6, + 8, + 2, + 7, + 9, + 3, + 1, + 5 + ], + [ + 7, + 2, + 3, + 5, + 8, + 1, + 4, + 9, + 6 + ], + [ + 1, + 9, + 5, + 3, + 4, + 6, + 7, + 8, + 2 + ], + [ + 9, + 1, + 7, + 8, + 6, + 2, + 5, + 4, + 3 + ], + [ + 3, + 4, + 6, + 9, + 5, + 7, + 8, + 2, + 1 + ], + [ + 8, + 5, + 2, + 1, + 3, + 4, + 6, + 7, + 9 + ], + [ + 5, + 3, + 1, + 7, + 9, + 8, + 2, + 6, + 4 + ], + [ + 6, + 7, + 9, + 4, + 2, + 5, + 1, + 3, + 8 + ], + [ + 2, + 8, + 4, + 6, + 1, + 3, + 9, + 5, + 7 + ] + ] + }, + { + "id": 32, + "board": [ + [ + 1, + 5, + 0, + 6, + 4, + 0, + 7, + 2, + 0 + ], + [ + 0, + 0, + 0, + 2, + 7, + 0, + 1, + 5, + 6 + ], + [ + 6, + 2, + 7, + 0, + 0, + 0, + 4, + 3, + 0 + ], + [ + 0, + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 6, + 9, + 0, + 0, + 0, + 4, + 0 + ], + [ + 3, + 4, + 2, + 8, + 6, + 5, + 9, + 1, + 7 + ], + [ + 5, + 6, + 9, + 7, + 1, + 4, + 2, + 8, + 3 + ], + [ + 8, + 7, + 0, + 3, + 0, + 0, + 5, + 6, + 4 + ] + ], + "solution": [ + [ + 1, + 5, + 3, + 6, + 4, + 8, + 7, + 2, + 9 + ], + [ + 4, + 9, + 8, + 2, + 7, + 3, + 1, + 5, + 6 + ], + [ + 6, + 2, + 7, + 1, + 5, + 9, + 4, + 3, + 8 + ], + [ + 9, + 3, + 5, + 4, + 8, + 1, + 6, + 7, + 2 + ], + [ + 7, + 8, + 4, + 5, + 2, + 6, + 3, + 9, + 1 + ], + [ + 2, + 1, + 6, + 9, + 3, + 7, + 8, + 4, + 5 + ], + [ + 3, + 4, + 2, + 8, + 6, + 5, + 9, + 1, + 7 + ], + [ + 5, + 6, + 9, + 7, + 1, + 4, + 2, + 8, + 3 + ], + [ + 8, + 7, + 1, + 3, + 9, + 2, + 5, + 6, + 4 + ] + ] + }, + { + "id": 33, + "board": [ + [ + 8, + 5, + 7, + 3, + 6, + 1, + 9, + 2, + 4 + ], + [ + 0, + 2, + 0, + 0, + 0, + 9, + 0, + 1, + 0 + ], + [ + 1, + 3, + 9, + 2, + 0, + 4, + 0, + 6, + 5 + ], + [ + 0, + 0, + 0, + 7, + 2, + 3, + 5, + 8, + 9 + ], + [ + 3, + 7, + 8, + 6, + 9, + 5, + 1, + 4, + 2 + ], + [ + 0, + 9, + 0, + 1, + 4, + 8, + 6, + 3, + 7 + ], + [ + 9, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 8, + 5, + 7, + 3, + 6, + 1, + 9, + 2, + 4 + ], + [ + 4, + 2, + 6, + 5, + 7, + 9, + 3, + 1, + 8 + ], + [ + 1, + 3, + 9, + 2, + 8, + 4, + 7, + 6, + 5 + ], + [ + 6, + 1, + 4, + 7, + 2, + 3, + 5, + 8, + 9 + ], + [ + 3, + 7, + 8, + 6, + 9, + 5, + 1, + 4, + 2 + ], + [ + 2, + 9, + 5, + 1, + 4, + 8, + 6, + 3, + 7 + ], + [ + 9, + 6, + 2, + 4, + 3, + 7, + 8, + 5, + 1 + ], + [ + 7, + 4, + 1, + 8, + 5, + 6, + 2, + 9, + 3 + ], + [ + 5, + 8, + 3, + 9, + 1, + 2, + 4, + 7, + 6 + ] + ] + }, + { + "id": 34, + "board": [ + [ + 0, + 7, + 0, + 4, + 6, + 5, + 0, + 2, + 0 + ], + [ + 0, + 9, + 4, + 2, + 1, + 3, + 0, + 0, + 7 + ], + [ + 0, + 2, + 0, + 7, + 0, + 0, + 0, + 0, + 0 + ], + [ + 9, + 0, + 7, + 0, + 0, + 4, + 2, + 0, + 0 + ], + [ + 4, + 1, + 6, + 9, + 0, + 0, + 0, + 7, + 3 + ], + [ + 2, + 0, + 0, + 0, + 7, + 1, + 9, + 4, + 0 + ], + [ + 0, + 4, + 9, + 0, + 3, + 6, + 7, + 5, + 2 + ], + [ + 0, + 0, + 2, + 0, + 4, + 9, + 6, + 0, + 8 + ], + [ + 0, + 6, + 0, + 0, + 2, + 7, + 0, + 9, + 0 + ] + ], + "solution": [ + [ + 3, + 7, + 8, + 4, + 6, + 5, + 1, + 2, + 9 + ], + [ + 6, + 9, + 4, + 2, + 1, + 3, + 5, + 8, + 7 + ], + [ + 1, + 2, + 5, + 7, + 9, + 8, + 4, + 3, + 6 + ], + [ + 9, + 5, + 7, + 3, + 8, + 4, + 2, + 6, + 1 + ], + [ + 4, + 1, + 6, + 9, + 5, + 2, + 8, + 7, + 3 + ], + [ + 2, + 8, + 3, + 6, + 7, + 1, + 9, + 4, + 5 + ], + [ + 8, + 4, + 9, + 1, + 3, + 6, + 7, + 5, + 2 + ], + [ + 7, + 3, + 2, + 5, + 4, + 9, + 6, + 1, + 8 + ], + [ + 5, + 6, + 1, + 8, + 2, + 7, + 3, + 9, + 4 + ] + ] + }, + { + "id": 35, + "board": [ + [ + 3, + 1, + 6, + 9, + 8, + 4, + 7, + 2, + 5 + ], + [ + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 4 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 8 + ], + [ + 6, + 0, + 0, + 0, + 7, + 0, + 3, + 4, + 9 + ], + [ + 0, + 2, + 9, + 0, + 0, + 0, + 0, + 7, + 6 + ], + [ + 7, + 0, + 0, + 0, + 9, + 6, + 0, + 1, + 2 + ], + [ + 0, + 6, + 4, + 0, + 0, + 0, + 9, + 8, + 3 + ], + [ + 2, + 0, + 0, + 6, + 3, + 9, + 4, + 5, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 8, + 2, + 6, + 7 + ] + ], + "solution": [ + [ + 3, + 1, + 6, + 9, + 8, + 4, + 7, + 2, + 5 + ], + [ + 8, + 5, + 2, + 3, + 1, + 7, + 6, + 9, + 4 + ], + [ + 4, + 9, + 7, + 2, + 6, + 5, + 1, + 3, + 8 + ], + [ + 6, + 8, + 5, + 1, + 7, + 2, + 3, + 4, + 9 + ], + [ + 1, + 2, + 9, + 5, + 4, + 3, + 8, + 7, + 6 + ], + [ + 7, + 4, + 3, + 8, + 9, + 6, + 5, + 1, + 2 + ], + [ + 5, + 6, + 4, + 7, + 2, + 1, + 9, + 8, + 3 + ], + [ + 2, + 7, + 8, + 6, + 3, + 9, + 4, + 5, + 1 + ], + [ + 9, + 3, + 1, + 4, + 5, + 8, + 2, + 6, + 7 + ] + ] + }, + { + "id": 36, + "board": [ + [ + 3, + 7, + 8, + 0, + 0, + 6, + 5, + 9, + 1 + ], + [ + 1, + 6, + 9, + 7, + 0, + 0, + 4, + 3, + 2 + ], + [ + 5, + 2, + 4, + 0, + 1, + 0, + 6, + 7, + 8 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 1, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 2, + 0, + 0, + 1, + 0, + 0, + 9, + 0, + 0 + ], + [ + 6, + 9, + 1, + 0, + 0, + 0, + 3, + 8, + 4 + ], + [ + 0, + 3, + 5, + 6, + 0, + 1, + 7, + 2, + 9 + ], + [ + 7, + 0, + 2, + 0, + 0, + 0, + 1, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 7, + 8, + 4, + 2, + 6, + 5, + 9, + 1 + ], + [ + 1, + 6, + 9, + 7, + 5, + 8, + 4, + 3, + 2 + ], + [ + 5, + 2, + 4, + 3, + 1, + 9, + 6, + 7, + 8 + ], + [ + 4, + 5, + 3, + 2, + 9, + 7, + 8, + 1, + 6 + ], + [ + 9, + 1, + 6, + 8, + 3, + 4, + 2, + 5, + 7 + ], + [ + 2, + 8, + 7, + 1, + 6, + 5, + 9, + 4, + 3 + ], + [ + 6, + 9, + 1, + 5, + 7, + 2, + 3, + 8, + 4 + ], + [ + 8, + 3, + 5, + 6, + 4, + 1, + 7, + 2, + 9 + ], + [ + 7, + 4, + 2, + 9, + 8, + 3, + 1, + 6, + 5 + ] + ] + }, + { + "id": 37, + "board": [ + [ + 1, + 3, + 6, + 0, + 0, + 0, + 8, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 3, + 0, + 0 + ], + [ + 8, + 0, + 0, + 6, + 0, + 3, + 1, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 6, + 0, + 8, + 0 + ], + [ + 3, + 8, + 2, + 0, + 7, + 4, + 6, + 9, + 1 + ], + [ + 6, + 0, + 4, + 0, + 0, + 0, + 5, + 7, + 0 + ], + [ + 0, + 6, + 1, + 0, + 3, + 9, + 2, + 0, + 8 + ], + [ + 0, + 7, + 3, + 0, + 0, + 5, + 9, + 1, + 6 + ], + [ + 9, + 0, + 8, + 0, + 6, + 1, + 7, + 3, + 0 + ] + ], + "solution": [ + [ + 1, + 3, + 6, + 4, + 9, + 2, + 8, + 5, + 7 + ], + [ + 4, + 2, + 5, + 1, + 8, + 7, + 3, + 6, + 9 + ], + [ + 8, + 9, + 7, + 6, + 5, + 3, + 1, + 2, + 4 + ], + [ + 7, + 5, + 9, + 3, + 1, + 6, + 4, + 8, + 2 + ], + [ + 3, + 8, + 2, + 5, + 7, + 4, + 6, + 9, + 1 + ], + [ + 6, + 1, + 4, + 9, + 2, + 8, + 5, + 7, + 3 + ], + [ + 5, + 6, + 1, + 7, + 3, + 9, + 2, + 4, + 8 + ], + [ + 2, + 7, + 3, + 8, + 4, + 5, + 9, + 1, + 6 + ], + [ + 9, + 4, + 8, + 2, + 6, + 1, + 7, + 3, + 5 + ] + ] + }, + { + "id": 38, + "board": [ + [ + 4, + 0, + 0, + 8, + 0, + 5, + 6, + 0, + 1 + ], + [ + 5, + 8, + 0, + 1, + 3, + 4, + 0, + 7, + 9 + ], + [ + 0, + 0, + 0, + 0, + 6, + 9, + 0, + 8, + 0 + ], + [ + 0, + 0, + 1, + 0, + 4, + 8, + 0, + 0, + 6 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 9, + 0, + 0 + ], + [ + 0, + 4, + 0, + 3, + 9, + 7, + 1, + 0, + 8 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 5, + 6, + 2 + ], + [ + 3, + 6, + 7, + 9, + 0, + 0, + 8, + 0, + 4 + ], + [ + 0, + 5, + 4, + 0, + 8, + 1, + 7, + 9, + 3 + ] + ], + "solution": [ + [ + 4, + 7, + 9, + 8, + 2, + 5, + 6, + 3, + 1 + ], + [ + 5, + 8, + 6, + 1, + 3, + 4, + 2, + 7, + 9 + ], + [ + 1, + 2, + 3, + 7, + 6, + 9, + 4, + 8, + 5 + ], + [ + 7, + 9, + 1, + 5, + 4, + 8, + 3, + 2, + 6 + ], + [ + 8, + 3, + 5, + 2, + 1, + 6, + 9, + 4, + 7 + ], + [ + 6, + 4, + 2, + 3, + 9, + 7, + 1, + 5, + 8 + ], + [ + 9, + 1, + 8, + 4, + 7, + 3, + 5, + 6, + 2 + ], + [ + 3, + 6, + 7, + 9, + 5, + 2, + 8, + 1, + 4 + ], + [ + 2, + 5, + 4, + 6, + 8, + 1, + 7, + 9, + 3 + ] + ] + }, + { + "id": 39, + "board": [ + [ + 6, + 2, + 4, + 0, + 0, + 0, + 0, + 8, + 0 + ], + [ + 1, + 7, + 9, + 0, + 0, + 0, + 0, + 0, + 3 + ], + [ + 3, + 5, + 8, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 7, + 8, + 0, + 0 + ], + [ + 7, + 8, + 0, + 0, + 0, + 0, + 0, + 3, + 0 + ], + [ + 0, + 6, + 0, + 0, + 0, + 0, + 7, + 0, + 5 + ], + [ + 8, + 9, + 6, + 0, + 0, + 1, + 3, + 5, + 2 + ], + [ + 2, + 3, + 1, + 0, + 0, + 5, + 6, + 7, + 4 + ], + [ + 5, + 4, + 7, + 3, + 2, + 6, + 9, + 1, + 8 + ] + ], + "solution": [ + [ + 6, + 2, + 4, + 5, + 9, + 3, + 1, + 8, + 7 + ], + [ + 1, + 7, + 9, + 8, + 6, + 4, + 5, + 2, + 3 + ], + [ + 3, + 5, + 8, + 7, + 1, + 2, + 4, + 6, + 9 + ], + [ + 4, + 1, + 3, + 2, + 5, + 7, + 8, + 9, + 6 + ], + [ + 7, + 8, + 5, + 6, + 4, + 9, + 2, + 3, + 1 + ], + [ + 9, + 6, + 2, + 1, + 3, + 8, + 7, + 4, + 5 + ], + [ + 8, + 9, + 6, + 4, + 7, + 1, + 3, + 5, + 2 + ], + [ + 2, + 3, + 1, + 9, + 8, + 5, + 6, + 7, + 4 + ], + [ + 5, + 4, + 7, + 3, + 2, + 6, + 9, + 1, + 8 + ] + ] + }, + { + "id": 40, + "board": [ + [ + 0, + 0, + 1, + 0, + 8, + 0, + 0, + 0, + 0 + ], + [ + 5, + 3, + 2, + 7, + 0, + 0, + 8, + 6, + 9 + ], + [ + 0, + 0, + 8, + 5, + 2, + 0, + 1, + 3, + 4 + ], + [ + 6, + 1, + 7, + 9, + 5, + 0, + 4, + 2, + 3 + ], + [ + 0, + 9, + 3, + 0, + 0, + 7, + 5, + 0, + 8 + ], + [ + 8, + 0, + 0, + 1, + 3, + 2, + 7, + 9, + 6 + ], + [ + 3, + 8, + 9, + 2, + 7, + 5, + 6, + 4, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 6, + 1, + 3, + 8, + 9, + 2, + 5, + 7 + ], + [ + 5, + 3, + 2, + 7, + 1, + 4, + 8, + 6, + 9 + ], + [ + 9, + 7, + 8, + 5, + 2, + 6, + 1, + 3, + 4 + ], + [ + 6, + 1, + 7, + 9, + 5, + 8, + 4, + 2, + 3 + ], + [ + 2, + 9, + 3, + 4, + 6, + 7, + 5, + 1, + 8 + ], + [ + 8, + 4, + 5, + 1, + 3, + 2, + 7, + 9, + 6 + ], + [ + 3, + 8, + 9, + 2, + 7, + 5, + 6, + 4, + 1 + ], + [ + 1, + 2, + 6, + 8, + 4, + 3, + 9, + 7, + 5 + ], + [ + 7, + 5, + 4, + 6, + 9, + 1, + 3, + 8, + 2 + ] + ] + }, + { + "id": 41, + "board": [ + [ + 3, + 9, + 2, + 6, + 5, + 7, + 4, + 8, + 1 + ], + [ + 0, + 5, + 1, + 0, + 9, + 0, + 7, + 3, + 6 + ], + [ + 0, + 6, + 7, + 0, + 0, + 3, + 5, + 0, + 0 + ], + [ + 0, + 1, + 8, + 3, + 0, + 0, + 6, + 7, + 0 + ], + [ + 6, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 5, + 0, + 0, + 6, + 0, + 0, + 0 + ], + [ + 5, + 4, + 3, + 0, + 0, + 0, + 2, + 0, + 8 + ], + [ + 1, + 2, + 6, + 4, + 3, + 8, + 0, + 0, + 7 + ], + [ + 7, + 8, + 9, + 5, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 9, + 2, + 6, + 5, + 7, + 4, + 8, + 1 + ], + [ + 8, + 5, + 1, + 2, + 9, + 4, + 7, + 3, + 6 + ], + [ + 4, + 6, + 7, + 1, + 8, + 3, + 5, + 2, + 9 + ], + [ + 2, + 1, + 8, + 3, + 4, + 9, + 6, + 7, + 5 + ], + [ + 6, + 3, + 4, + 7, + 1, + 5, + 8, + 9, + 2 + ], + [ + 9, + 7, + 5, + 8, + 2, + 6, + 1, + 4, + 3 + ], + [ + 5, + 4, + 3, + 9, + 7, + 1, + 2, + 6, + 8 + ], + [ + 1, + 2, + 6, + 4, + 3, + 8, + 9, + 5, + 7 + ], + [ + 7, + 8, + 9, + 5, + 6, + 2, + 3, + 1, + 4 + ] + ] + }, + { + "id": 42, + "board": [ + [ + 0, + 9, + 0, + 0, + 0, + 4, + 0, + 0, + 6 + ], + [ + 4, + 2, + 5, + 6, + 0, + 8, + 0, + 7, + 0 + ], + [ + 0, + 6, + 7, + 0, + 0, + 9, + 0, + 0, + 4 + ], + [ + 0, + 7, + 0, + 8, + 9, + 0, + 0, + 4, + 5 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 8 + ], + [ + 0, + 0, + 8, + 0, + 0, + 0, + 7, + 0, + 0 + ], + [ + 5, + 1, + 4, + 2, + 8, + 7, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 1, + 6, + 3, + 4, + 5, + 2 + ], + [ + 2, + 3, + 6, + 9, + 4, + 5, + 1, + 8, + 7 + ] + ], + "solution": [ + [ + 3, + 9, + 1, + 5, + 7, + 4, + 8, + 2, + 6 + ], + [ + 4, + 2, + 5, + 6, + 1, + 8, + 9, + 7, + 3 + ], + [ + 8, + 6, + 7, + 3, + 2, + 9, + 5, + 1, + 4 + ], + [ + 1, + 7, + 2, + 8, + 9, + 6, + 3, + 4, + 5 + ], + [ + 9, + 4, + 3, + 7, + 5, + 1, + 2, + 6, + 8 + ], + [ + 6, + 5, + 8, + 4, + 3, + 2, + 7, + 9, + 1 + ], + [ + 5, + 1, + 4, + 2, + 8, + 7, + 6, + 3, + 9 + ], + [ + 7, + 8, + 9, + 1, + 6, + 3, + 4, + 5, + 2 + ], + [ + 2, + 3, + 6, + 9, + 4, + 5, + 1, + 8, + 7 + ] + ] + }, + { + "id": 43, + "board": [ + [ + 0, + 0, + 0, + 7, + 0, + 0, + 0, + 5, + 8 + ], + [ + 0, + 5, + 0, + 0, + 9, + 0, + 0, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 4 + ], + [ + 4, + 0, + 5, + 2, + 0, + 9, + 0, + 8, + 0 + ], + [ + 0, + 1, + 2, + 0, + 7, + 5, + 4, + 3, + 9 + ], + [ + 9, + 0, + 7, + 0, + 0, + 1, + 2, + 6, + 5 + ], + [ + 5, + 4, + 1, + 9, + 2, + 3, + 8, + 7, + 6 + ], + [ + 3, + 9, + 8, + 0, + 0, + 7, + 5, + 4, + 2 + ], + [ + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 9, + 0 + ] + ], + "solution": [ + [ + 1, + 2, + 4, + 7, + 3, + 6, + 9, + 5, + 8 + ], + [ + 8, + 5, + 3, + 4, + 9, + 2, + 6, + 1, + 7 + ], + [ + 7, + 6, + 9, + 1, + 5, + 8, + 3, + 2, + 4 + ], + [ + 4, + 3, + 5, + 2, + 6, + 9, + 7, + 8, + 1 + ], + [ + 6, + 1, + 2, + 8, + 7, + 5, + 4, + 3, + 9 + ], + [ + 9, + 8, + 7, + 3, + 4, + 1, + 2, + 6, + 5 + ], + [ + 5, + 4, + 1, + 9, + 2, + 3, + 8, + 7, + 6 + ], + [ + 3, + 9, + 8, + 6, + 1, + 7, + 5, + 4, + 2 + ], + [ + 2, + 7, + 6, + 5, + 8, + 4, + 1, + 9, + 3 + ] + ] + }, + { + "id": 44, + "board": [ + [ + 9, + 1, + 8, + 0, + 5, + 0, + 0, + 3, + 4 + ], + [ + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 1 + ], + [ + 6, + 0, + 0, + 0, + 1, + 9, + 5, + 2, + 0 + ], + [ + 0, + 0, + 5, + 1, + 0, + 0, + 0, + 4, + 0 + ], + [ + 4, + 7, + 0, + 9, + 8, + 3, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 1, + 5, + 9, + 7, + 3, + 8, + 4, + 0, + 2 + ], + [ + 7, + 0, + 0, + 5, + 9, + 6, + 1, + 8, + 3 + ], + [ + 8, + 6, + 3, + 4, + 2, + 1, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 9, + 1, + 8, + 2, + 5, + 7, + 6, + 3, + 4 + ], + [ + 5, + 2, + 7, + 3, + 6, + 4, + 8, + 9, + 1 + ], + [ + 6, + 3, + 4, + 8, + 1, + 9, + 5, + 2, + 7 + ], + [ + 3, + 8, + 5, + 1, + 7, + 2, + 9, + 4, + 6 + ], + [ + 4, + 7, + 6, + 9, + 8, + 3, + 2, + 1, + 5 + ], + [ + 2, + 9, + 1, + 6, + 4, + 5, + 3, + 7, + 8 + ], + [ + 1, + 5, + 9, + 7, + 3, + 8, + 4, + 6, + 2 + ], + [ + 7, + 4, + 2, + 5, + 9, + 6, + 1, + 8, + 3 + ], + [ + 8, + 6, + 3, + 4, + 2, + 1, + 7, + 5, + 9 + ] + ] + }, + { + "id": 45, + "board": [ + [ + 7, + 4, + 0, + 1, + 0, + 8, + 0, + 6, + 0 + ], + [ + 5, + 3, + 0, + 0, + 6, + 2, + 0, + 0, + 4 + ], + [ + 8, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 1, + 4, + 8, + 7, + 9, + 0, + 0, + 0 + ], + [ + 0, + 9, + 5, + 6, + 2, + 0, + 0, + 0, + 0 + ], + [ + 6, + 8, + 7, + 3, + 0, + 0, + 9, + 2, + 0 + ], + [ + 4, + 2, + 6, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 9, + 5, + 3, + 4, + 8, + 6, + 2, + 1, + 7 + ], + [ + 1, + 7, + 8, + 2, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 7, + 4, + 2, + 1, + 5, + 8, + 3, + 6, + 9 + ], + [ + 5, + 3, + 1, + 9, + 6, + 2, + 7, + 8, + 4 + ], + [ + 8, + 6, + 9, + 7, + 3, + 4, + 1, + 5, + 2 + ], + [ + 2, + 1, + 4, + 8, + 7, + 9, + 5, + 3, + 6 + ], + [ + 3, + 9, + 5, + 6, + 2, + 1, + 4, + 7, + 8 + ], + [ + 6, + 8, + 7, + 3, + 4, + 5, + 9, + 2, + 1 + ], + [ + 4, + 2, + 6, + 5, + 1, + 7, + 8, + 9, + 3 + ], + [ + 9, + 5, + 3, + 4, + 8, + 6, + 2, + 1, + 7 + ], + [ + 1, + 7, + 8, + 2, + 9, + 3, + 6, + 4, + 5 + ] + ] + }, + { + "id": 46, + "board": [ + [ + 0, + 6, + 2, + 9, + 0, + 0, + 5, + 0, + 0 + ], + [ + 5, + 0, + 9, + 2, + 0, + 0, + 6, + 4, + 0 + ], + [ + 0, + 4, + 7, + 5, + 8, + 6, + 0, + 0, + 0 + ], + [ + 0, + 5, + 0, + 0, + 0, + 4, + 7, + 6, + 0 + ], + [ + 0, + 2, + 4, + 0, + 6, + 9, + 0, + 5, + 3 + ], + [ + 6, + 0, + 0, + 7, + 0, + 5, + 4, + 0, + 0 + ], + [ + 0, + 0, + 6, + 4, + 7, + 0, + 0, + 0, + 5 + ], + [ + 0, + 0, + 0, + 6, + 0, + 0, + 9, + 7, + 4 + ], + [ + 4, + 7, + 5, + 3, + 9, + 8, + 2, + 1, + 0 + ] + ], + "solution": [ + [ + 1, + 6, + 2, + 9, + 4, + 7, + 5, + 3, + 8 + ], + [ + 5, + 8, + 9, + 2, + 1, + 3, + 6, + 4, + 7 + ], + [ + 3, + 4, + 7, + 5, + 8, + 6, + 1, + 2, + 9 + ], + [ + 9, + 5, + 1, + 8, + 3, + 4, + 7, + 6, + 2 + ], + [ + 7, + 2, + 4, + 1, + 6, + 9, + 8, + 5, + 3 + ], + [ + 6, + 3, + 8, + 7, + 2, + 5, + 4, + 9, + 1 + ], + [ + 2, + 9, + 6, + 4, + 7, + 1, + 3, + 8, + 5 + ], + [ + 8, + 1, + 3, + 6, + 5, + 2, + 9, + 7, + 4 + ], + [ + 4, + 7, + 5, + 3, + 9, + 8, + 2, + 1, + 6 + ] + ] + }, + { + "id": 47, + "board": [ + [ + 0, + 2, + 0, + 0, + 8, + 4, + 0, + 0, + 0 + ], + [ + 0, + 8, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 1, + 7, + 0, + 2, + 5, + 0, + 9, + 8 + ], + [ + 8, + 0, + 3, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 7, + 4, + 8, + 5, + 6, + 9, + 0, + 0 + ], + [ + 0, + 9, + 1, + 4, + 7, + 3, + 2, + 8, + 0 + ], + [ + 7, + 4, + 8, + 0, + 0, + 2, + 0, + 0, + 9 + ], + [ + 1, + 0, + 2, + 9, + 6, + 7, + 8, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 4, + 8, + 1, + 7, + 2 + ] + ], + "solution": [ + [ + 9, + 2, + 6, + 3, + 8, + 4, + 7, + 1, + 5 + ], + [ + 3, + 8, + 5, + 7, + 9, + 1, + 6, + 2, + 4 + ], + [ + 4, + 1, + 7, + 6, + 2, + 5, + 3, + 9, + 8 + ], + [ + 8, + 6, + 3, + 2, + 1, + 9, + 4, + 5, + 7 + ], + [ + 2, + 7, + 4, + 8, + 5, + 6, + 9, + 3, + 1 + ], + [ + 5, + 9, + 1, + 4, + 7, + 3, + 2, + 8, + 6 + ], + [ + 7, + 4, + 8, + 1, + 3, + 2, + 5, + 6, + 9 + ], + [ + 1, + 5, + 2, + 9, + 6, + 7, + 8, + 4, + 3 + ], + [ + 6, + 3, + 9, + 5, + 4, + 8, + 1, + 7, + 2 + ] + ] + }, + { + "id": 48, + "board": [ + [ + 8, + 0, + 0, + 0, + 2, + 9, + 0, + 5, + 1 + ], + [ + 5, + 9, + 0, + 1, + 6, + 8, + 0, + 0, + 0 + ], + [ + 2, + 1, + 0, + 0, + 5, + 0, + 8, + 9, + 6 + ], + [ + 6, + 5, + 2, + 9, + 7, + 4, + 1, + 3, + 8 + ], + [ + 3, + 7, + 0, + 5, + 0, + 2, + 0, + 6, + 0 + ], + [ + 4, + 8, + 9, + 6, + 3, + 1, + 0, + 0, + 0 + ], + [ + 7, + 2, + 0, + 8, + 4, + 0, + 0, + 1, + 0 + ], + [ + 1, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 8, + 3, + 6, + 4, + 2, + 9, + 7, + 5, + 1 + ], + [ + 5, + 9, + 7, + 1, + 6, + 8, + 3, + 2, + 4 + ], + [ + 2, + 1, + 4, + 7, + 5, + 3, + 8, + 9, + 6 + ], + [ + 6, + 5, + 2, + 9, + 7, + 4, + 1, + 3, + 8 + ], + [ + 3, + 7, + 1, + 5, + 8, + 2, + 4, + 6, + 9 + ], + [ + 4, + 8, + 9, + 6, + 3, + 1, + 2, + 7, + 5 + ], + [ + 7, + 2, + 5, + 8, + 4, + 6, + 9, + 1, + 3 + ], + [ + 1, + 4, + 3, + 2, + 9, + 5, + 6, + 8, + 7 + ], + [ + 9, + 6, + 8, + 3, + 1, + 7, + 5, + 4, + 2 + ] + ] + }, + { + "id": 49, + "board": [ + [ + 0, + 0, + 0, + 0, + 6, + 7, + 0, + 0, + 0 + ], + [ + 8, + 0, + 7, + 3, + 0, + 2, + 0, + 0, + 0 + ], + [ + 6, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 9, + 1, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 8, + 3, + 0, + 0, + 0 + ], + [ + 9, + 0, + 1, + 0, + 2, + 6, + 0, + 0, + 0 + ], + [ + 4, + 3, + 6, + 8, + 1, + 9, + 7, + 5, + 2 + ], + [ + 1, + 2, + 8, + 6, + 7, + 5, + 3, + 4, + 9 + ], + [ + 5, + 7, + 9, + 2, + 3, + 4, + 8, + 1, + 6 + ] + ], + "solution": [ + [ + 2, + 5, + 4, + 1, + 6, + 7, + 9, + 3, + 8 + ], + [ + 8, + 9, + 7, + 3, + 4, + 2, + 1, + 6, + 5 + ], + [ + 6, + 1, + 3, + 9, + 5, + 8, + 4, + 2, + 7 + ], + [ + 3, + 6, + 5, + 7, + 9, + 1, + 2, + 8, + 4 + ], + [ + 7, + 4, + 2, + 5, + 8, + 3, + 6, + 9, + 1 + ], + [ + 9, + 8, + 1, + 4, + 2, + 6, + 5, + 7, + 3 + ], + [ + 4, + 3, + 6, + 8, + 1, + 9, + 7, + 5, + 2 + ], + [ + 1, + 2, + 8, + 6, + 7, + 5, + 3, + 4, + 9 + ], + [ + 5, + 7, + 9, + 2, + 3, + 4, + 8, + 1, + 6 + ] + ] + }, + { + "id": 50, + "board": [ + [ + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 3, + 0, + 0, + 6 + ], + [ + 7, + 3, + 8, + 1, + 2, + 6, + 9, + 4, + 5 + ], + [ + 0, + 8, + 3, + 7, + 6, + 1, + 0, + 5, + 0 + ], + [ + 0, + 7, + 0, + 3, + 8, + 5, + 0, + 6, + 0 + ], + [ + 5, + 6, + 1, + 2, + 0, + 0, + 7, + 3, + 8 + ], + [ + 0, + 0, + 7, + 6, + 0, + 2, + 8, + 9, + 3 + ], + [ + 3, + 0, + 6, + 0, + 0, + 0, + 5, + 0, + 4 + ], + [ + 8, + 0, + 0, + 0, + 3, + 0, + 6, + 0, + 0 + ] + ], + "solution": [ + [ + 6, + 1, + 5, + 4, + 9, + 8, + 3, + 7, + 2 + ], + [ + 4, + 2, + 9, + 5, + 7, + 3, + 1, + 8, + 6 + ], + [ + 7, + 3, + 8, + 1, + 2, + 6, + 9, + 4, + 5 + ], + [ + 2, + 8, + 3, + 7, + 6, + 1, + 4, + 5, + 9 + ], + [ + 9, + 7, + 4, + 3, + 8, + 5, + 2, + 6, + 1 + ], + [ + 5, + 6, + 1, + 2, + 4, + 9, + 7, + 3, + 8 + ], + [ + 1, + 4, + 7, + 6, + 5, + 2, + 8, + 9, + 3 + ], + [ + 3, + 9, + 6, + 8, + 1, + 7, + 5, + 2, + 4 + ], + [ + 8, + 5, + 2, + 9, + 3, + 4, + 6, + 1, + 7 + ] + ] + } + ] + }, + "expert": { + "level": [ + { + "id": 1, + "board": [ + [ + 2, + 7, + 8, + 0, + 3, + 1, + 5, + 0, + 4 + ], + [ + 6, + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 0 + ], + [ + 3, + 1, + 9, + 0, + 4, + 0, + 7, + 8, + 0 + ], + [ + 5, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 6, + 7, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 2, + 1, + 0, + 0, + 8, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 4, + 0 + ], + [ + 1, + 2, + 5, + 0, + 0, + 0, + 6, + 7, + 3 + ] + ], + "solution": [ + [ + 2, + 7, + 8, + 6, + 3, + 1, + 5, + 9, + 4 + ], + [ + 6, + 5, + 4, + 7, + 9, + 8, + 1, + 3, + 2 + ], + [ + 3, + 1, + 9, + 2, + 4, + 5, + 7, + 8, + 6 + ], + [ + 5, + 8, + 1, + 4, + 6, + 9, + 3, + 2, + 7 + ], + [ + 9, + 6, + 7, + 8, + 2, + 3, + 4, + 5, + 1 + ], + [ + 4, + 3, + 2, + 1, + 5, + 7, + 8, + 6, + 9 + ], + [ + 8, + 4, + 6, + 3, + 7, + 2, + 9, + 1, + 5 + ], + [ + 7, + 9, + 3, + 5, + 1, + 6, + 2, + 4, + 8 + ], + [ + 1, + 2, + 5, + 9, + 8, + 4, + 6, + 7, + 3 + ] + ] + }, + { + "id": 2, + "board": [ + [ + 1, + 3, + 0, + 8, + 0, + 5, + 0, + 7, + 0 + ], + [ + 5, + 8, + 6, + 4, + 0, + 0, + 1, + 9, + 3 + ], + [ + 0, + 7, + 0, + 0, + 1, + 0, + 8, + 0, + 5 + ], + [ + 6, + 4, + 0, + 0, + 0, + 0, + 0, + 8, + 0 + ], + [ + 7, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 0, + 2, + 1, + 7, + 0, + 0, + 0, + 5, + 0 + ], + [ + 8, + 1, + 7, + 2, + 6, + 9, + 5, + 0, + 0 + ], + [ + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 3, + 2, + 8, + 9, + 5, + 4, + 7, + 6 + ], + [ + 5, + 8, + 6, + 4, + 2, + 7, + 1, + 9, + 3 + ], + [ + 9, + 7, + 4, + 6, + 1, + 3, + 8, + 2, + 5 + ], + [ + 6, + 4, + 9, + 1, + 5, + 2, + 3, + 8, + 7 + ], + [ + 7, + 5, + 8, + 9, + 3, + 6, + 2, + 4, + 1 + ], + [ + 3, + 2, + 1, + 7, + 4, + 8, + 6, + 5, + 9 + ], + [ + 8, + 1, + 7, + 2, + 6, + 9, + 5, + 3, + 4 + ], + [ + 4, + 9, + 3, + 5, + 8, + 1, + 7, + 6, + 2 + ], + [ + 2, + 6, + 5, + 3, + 7, + 4, + 9, + 1, + 8 + ] + ] + }, + { + "id": 3, + "board": [ + [ + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 9, + 0, + 4, + 8, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 1, + 0, + 9, + 5 + ], + [ + 0, + 0, + 0, + 0, + 8, + 9, + 0, + 0, + 0 + ], + [ + 0, + 9, + 0, + 0, + 5, + 7, + 0, + 0, + 0 + ], + [ + 5, + 0, + 0, + 8, + 7, + 6, + 0, + 0, + 0 + ], + [ + 9, + 8, + 6, + 5, + 1, + 4, + 3, + 2, + 7 + ], + [ + 7, + 1, + 4, + 9, + 2, + 3, + 6, + 5, + 8 + ] + ], + "solution": [ + [ + 3, + 4, + 5, + 7, + 9, + 2, + 1, + 8, + 6 + ], + [ + 8, + 7, + 1, + 6, + 3, + 5, + 9, + 4, + 2 + ], + [ + 2, + 6, + 9, + 1, + 4, + 8, + 5, + 7, + 3 + ], + [ + 4, + 3, + 7, + 2, + 6, + 1, + 8, + 9, + 5 + ], + [ + 1, + 5, + 2, + 3, + 8, + 9, + 7, + 6, + 4 + ], + [ + 6, + 9, + 8, + 4, + 5, + 7, + 2, + 3, + 1 + ], + [ + 5, + 2, + 3, + 8, + 7, + 6, + 4, + 1, + 9 + ], + [ + 9, + 8, + 6, + 5, + 1, + 4, + 3, + 2, + 7 + ], + [ + 7, + 1, + 4, + 9, + 2, + 3, + 6, + 5, + 8 + ] + ] + }, + { + "id": 4, + "board": [ + [ + 0, + 5, + 2, + 6, + 0, + 0, + 7, + 3, + 9 + ], + [ + 0, + 0, + 0, + 5, + 0, + 7, + 8, + 2, + 4 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 5, + 1, + 6 + ], + [ + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 5, + 0, + 0, + 2, + 0, + 4, + 0, + 8, + 7 + ], + [ + 0, + 0, + 1, + 0, + 0, + 6, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 3, + 0, + 8 + ], + [ + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 8, + 3, + 6, + 5, + 4, + 7, + 2 + ] + ], + "solution": [ + [ + 4, + 5, + 2, + 6, + 8, + 1, + 7, + 3, + 9 + ], + [ + 1, + 6, + 3, + 5, + 9, + 7, + 8, + 2, + 4 + ], + [ + 8, + 9, + 7, + 4, + 2, + 3, + 5, + 1, + 6 + ], + [ + 2, + 4, + 9, + 7, + 3, + 8, + 1, + 6, + 5 + ], + [ + 5, + 3, + 6, + 2, + 1, + 4, + 9, + 8, + 7 + ], + [ + 7, + 8, + 1, + 9, + 5, + 6, + 2, + 4, + 3 + ], + [ + 6, + 7, + 5, + 1, + 4, + 2, + 3, + 9, + 8 + ], + [ + 3, + 2, + 4, + 8, + 7, + 9, + 6, + 5, + 1 + ], + [ + 9, + 1, + 8, + 3, + 6, + 5, + 4, + 7, + 2 + ] + ] + }, + { + "id": 5, + "board": [ + [ + 9, + 2, + 7, + 3, + 4, + 8, + 1, + 5, + 6 + ], + [ + 5, + 6, + 3, + 7, + 1, + 9, + 0, + 0, + 0 + ], + [ + 4, + 8, + 1, + 6, + 2, + 5, + 3, + 0, + 9 + ], + [ + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 6, + 0, + 2, + 0, + 0, + 7, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 5, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 9, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 9, + 2, + 7, + 3, + 4, + 8, + 1, + 5, + 6 + ], + [ + 5, + 6, + 3, + 7, + 1, + 9, + 2, + 4, + 8 + ], + [ + 4, + 8, + 1, + 6, + 2, + 5, + 3, + 7, + 9 + ], + [ + 8, + 3, + 4, + 1, + 5, + 6, + 9, + 2, + 7 + ], + [ + 6, + 1, + 2, + 9, + 8, + 7, + 4, + 3, + 5 + ], + [ + 7, + 5, + 9, + 4, + 3, + 2, + 6, + 8, + 1 + ], + [ + 2, + 7, + 6, + 5, + 9, + 3, + 8, + 1, + 4 + ], + [ + 1, + 9, + 8, + 2, + 7, + 4, + 5, + 6, + 3 + ], + [ + 3, + 4, + 5, + 8, + 6, + 1, + 7, + 9, + 2 + ] + ] + }, + { + "id": 6, + "board": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0 + ], + [ + 0, + 1, + 7, + 0, + 0, + 0, + 2, + 6, + 9 + ], + [ + 7, + 0, + 0, + 0, + 0, + 0, + 5, + 0, + 4 + ], + [ + 9, + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 5, + 3, + 2, + 4, + 0, + 0, + 9, + 0, + 0 + ], + [ + 0, + 5, + 9, + 6, + 0, + 3, + 1, + 2, + 7 + ], + [ + 6, + 0, + 4, + 1, + 0, + 0, + 0, + 9, + 8 + ], + [ + 0, + 2, + 3, + 9, + 8, + 7, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 2, + 8, + 5, + 3, + 6, + 9, + 4, + 7, + 1 + ], + [ + 4, + 9, + 6, + 7, + 1, + 2, + 8, + 5, + 3 + ], + [ + 3, + 1, + 7, + 8, + 5, + 4, + 2, + 6, + 9 + ], + [ + 7, + 6, + 8, + 2, + 9, + 1, + 5, + 3, + 4 + ], + [ + 9, + 4, + 1, + 5, + 3, + 6, + 7, + 8, + 2 + ], + [ + 5, + 3, + 2, + 4, + 7, + 8, + 9, + 1, + 6 + ], + [ + 8, + 5, + 9, + 6, + 4, + 3, + 1, + 2, + 7 + ], + [ + 6, + 7, + 4, + 1, + 2, + 5, + 3, + 9, + 8 + ], + [ + 1, + 2, + 3, + 9, + 8, + 7, + 6, + 4, + 5 + ] + ] + }, + { + "id": 7, + "board": [ + [ + 1, + 3, + 6, + 5, + 8, + 2, + 4, + 7, + 9 + ], + [ + 0, + 0, + 7, + 1, + 4, + 3, + 0, + 0, + 6 + ], + [ + 4, + 8, + 5, + 6, + 9, + 7, + 0, + 2, + 0 + ], + [ + 5, + 0, + 0, + 3, + 2, + 0, + 0, + 0, + 7 + ], + [ + 0, + 1, + 0, + 0, + 0, + 8, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 6, + 1, + 0, + 0, + 0, + 0, + 3, + 0 + ], + [ + 0, + 5, + 0, + 0, + 0, + 0, + 7, + 6, + 8 + ] + ], + "solution": [ + [ + 1, + 3, + 6, + 5, + 8, + 2, + 4, + 7, + 9 + ], + [ + 2, + 9, + 7, + 1, + 4, + 3, + 5, + 8, + 6 + ], + [ + 4, + 8, + 5, + 6, + 9, + 7, + 1, + 2, + 3 + ], + [ + 5, + 4, + 8, + 3, + 2, + 1, + 6, + 9, + 7 + ], + [ + 6, + 1, + 2, + 9, + 7, + 8, + 3, + 4, + 5 + ], + [ + 3, + 7, + 9, + 4, + 6, + 5, + 8, + 1, + 2 + ], + [ + 7, + 2, + 4, + 8, + 3, + 6, + 9, + 5, + 1 + ], + [ + 8, + 6, + 1, + 7, + 5, + 9, + 2, + 3, + 4 + ], + [ + 9, + 5, + 3, + 2, + 1, + 4, + 7, + 6, + 8 + ] + ] + }, + { + "id": 8, + "board": [ + [ + 0, + 0, + 8, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 8, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 8, + 0, + 0, + 0, + 7 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 8, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 8, + 7, + 0, + 2 + ], + [ + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4 + ], + [ + 2, + 5, + 7, + 3, + 4, + 6, + 1, + 9, + 8 + ], + [ + 6, + 4, + 1, + 8, + 0, + 0, + 0, + 2, + 0 + ], + [ + 3, + 8, + 9, + 5, + 0, + 0, + 4, + 7, + 6 + ] + ], + "solution": [ + [ + 4, + 9, + 8, + 7, + 6, + 3, + 2, + 5, + 1 + ], + [ + 5, + 7, + 2, + 1, + 9, + 4, + 8, + 6, + 3 + ], + [ + 1, + 3, + 6, + 2, + 8, + 5, + 9, + 4, + 7 + ], + [ + 7, + 2, + 4, + 6, + 3, + 1, + 5, + 8, + 9 + ], + [ + 9, + 6, + 3, + 4, + 5, + 8, + 7, + 1, + 2 + ], + [ + 8, + 1, + 5, + 9, + 2, + 7, + 6, + 3, + 4 + ], + [ + 2, + 5, + 7, + 3, + 4, + 6, + 1, + 9, + 8 + ], + [ + 6, + 4, + 1, + 8, + 7, + 9, + 3, + 2, + 5 + ], + [ + 3, + 8, + 9, + 5, + 1, + 2, + 4, + 7, + 6 + ] + ] + }, + { + "id": 9, + "board": [ + [ + 7, + 3, + 0, + 6, + 2, + 9, + 0, + 4, + 0 + ], + [ + 0, + 0, + 6, + 0, + 0, + 1, + 0, + 9, + 0 + ], + [ + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 7, + 6 + ], + [ + 3, + 9, + 7, + 1, + 6, + 4, + 0, + 8, + 0 + ], + [ + 0, + 0, + 0, + 3, + 9, + 0, + 4, + 1, + 7 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 3, + 9 + ], + [ + 0, + 0, + 0, + 0, + 0, + 5, + 0, + 6, + 0 + ], + [ + 0, + 1, + 0, + 8, + 0, + 0, + 0, + 2, + 4 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 5, + 0 + ] + ], + "solution": [ + [ + 7, + 3, + 8, + 6, + 2, + 9, + 1, + 4, + 5 + ], + [ + 4, + 5, + 6, + 7, + 3, + 1, + 2, + 9, + 8 + ], + [ + 1, + 2, + 9, + 4, + 5, + 8, + 3, + 7, + 6 + ], + [ + 3, + 9, + 7, + 1, + 6, + 4, + 5, + 8, + 2 + ], + [ + 8, + 6, + 5, + 3, + 9, + 2, + 4, + 1, + 7 + ], + [ + 2, + 4, + 1, + 5, + 8, + 7, + 6, + 3, + 9 + ], + [ + 9, + 8, + 4, + 2, + 1, + 5, + 7, + 6, + 3 + ], + [ + 5, + 1, + 3, + 8, + 7, + 6, + 9, + 2, + 4 + ], + [ + 6, + 7, + 2, + 9, + 4, + 3, + 8, + 5, + 1 + ] + ] + }, + { + "id": 10, + "board": [ + [ + 0, + 9, + 8, + 0, + 0, + 5, + 0, + 0, + 4 + ], + [ + 5, + 4, + 2, + 0, + 0, + 7, + 0, + 0, + 0 + ], + [ + 0, + 7, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 9, + 1, + 7, + 3, + 5, + 6, + 0, + 4, + 0 + ], + [ + 4, + 6, + 3, + 7, + 2, + 8, + 9, + 0, + 0 + ], + [ + 2, + 8, + 5, + 9, + 4, + 1, + 3, + 0, + 0 + ], + [ + 0, + 0, + 6, + 0, + 1, + 9, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 9, + 8, + 2, + 6, + 5, + 1, + 7, + 4 + ], + [ + 5, + 4, + 2, + 1, + 8, + 7, + 6, + 3, + 9 + ], + [ + 6, + 7, + 1, + 4, + 9, + 3, + 8, + 2, + 5 + ], + [ + 9, + 1, + 7, + 3, + 5, + 6, + 2, + 4, + 8 + ], + [ + 4, + 6, + 3, + 7, + 2, + 8, + 9, + 5, + 1 + ], + [ + 2, + 8, + 5, + 9, + 4, + 1, + 3, + 6, + 7 + ], + [ + 7, + 2, + 6, + 5, + 1, + 9, + 4, + 8, + 3 + ], + [ + 1, + 3, + 4, + 8, + 7, + 2, + 5, + 9, + 6 + ], + [ + 8, + 5, + 9, + 6, + 3, + 4, + 7, + 1, + 2 + ] + ] + }, + { + "id": 11, + "board": [ + [ + 1, + 2, + 5, + 9, + 0, + 0, + 0, + 0, + 8 + ], + [ + 4, + 8, + 3, + 0, + 0, + 0, + 0, + 9, + 0 + ], + [ + 7, + 6, + 9, + 0, + 1, + 0, + 5, + 0, + 0 + ], + [ + 0, + 3, + 0, + 0, + 0, + 0, + 9, + 0, + 0 + ], + [ + 9, + 5, + 0, + 3, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 7, + 1, + 0, + 0, + 9, + 3, + 0, + 0 + ], + [ + 0, + 9, + 0, + 1, + 0, + 0, + 4, + 5, + 3 + ], + [ + 3, + 4, + 0, + 0, + 9, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 7, + 9 + ] + ], + "solution": [ + [ + 1, + 2, + 5, + 9, + 4, + 7, + 6, + 3, + 8 + ], + [ + 4, + 8, + 3, + 5, + 2, + 6, + 1, + 9, + 7 + ], + [ + 7, + 6, + 9, + 8, + 1, + 3, + 5, + 2, + 4 + ], + [ + 2, + 3, + 6, + 4, + 7, + 8, + 9, + 1, + 5 + ], + [ + 9, + 5, + 4, + 3, + 6, + 1, + 7, + 8, + 2 + ], + [ + 8, + 7, + 1, + 2, + 5, + 9, + 3, + 4, + 6 + ], + [ + 6, + 9, + 7, + 1, + 8, + 2, + 4, + 5, + 3 + ], + [ + 3, + 4, + 2, + 7, + 9, + 5, + 8, + 6, + 1 + ], + [ + 5, + 1, + 8, + 6, + 3, + 4, + 2, + 7, + 9 + ] + ] + }, + { + "id": 12, + "board": [ + [ + 0, + 0, + 0, + 9, + 8, + 6, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 3, + 7, + 2, + 0, + 6, + 0 + ], + [ + 2, + 0, + 6, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 6, + 8, + 0, + 2, + 9, + 4, + 5, + 3 + ], + [ + 0, + 3, + 0, + 8, + 6, + 0, + 0, + 9, + 2 + ], + [ + 0, + 2, + 9, + 0, + 4, + 3, + 0, + 0, + 0 + ], + [ + 9, + 4, + 2, + 6, + 3, + 0, + 5, + 0, + 1 + ], + [ + 0, + 1, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 5, + 7, + 9, + 8, + 6, + 1, + 2, + 4 + ], + [ + 1, + 8, + 4, + 3, + 7, + 2, + 9, + 6, + 5 + ], + [ + 2, + 9, + 6, + 4, + 5, + 1, + 3, + 7, + 8 + ], + [ + 7, + 6, + 8, + 1, + 2, + 9, + 4, + 5, + 3 + ], + [ + 4, + 3, + 1, + 8, + 6, + 5, + 7, + 9, + 2 + ], + [ + 5, + 2, + 9, + 7, + 4, + 3, + 8, + 1, + 6 + ], + [ + 9, + 4, + 2, + 6, + 3, + 7, + 5, + 8, + 1 + ], + [ + 8, + 1, + 5, + 2, + 9, + 4, + 6, + 3, + 7 + ], + [ + 6, + 7, + 3, + 5, + 1, + 8, + 2, + 4, + 9 + ] + ] + }, + { + "id": 13, + "board": [ + [ + 0, + 2, + 0, + 1, + 6, + 9, + 0, + 0, + 0 + ], + [ + 0, + 9, + 0, + 5, + 8, + 7, + 0, + 0, + 2 + ], + [ + 0, + 0, + 0, + 2, + 3, + 4, + 0, + 0, + 0 + ], + [ + 0, + 8, + 0, + 6, + 2, + 0, + 0, + 7, + 0 + ], + [ + 2, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 0, + 3, + 0, + 0, + 7, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 2, + 0, + 5, + 1, + 0, + 6, + 0 + ], + [ + 0, + 6, + 0, + 3, + 9, + 2, + 1, + 0, + 0 + ], + [ + 0, + 0, + 3, + 0, + 4, + 6, + 2, + 5, + 0 + ] + ], + "solution": [ + [ + 7, + 2, + 4, + 1, + 6, + 9, + 8, + 3, + 5 + ], + [ + 3, + 9, + 6, + 5, + 8, + 7, + 4, + 1, + 2 + ], + [ + 1, + 5, + 8, + 2, + 3, + 4, + 7, + 9, + 6 + ], + [ + 5, + 8, + 1, + 6, + 2, + 3, + 9, + 7, + 4 + ], + [ + 2, + 4, + 7, + 9, + 1, + 5, + 6, + 8, + 3 + ], + [ + 6, + 3, + 9, + 4, + 7, + 8, + 5, + 2, + 1 + ], + [ + 4, + 7, + 2, + 8, + 5, + 1, + 3, + 6, + 9 + ], + [ + 8, + 6, + 5, + 3, + 9, + 2, + 1, + 4, + 7 + ], + [ + 9, + 1, + 3, + 7, + 4, + 6, + 2, + 5, + 8 + ] + ] + }, + { + "id": 14, + "board": [ + [ + 0, + 0, + 0, + 8, + 7, + 0, + 3, + 4, + 5 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 2, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 6 + ], + [ + 0, + 0, + 5, + 0, + 0, + 2, + 1, + 3, + 4 + ], + [ + 9, + 0, + 0, + 1, + 4, + 8, + 5, + 6, + 7 + ], + [ + 4, + 6, + 1, + 3, + 5, + 7, + 2, + 8, + 9 + ], + [ + 0, + 5, + 0, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 2 + ] + ], + "solution": [ + [ + 1, + 2, + 9, + 8, + 7, + 6, + 3, + 4, + 5 + ], + [ + 6, + 4, + 8, + 5, + 3, + 9, + 7, + 2, + 1 + ], + [ + 5, + 7, + 3, + 2, + 1, + 4, + 8, + 9, + 6 + ], + [ + 7, + 8, + 5, + 6, + 9, + 2, + 1, + 3, + 4 + ], + [ + 9, + 3, + 2, + 1, + 4, + 8, + 5, + 6, + 7 + ], + [ + 4, + 6, + 1, + 3, + 5, + 7, + 2, + 8, + 9 + ], + [ + 8, + 5, + 4, + 9, + 2, + 1, + 6, + 7, + 3 + ], + [ + 2, + 1, + 7, + 4, + 6, + 3, + 9, + 5, + 8 + ], + [ + 3, + 9, + 6, + 7, + 8, + 5, + 4, + 1, + 2 + ] + ] + }, + { + "id": 15, + "board": [ + [ + 5, + 6, + 0, + 8, + 9, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 4, + 6, + 5, + 0, + 0, + 0 + ], + [ + 9, + 0, + 0, + 7, + 1, + 0, + 5, + 6, + 0 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0 + ], + [ + 7, + 9, + 0, + 5, + 2, + 8, + 0, + 0, + 0 + ], + [ + 3, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 6, + 8, + 0, + 0, + 9, + 0 + ], + [ + 0, + 0, + 0, + 3, + 0, + 9, + 0, + 0, + 8 + ], + [ + 8, + 3, + 9, + 2, + 5, + 1, + 7, + 0, + 6 + ] + ], + "solution": [ + [ + 5, + 6, + 3, + 8, + 9, + 2, + 1, + 7, + 4 + ], + [ + 1, + 2, + 7, + 4, + 6, + 5, + 8, + 3, + 9 + ], + [ + 9, + 4, + 8, + 7, + 1, + 3, + 5, + 6, + 2 + ], + [ + 2, + 1, + 5, + 9, + 3, + 4, + 6, + 8, + 7 + ], + [ + 7, + 9, + 6, + 5, + 2, + 8, + 4, + 1, + 3 + ], + [ + 3, + 8, + 4, + 1, + 7, + 6, + 9, + 2, + 5 + ], + [ + 4, + 5, + 2, + 6, + 8, + 7, + 3, + 9, + 1 + ], + [ + 6, + 7, + 1, + 3, + 4, + 9, + 2, + 5, + 8 + ], + [ + 8, + 3, + 9, + 2, + 5, + 1, + 7, + 4, + 6 + ] + ] + }, + { + "id": 16, + "board": [ + [ + 8, + 2, + 1, + 5, + 3, + 4, + 0, + 0, + 0 + ], + [ + 5, + 9, + 4, + 7, + 2, + 6, + 8, + 3, + 1 + ], + [ + 0, + 0, + 0, + 9, + 8, + 1, + 4, + 2, + 5 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 8, + 0, + 0, + 0, + 3, + 5, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 3 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 9, + 1, + 6, + 3, + 4, + 2, + 7, + 0, + 8 + ] + ], + "solution": [ + [ + 8, + 2, + 1, + 5, + 3, + 4, + 6, + 7, + 9 + ], + [ + 5, + 9, + 4, + 7, + 2, + 6, + 8, + 3, + 1 + ], + [ + 6, + 7, + 3, + 9, + 8, + 1, + 4, + 2, + 5 + ], + [ + 3, + 4, + 5, + 6, + 1, + 7, + 9, + 8, + 2 + ], + [ + 1, + 8, + 7, + 2, + 9, + 3, + 5, + 4, + 6 + ], + [ + 2, + 6, + 9, + 4, + 5, + 8, + 3, + 1, + 7 + ], + [ + 4, + 5, + 2, + 8, + 7, + 9, + 1, + 6, + 3 + ], + [ + 7, + 3, + 8, + 1, + 6, + 5, + 2, + 9, + 4 + ], + [ + 9, + 1, + 6, + 3, + 4, + 2, + 7, + 5, + 8 + ] + ] + }, + { + "id": 17, + "board": [ + [ + 0, + 0, + 8, + 1, + 5, + 0, + 0, + 0, + 9 + ], + [ + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 5 + ], + [ + 9, + 8, + 0, + 0, + 0, + 1, + 5, + 0, + 0 + ], + [ + 4, + 1, + 0, + 0, + 8, + 5, + 3, + 9, + 0 + ], + [ + 0, + 5, + 7, + 0, + 9, + 0, + 0, + 1, + 0 + ], + [ + 8, + 0, + 1, + 5, + 0, + 0, + 6, + 2, + 4 + ], + [ + 0, + 6, + 4, + 0, + 1, + 8, + 0, + 5, + 3 + ], + [ + 0, + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 3, + 2, + 8, + 1, + 5, + 6, + 4, + 7, + 9 + ], + [ + 5, + 7, + 6, + 8, + 4, + 9, + 1, + 3, + 2 + ], + [ + 1, + 4, + 9, + 7, + 2, + 3, + 8, + 6, + 5 + ], + [ + 9, + 8, + 3, + 2, + 7, + 1, + 5, + 4, + 6 + ], + [ + 4, + 1, + 2, + 6, + 8, + 5, + 3, + 9, + 7 + ], + [ + 6, + 5, + 7, + 3, + 9, + 4, + 2, + 1, + 8 + ], + [ + 8, + 9, + 1, + 5, + 3, + 7, + 6, + 2, + 4 + ], + [ + 2, + 6, + 4, + 9, + 1, + 8, + 7, + 5, + 3 + ], + [ + 7, + 3, + 5, + 4, + 6, + 2, + 9, + 8, + 1 + ] + ] + }, + { + "id": 18, + "board": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8 + ], + [ + 7, + 0, + 9, + 8, + 0, + 6, + 4, + 0, + 1 + ], + [ + 0, + 0, + 2, + 0, + 0, + 9, + 0, + 3, + 0 + ], + [ + 1, + 2, + 0, + 0, + 0, + 8, + 0, + 4, + 0 + ], + [ + 0, + 8, + 0, + 2, + 6, + 0, + 1, + 0, + 5 + ], + [ + 0, + 6, + 4, + 0, + 1, + 0, + 0, + 0, + 2 + ], + [ + 2, + 0, + 6, + 0, + 4, + 1, + 0, + 0, + 0 + ], + [ + 4, + 0, + 0, + 7, + 8, + 0, + 0, + 6, + 3 + ], + [ + 0, + 0, + 8, + 0, + 0, + 0, + 0, + 1, + 4 + ] + ], + "solution": [ + [ + 6, + 5, + 1, + 4, + 2, + 3, + 7, + 9, + 8 + ], + [ + 7, + 3, + 9, + 8, + 5, + 6, + 4, + 2, + 1 + ], + [ + 8, + 4, + 2, + 1, + 7, + 9, + 5, + 3, + 6 + ], + [ + 1, + 2, + 7, + 5, + 3, + 8, + 6, + 4, + 9 + ], + [ + 9, + 8, + 3, + 2, + 6, + 4, + 1, + 7, + 5 + ], + [ + 5, + 6, + 4, + 9, + 1, + 7, + 3, + 8, + 2 + ], + [ + 2, + 9, + 6, + 3, + 4, + 1, + 8, + 5, + 7 + ], + [ + 4, + 1, + 5, + 7, + 8, + 2, + 9, + 6, + 3 + ], + [ + 3, + 7, + 8, + 6, + 9, + 5, + 2, + 1, + 4 + ] + ] + }, + { + "id": 19, + "board": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 7, + 1, + 0, + 0 + ], + [ + 7, + 0, + 0, + 0, + 1, + 4, + 0, + 0, + 0 + ], + [ + 2, + 8, + 0, + 1, + 4, + 6, + 0, + 0, + 7 + ], + [ + 1, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 0 + ], + [ + 6, + 0, + 0, + 0, + 3, + 5, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 1, + 4 + ], + [ + 4, + 1, + 8, + 6, + 7, + 3, + 5, + 2, + 9 + ], + [ + 9, + 0, + 2, + 4, + 5, + 1, + 3, + 0, + 0 + ] + ], + "solution": [ + [ + 8, + 3, + 1, + 5, + 6, + 9, + 4, + 7, + 2 + ], + [ + 5, + 2, + 4, + 3, + 8, + 7, + 1, + 9, + 6 + ], + [ + 7, + 6, + 9, + 2, + 1, + 4, + 8, + 3, + 5 + ], + [ + 2, + 8, + 3, + 1, + 4, + 6, + 9, + 5, + 7 + ], + [ + 1, + 9, + 5, + 7, + 2, + 8, + 6, + 4, + 3 + ], + [ + 6, + 4, + 7, + 9, + 3, + 5, + 2, + 8, + 1 + ], + [ + 3, + 5, + 6, + 8, + 9, + 2, + 7, + 1, + 4 + ], + [ + 4, + 1, + 8, + 6, + 7, + 3, + 5, + 2, + 9 + ], + [ + 9, + 7, + 2, + 4, + 5, + 1, + 3, + 6, + 8 + ] + ] + }, + { + "id": 20, + "board": [ + [ + 9, + 2, + 7, + 0, + 0, + 3, + 0, + 8, + 0 + ], + [ + 1, + 0, + 0, + 0, + 2, + 0, + 0, + 6, + 7 + ], + [ + 5, + 0, + 0, + 0, + 1, + 7, + 2, + 0, + 3 + ], + [ + 2, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 8 + ], + [ + 3, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 2 + ], + [ + 7, + 0, + 4, + 5, + 0, + 2, + 0, + 0, + 9 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5 + ], + [ + 4, + 1, + 5, + 3, + 7, + 9, + 8, + 2, + 6 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 9, + 2, + 7, + 4, + 6, + 3, + 5, + 8, + 1 + ], + [ + 1, + 4, + 3, + 8, + 2, + 5, + 9, + 6, + 7 + ], + [ + 5, + 8, + 6, + 9, + 1, + 7, + 2, + 4, + 3 + ], + [ + 2, + 9, + 1, + 7, + 3, + 4, + 6, + 5, + 8 + ], + [ + 3, + 5, + 8, + 1, + 9, + 6, + 4, + 7, + 2 + ], + [ + 7, + 6, + 4, + 5, + 8, + 2, + 1, + 3, + 9 + ], + [ + 6, + 3, + 9, + 2, + 4, + 8, + 7, + 1, + 5 + ], + [ + 4, + 1, + 5, + 3, + 7, + 9, + 8, + 2, + 6 + ], + [ + 8, + 7, + 2, + 6, + 5, + 1, + 3, + 9, + 4 + ] + ] + }, + { + "id": 21, + "board": [ + [ + 0, + 1, + 0, + 0, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 5, + 1 + ], + [ + 0, + 2, + 5, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 6, + 0, + 0, + 0, + 0, + 3, + 1, + 0 + ], + [ + 0, + 8, + 1, + 0, + 0, + 0, + 5, + 0, + 0 + ], + [ + 5, + 3, + 0, + 1, + 0, + 2, + 8, + 9, + 0 + ], + [ + 3, + 0, + 0, + 4, + 0, + 0, + 1, + 0, + 0 + ], + [ + 0, + 4, + 8, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 5, + 2, + 7, + 8, + 9, + 6, + 4, + 3 + ] + ], + "solution": [ + [ + 4, + 1, + 3, + 8, + 5, + 7, + 2, + 6, + 9 + ], + [ + 8, + 7, + 9, + 2, + 3, + 6, + 4, + 5, + 1 + ], + [ + 6, + 2, + 5, + 9, + 4, + 1, + 7, + 3, + 8 + ], + [ + 9, + 6, + 4, + 5, + 7, + 8, + 3, + 1, + 2 + ], + [ + 2, + 8, + 1, + 3, + 9, + 4, + 5, + 7, + 6 + ], + [ + 5, + 3, + 7, + 1, + 6, + 2, + 8, + 9, + 4 + ], + [ + 3, + 9, + 6, + 4, + 2, + 5, + 1, + 8, + 7 + ], + [ + 7, + 4, + 8, + 6, + 1, + 3, + 9, + 2, + 5 + ], + [ + 1, + 5, + 2, + 7, + 8, + 9, + 6, + 4, + 3 + ] + ] + }, + { + "id": 22, + "board": [ + [ + 4, + 0, + 0, + 8, + 3, + 0, + 1, + 6, + 9 + ], + [ + 6, + 0, + 0, + 0, + 4, + 0, + 2, + 3, + 7 + ], + [ + 3, + 0, + 0, + 0, + 0, + 0, + 4, + 5, + 8 + ], + [ + 7, + 0, + 0, + 0, + 1, + 8, + 5, + 9, + 0 + ], + [ + 8, + 9, + 5, + 0, + 6, + 0, + 7, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 8, + 4, + 0 + ], + [ + 0, + 7, + 0, + 0, + 8, + 0, + 0, + 2, + 1 + ], + [ + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 4, + 2, + 7, + 8, + 3, + 5, + 1, + 6, + 9 + ], + [ + 6, + 5, + 8, + 9, + 4, + 1, + 2, + 3, + 7 + ], + [ + 3, + 1, + 9, + 6, + 2, + 7, + 4, + 5, + 8 + ], + [ + 7, + 3, + 4, + 2, + 1, + 8, + 5, + 9, + 6 + ], + [ + 8, + 9, + 5, + 3, + 6, + 4, + 7, + 1, + 2 + ], + [ + 1, + 6, + 2, + 5, + 7, + 9, + 8, + 4, + 3 + ], + [ + 5, + 7, + 6, + 4, + 8, + 3, + 9, + 2, + 1 + ], + [ + 9, + 8, + 3, + 1, + 5, + 2, + 6, + 7, + 4 + ], + [ + 2, + 4, + 1, + 7, + 9, + 6, + 3, + 8, + 5 + ] + ] + }, + { + "id": 23, + "board": [ + [ + 0, + 4, + 1, + 0, + 0, + 6, + 5, + 2, + 7 + ], + [ + 0, + 0, + 0, + 4, + 0, + 0, + 1, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 6, + 0, + 0, + 7, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 4, + 0, + 6, + 0, + 0 + ], + [ + 6, + 0, + 0, + 0, + 0, + 7, + 2, + 0, + 9 + ], + [ + 4, + 0, + 0, + 0, + 1, + 8, + 9, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 1, + 4 + ], + [ + 8, + 1, + 5, + 9, + 6, + 4, + 3, + 7, + 2 + ] + ], + "solution": [ + [ + 3, + 4, + 1, + 8, + 9, + 6, + 5, + 2, + 7 + ], + [ + 5, + 8, + 9, + 4, + 7, + 2, + 1, + 6, + 3 + ], + [ + 2, + 6, + 7, + 3, + 5, + 1, + 4, + 9, + 8 + ], + [ + 1, + 9, + 4, + 6, + 2, + 3, + 7, + 8, + 5 + ], + [ + 7, + 2, + 8, + 5, + 4, + 9, + 6, + 3, + 1 + ], + [ + 6, + 5, + 3, + 1, + 8, + 7, + 2, + 4, + 9 + ], + [ + 4, + 3, + 2, + 7, + 1, + 8, + 9, + 5, + 6 + ], + [ + 9, + 7, + 6, + 2, + 3, + 5, + 8, + 1, + 4 + ], + [ + 8, + 1, + 5, + 9, + 6, + 4, + 3, + 7, + 2 + ] + ] + }, + { + "id": 24, + "board": [ + [ + 7, + 0, + 1, + 0, + 0, + 0, + 2, + 6, + 4 + ], + [ + 0, + 2, + 9, + 0, + 0, + 0, + 5, + 0, + 0 + ], + [ + 8, + 5, + 4, + 3, + 6, + 2, + 0, + 0, + 0 + ], + [ + 2, + 8, + 3, + 9, + 0, + 6, + 7, + 0, + 5 + ], + [ + 1, + 9, + 0, + 0, + 2, + 0, + 3, + 0, + 0 + ], + [ + 4, + 6, + 0, + 0, + 3, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 9, + 0, + 8, + 0, + 0, + 0, + 6, + 5, + 0 + ] + ], + "solution": [ + [ + 7, + 3, + 1, + 5, + 8, + 9, + 2, + 6, + 4 + ], + [ + 6, + 2, + 9, + 1, + 4, + 7, + 5, + 3, + 8 + ], + [ + 8, + 5, + 4, + 3, + 6, + 2, + 1, + 7, + 9 + ], + [ + 2, + 8, + 3, + 9, + 1, + 6, + 7, + 4, + 5 + ], + [ + 1, + 9, + 5, + 7, + 2, + 4, + 3, + 8, + 6 + ], + [ + 4, + 6, + 7, + 8, + 3, + 5, + 9, + 1, + 2 + ], + [ + 3, + 1, + 2, + 6, + 5, + 8, + 4, + 9, + 7 + ], + [ + 5, + 7, + 6, + 4, + 9, + 1, + 8, + 2, + 3 + ], + [ + 9, + 4, + 8, + 2, + 7, + 3, + 6, + 5, + 1 + ] + ] + }, + { + "id": 25, + "board": [ + [ + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 3 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 8 + ], + [ + 0, + 8, + 7, + 0, + 0, + 0, + 5, + 0, + 1 + ], + [ + 0, + 5, + 8, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 9, + 0, + 0, + 0, + 4, + 0, + 8, + 5 + ], + [ + 0, + 3, + 1, + 7, + 5, + 8, + 9, + 6, + 0 + ], + [ + 0, + 7, + 0, + 8, + 2, + 6, + 4, + 1, + 9 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 8, + 3, + 6 + ], + [ + 8, + 6, + 0, + 0, + 0, + 0, + 0, + 5, + 0 + ] + ], + "solution": [ + [ + 5, + 2, + 4, + 1, + 8, + 7, + 6, + 9, + 3 + ], + [ + 6, + 1, + 3, + 5, + 9, + 2, + 7, + 4, + 8 + ], + [ + 9, + 8, + 7, + 4, + 6, + 3, + 5, + 2, + 1 + ], + [ + 2, + 5, + 8, + 6, + 1, + 9, + 3, + 7, + 4 + ], + [ + 7, + 9, + 6, + 2, + 3, + 4, + 1, + 8, + 5 + ], + [ + 4, + 3, + 1, + 7, + 5, + 8, + 9, + 6, + 2 + ], + [ + 3, + 7, + 5, + 8, + 2, + 6, + 4, + 1, + 9 + ], + [ + 1, + 4, + 2, + 9, + 7, + 5, + 8, + 3, + 6 + ], + [ + 8, + 6, + 9, + 3, + 4, + 1, + 2, + 5, + 7 + ] + ] + }, + { + "id": 26, + "board": [ + [ + 5, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 7 + ], + [ + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 5, + 4, + 1, + 6, + 8, + 3, + 7, + 2 + ], + [ + 2, + 6, + 7, + 0, + 3, + 9, + 0, + 0, + 0 + ], + [ + 0, + 1, + 8, + 2, + 7, + 0, + 0, + 0, + 0 + ], + [ + 6, + 8, + 9, + 7, + 1, + 2, + 0, + 0, + 3 + ], + [ + 0, + 0, + 5, + 9, + 4, + 0, + 0, + 0, + 0 + ], + [ + 4, + 2, + 0, + 0, + 0, + 6, + 7, + 0, + 0 + ] + ], + "solution": [ + [ + 5, + 4, + 2, + 3, + 8, + 1, + 6, + 9, + 7 + ], + [ + 7, + 3, + 1, + 6, + 9, + 4, + 2, + 8, + 5 + ], + [ + 8, + 9, + 6, + 5, + 2, + 7, + 4, + 3, + 1 + ], + [ + 9, + 5, + 4, + 1, + 6, + 8, + 3, + 7, + 2 + ], + [ + 2, + 6, + 7, + 4, + 3, + 9, + 1, + 5, + 8 + ], + [ + 3, + 1, + 8, + 2, + 7, + 5, + 9, + 6, + 4 + ], + [ + 6, + 8, + 9, + 7, + 1, + 2, + 5, + 4, + 3 + ], + [ + 1, + 7, + 5, + 9, + 4, + 3, + 8, + 2, + 6 + ], + [ + 4, + 2, + 3, + 8, + 5, + 6, + 7, + 1, + 9 + ] + ] + }, + { + "id": 27, + "board": [ + [ + 7, + 4, + 5, + 3, + 9, + 6, + 0, + 2, + 0 + ], + [ + 0, + 0, + 9, + 8, + 0, + 0, + 4, + 7, + 6 + ], + [ + 0, + 0, + 0, + 7, + 1, + 4, + 9, + 5, + 3 + ], + [ + 0, + 0, + 6, + 0, + 7, + 0, + 3, + 8, + 0 + ], + [ + 0, + 0, + 0, + 2, + 6, + 0, + 7, + 9, + 0 + ], + [ + 9, + 7, + 0, + 5, + 0, + 8, + 0, + 0, + 0 + ], + [ + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 4, + 7 + ] + ], + "solution": [ + [ + 7, + 4, + 5, + 3, + 9, + 6, + 1, + 2, + 8 + ], + [ + 1, + 3, + 9, + 8, + 2, + 5, + 4, + 7, + 6 + ], + [ + 6, + 8, + 2, + 7, + 1, + 4, + 9, + 5, + 3 + ], + [ + 4, + 2, + 6, + 9, + 7, + 1, + 3, + 8, + 5 + ], + [ + 5, + 1, + 8, + 2, + 6, + 3, + 7, + 9, + 4 + ], + [ + 9, + 7, + 3, + 5, + 4, + 8, + 2, + 6, + 1 + ], + [ + 3, + 6, + 7, + 4, + 8, + 2, + 5, + 1, + 9 + ], + [ + 8, + 9, + 4, + 1, + 5, + 7, + 6, + 3, + 2 + ], + [ + 2, + 5, + 1, + 6, + 3, + 9, + 8, + 4, + 7 + ] + ] + }, + { + "id": 28, + "board": [ + [ + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 1, + 2, + 0, + 4, + 0, + 3, + 0 + ], + [ + 8, + 4, + 3, + 0, + 7, + 0, + 6, + 9, + 5 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0 + ], + [ + 0, + 1, + 2, + 5, + 4, + 0, + 8, + 7, + 3 + ], + [ + 2, + 3, + 7, + 6, + 0, + 0, + 9, + 0, + 0 + ], + [ + 1, + 0, + 0, + 4, + 0, + 8, + 3, + 5, + 0 + ], + [ + 0, + 0, + 8, + 0, + 0, + 0, + 2, + 1, + 6 + ] + ], + "solution": [ + [ + 3, + 9, + 4, + 7, + 6, + 1, + 5, + 2, + 8 + ], + [ + 7, + 2, + 5, + 8, + 9, + 3, + 4, + 6, + 1 + ], + [ + 6, + 8, + 1, + 2, + 5, + 4, + 7, + 3, + 9 + ], + [ + 8, + 4, + 3, + 1, + 7, + 2, + 6, + 9, + 5 + ], + [ + 5, + 7, + 6, + 3, + 8, + 9, + 1, + 4, + 2 + ], + [ + 9, + 1, + 2, + 5, + 4, + 6, + 8, + 7, + 3 + ], + [ + 2, + 3, + 7, + 6, + 1, + 5, + 9, + 8, + 4 + ], + [ + 1, + 6, + 9, + 4, + 2, + 8, + 3, + 5, + 7 + ], + [ + 4, + 5, + 8, + 9, + 3, + 7, + 2, + 1, + 6 + ] + ] + }, + { + "id": 29, + "board": [ + [ + 2, + 1, + 8, + 0, + 0, + 6, + 0, + 4, + 9 + ], + [ + 4, + 5, + 7, + 0, + 0, + 9, + 0, + 0, + 0 + ], + [ + 6, + 9, + 0, + 0, + 0, + 4, + 0, + 0, + 0 + ], + [ + 5, + 4, + 2, + 0, + 8, + 1, + 0, + 0, + 3 + ], + [ + 3, + 7, + 6, + 0, + 0, + 2, + 9, + 8, + 1 + ], + [ + 9, + 8, + 1, + 0, + 0, + 0, + 5, + 2, + 4 + ], + [ + 0, + 3, + 0, + 0, + 0, + 0, + 4, + 0, + 7 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 2, + 1, + 8, + 5, + 7, + 6, + 3, + 4, + 9 + ], + [ + 4, + 5, + 7, + 3, + 2, + 9, + 6, + 1, + 8 + ], + [ + 6, + 9, + 3, + 8, + 1, + 4, + 2, + 7, + 5 + ], + [ + 5, + 4, + 2, + 9, + 8, + 1, + 7, + 6, + 3 + ], + [ + 3, + 7, + 6, + 4, + 5, + 2, + 9, + 8, + 1 + ], + [ + 9, + 8, + 1, + 6, + 3, + 7, + 5, + 2, + 4 + ], + [ + 1, + 3, + 5, + 2, + 6, + 8, + 4, + 9, + 7 + ], + [ + 7, + 2, + 4, + 1, + 9, + 3, + 8, + 5, + 6 + ], + [ + 8, + 6, + 9, + 7, + 4, + 5, + 1, + 3, + 2 + ] + ] + }, + { + "id": 30, + "board": [ + [ + 4, + 5, + 9, + 2, + 0, + 3, + 0, + 6, + 0 + ], + [ + 3, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 8, + 7, + 0, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 0, + 7, + 3, + 0, + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0 + ], + [ + 2, + 3, + 4, + 5, + 0, + 0, + 0, + 8, + 9 + ], + [ + 7, + 0, + 0, + 1, + 3, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 3, + 0, + 2, + 0, + 0, + 7, + 0 + ], + [ + 9, + 0, + 2, + 7, + 4, + 5, + 8, + 1, + 3 + ] + ], + "solution": [ + [ + 4, + 5, + 9, + 2, + 7, + 3, + 1, + 6, + 8 + ], + [ + 3, + 2, + 1, + 8, + 6, + 9, + 5, + 4, + 7 + ], + [ + 8, + 7, + 6, + 4, + 5, + 1, + 3, + 9, + 2 + ], + [ + 6, + 8, + 7, + 3, + 9, + 4, + 2, + 5, + 1 + ], + [ + 1, + 9, + 5, + 6, + 8, + 2, + 7, + 3, + 4 + ], + [ + 2, + 3, + 4, + 5, + 1, + 7, + 6, + 8, + 9 + ], + [ + 7, + 4, + 8, + 1, + 3, + 6, + 9, + 2, + 5 + ], + [ + 5, + 1, + 3, + 9, + 2, + 8, + 4, + 7, + 6 + ], + [ + 9, + 6, + 2, + 7, + 4, + 5, + 8, + 1, + 3 + ] + ] + }, + { + "id": 31, + "board": [ + [ + 0, + 7, + 5, + 4, + 0, + 0, + 0, + 8, + 0 + ], + [ + 6, + 8, + 1, + 7, + 0, + 5, + 0, + 0, + 2 + ], + [ + 0, + 0, + 3, + 0, + 8, + 6, + 1, + 5, + 7 + ], + [ + 5, + 0, + 0, + 3, + 0, + 7, + 6, + 4, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 5 + ], + [ + 0, + 0, + 7, + 0, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 8, + 7, + 2, + 5, + 0, + 0 + ], + [ + 0, + 5, + 0, + 0, + 0, + 0, + 8, + 0, + 0 + ], + [ + 0, + 3, + 0, + 5, + 0, + 9, + 0, + 0, + 4 + ] + ], + "solution": [ + [ + 2, + 7, + 5, + 4, + 3, + 1, + 9, + 8, + 6 + ], + [ + 6, + 8, + 1, + 7, + 9, + 5, + 4, + 3, + 2 + ], + [ + 4, + 9, + 3, + 2, + 8, + 6, + 1, + 5, + 7 + ], + [ + 5, + 1, + 8, + 3, + 2, + 7, + 6, + 4, + 9 + ], + [ + 3, + 2, + 4, + 9, + 6, + 8, + 7, + 1, + 5 + ], + [ + 9, + 6, + 7, + 1, + 5, + 4, + 3, + 2, + 8 + ], + [ + 1, + 4, + 9, + 8, + 7, + 2, + 5, + 6, + 3 + ], + [ + 7, + 5, + 2, + 6, + 4, + 3, + 8, + 9, + 1 + ], + [ + 8, + 3, + 6, + 5, + 1, + 9, + 2, + 7, + 4 + ] + ] + }, + { + "id": 32, + "board": [ + [ + 0, + 0, + 0, + 0, + 1, + 0, + 5, + 2, + 7 + ], + [ + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 7, + 0, + 4, + 8 + ], + [ + 9, + 0, + 0, + 0, + 0, + 2, + 0, + 7, + 6 + ], + [ + 0, + 0, + 2, + 7, + 0, + 1, + 0, + 5, + 9 + ], + [ + 5, + 7, + 0, + 6, + 9, + 4, + 0, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 6, + 4 + ], + [ + 0, + 0, + 5, + 0, + 0, + 0, + 7, + 0, + 3 + ], + [ + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 8, + 5 + ] + ], + "solution": [ + [ + 4, + 8, + 6, + 9, + 1, + 3, + 5, + 2, + 7 + ], + [ + 7, + 2, + 9, + 4, + 5, + 8, + 6, + 3, + 1 + ], + [ + 3, + 5, + 1, + 2, + 6, + 7, + 9, + 4, + 8 + ], + [ + 9, + 1, + 4, + 5, + 8, + 2, + 3, + 7, + 6 + ], + [ + 8, + 6, + 2, + 7, + 3, + 1, + 4, + 5, + 9 + ], + [ + 5, + 7, + 3, + 6, + 9, + 4, + 8, + 1, + 2 + ], + [ + 2, + 9, + 8, + 3, + 7, + 5, + 1, + 6, + 4 + ], + [ + 1, + 4, + 5, + 8, + 2, + 6, + 7, + 9, + 3 + ], + [ + 6, + 3, + 7, + 1, + 4, + 9, + 2, + 8, + 5 + ] + ] + }, + { + "id": 33, + "board": [ + [ + 2, + 8, + 3, + 4, + 0, + 0, + 9, + 0, + 6 + ], + [ + 0, + 1, + 0, + 2, + 0, + 9, + 3, + 8, + 7 + ], + [ + 9, + 5, + 7, + 8, + 3, + 6, + 1, + 2, + 4 + ], + [ + 0, + 7, + 8, + 0, + 2, + 3, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 9, + 0, + 8, + 0, + 3 + ], + [ + 0, + 0, + 9, + 6, + 8, + 0, + 2, + 0, + 0 + ], + [ + 8, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 2, + 8, + 3, + 4, + 1, + 7, + 9, + 5, + 6 + ], + [ + 4, + 1, + 6, + 2, + 5, + 9, + 3, + 8, + 7 + ], + [ + 9, + 5, + 7, + 8, + 3, + 6, + 1, + 2, + 4 + ], + [ + 5, + 7, + 8, + 1, + 2, + 3, + 4, + 6, + 9 + ], + [ + 6, + 2, + 4, + 7, + 9, + 5, + 8, + 1, + 3 + ], + [ + 1, + 3, + 9, + 6, + 8, + 4, + 2, + 7, + 5 + ], + [ + 8, + 9, + 5, + 3, + 6, + 1, + 7, + 4, + 2 + ], + [ + 3, + 4, + 1, + 5, + 7, + 2, + 6, + 9, + 8 + ], + [ + 7, + 6, + 2, + 9, + 4, + 8, + 5, + 3, + 1 + ] + ] + }, + { + "id": 34, + "board": [ + [ + 2, + 1, + 5, + 0, + 0, + 0, + 6, + 4, + 3 + ], + [ + 0, + 0, + 6, + 5, + 4, + 1, + 7, + 8, + 0 + ], + [ + 0, + 0, + 0, + 3, + 2, + 6, + 1, + 9, + 5 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 7, + 0 + ], + [ + 0, + 5, + 2, + 6, + 0, + 0, + 4, + 3, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 8, + 5, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 0, + 8 + ], + [ + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 6, + 7 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4 + ] + ], + "solution": [ + [ + 2, + 1, + 5, + 7, + 8, + 9, + 6, + 4, + 3 + ], + [ + 3, + 9, + 6, + 5, + 4, + 1, + 7, + 8, + 2 + ], + [ + 4, + 7, + 8, + 3, + 2, + 6, + 1, + 9, + 5 + ], + [ + 1, + 3, + 9, + 8, + 5, + 4, + 2, + 7, + 6 + ], + [ + 8, + 5, + 2, + 6, + 9, + 7, + 4, + 3, + 1 + ], + [ + 6, + 4, + 7, + 2, + 1, + 3, + 8, + 5, + 9 + ], + [ + 7, + 2, + 3, + 4, + 6, + 5, + 9, + 1, + 8 + ], + [ + 9, + 8, + 4, + 1, + 3, + 2, + 5, + 6, + 7 + ], + [ + 5, + 6, + 1, + 9, + 7, + 8, + 3, + 2, + 4 + ] + ] + }, + { + "id": 35, + "board": [ + [ + 0, + 0, + 7, + 4, + 5, + 0, + 9, + 0, + 0 + ], + [ + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 9, + 0, + 0, + 7, + 0, + 5, + 0 + ], + [ + 0, + 1, + 3, + 0, + 8, + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 6, + 1, + 3, + 4, + 0, + 0, + 9 + ], + [ + 0, + 4, + 8, + 6, + 0, + 5, + 3, + 2, + 1 + ], + [ + 4, + 0, + 1, + 9, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 9, + 2, + 5, + 0, + 3, + 0, + 0, + 0 + ], + [ + 0, + 6, + 5, + 0, + 0, + 0, + 0, + 9, + 0 + ] + ], + "solution": [ + [ + 6, + 2, + 7, + 4, + 5, + 1, + 9, + 3, + 8 + ], + [ + 5, + 8, + 4, + 3, + 9, + 6, + 2, + 1, + 7 + ], + [ + 1, + 3, + 9, + 8, + 2, + 7, + 4, + 5, + 6 + ], + [ + 7, + 1, + 3, + 2, + 8, + 9, + 6, + 4, + 5 + ], + [ + 2, + 5, + 6, + 1, + 3, + 4, + 8, + 7, + 9 + ], + [ + 9, + 4, + 8, + 6, + 7, + 5, + 3, + 2, + 1 + ], + [ + 4, + 7, + 1, + 9, + 6, + 2, + 5, + 8, + 3 + ], + [ + 8, + 9, + 2, + 5, + 1, + 3, + 7, + 6, + 4 + ], + [ + 3, + 6, + 5, + 7, + 4, + 8, + 1, + 9, + 2 + ] + ] + }, + { + "id": 36, + "board": [ + [ + 8, + 9, + 0, + 4, + 7, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 8, + 4 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 9 + ], + [ + 0, + 0, + 0, + 3, + 0, + 0, + 9, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 9, + 0, + 0, + 0, + 0 + ], + [ + 6, + 0, + 9, + 8, + 2, + 7, + 4, + 5, + 1 + ], + [ + 0, + 1, + 6, + 7, + 4, + 3, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 1, + 9, + 3, + 4, + 6 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 9, + 7 + ] + ], + "solution": [ + [ + 8, + 9, + 1, + 4, + 7, + 5, + 6, + 3, + 2 + ], + [ + 2, + 6, + 7, + 9, + 3, + 1, + 5, + 8, + 4 + ], + [ + 3, + 4, + 5, + 6, + 8, + 2, + 7, + 1, + 9 + ], + [ + 1, + 7, + 2, + 3, + 5, + 4, + 9, + 6, + 8 + ], + [ + 5, + 8, + 4, + 1, + 9, + 6, + 2, + 7, + 3 + ], + [ + 6, + 3, + 9, + 8, + 2, + 7, + 4, + 5, + 1 + ], + [ + 9, + 1, + 6, + 7, + 4, + 3, + 8, + 2, + 5 + ], + [ + 7, + 5, + 8, + 2, + 1, + 9, + 3, + 4, + 6 + ], + [ + 4, + 2, + 3, + 5, + 6, + 8, + 1, + 9, + 7 + ] + ] + }, + { + "id": 37, + "board": [ + [ + 0, + 0, + 0, + 2, + 4, + 0, + 0, + 5, + 0 + ], + [ + 6, + 0, + 2, + 0, + 5, + 0, + 3, + 0, + 4 + ], + [ + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 1, + 2 + ], + [ + 0, + 0, + 0, + 9, + 0, + 5, + 0, + 0, + 6 + ], + [ + 0, + 6, + 0, + 4, + 0, + 0, + 0, + 0, + 7 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 9 + ], + [ + 2, + 3, + 6, + 0, + 0, + 0, + 0, + 0, + 5 + ], + [ + 0, + 0, + 0, + 8, + 3, + 4, + 2, + 6, + 1 + ], + [ + 4, + 1, + 8, + 5, + 6, + 0, + 0, + 0, + 3 + ] + ], + "solution": [ + [ + 1, + 7, + 9, + 2, + 4, + 3, + 6, + 5, + 8 + ], + [ + 6, + 8, + 2, + 1, + 5, + 7, + 3, + 9, + 4 + ], + [ + 3, + 5, + 4, + 6, + 9, + 8, + 7, + 1, + 2 + ], + [ + 7, + 4, + 1, + 9, + 2, + 5, + 8, + 3, + 6 + ], + [ + 9, + 6, + 3, + 4, + 8, + 1, + 5, + 2, + 7 + ], + [ + 8, + 2, + 5, + 3, + 7, + 6, + 1, + 4, + 9 + ], + [ + 2, + 3, + 6, + 7, + 1, + 9, + 4, + 8, + 5 + ], + [ + 5, + 9, + 7, + 8, + 3, + 4, + 2, + 6, + 1 + ], + [ + 4, + 1, + 8, + 5, + 6, + 2, + 9, + 7, + 3 + ] + ] + }, + { + "id": 38, + "board": [ + [ + 0, + 0, + 0, + 7, + 0, + 1, + 0, + 0, + 2 + ], + [ + 0, + 0, + 9, + 4, + 0, + 5, + 0, + 7, + 0 + ], + [ + 0, + 0, + 7, + 8, + 0, + 6, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 9, + 7, + 0, + 0, + 0, + 0 + ], + [ + 7, + 0, + 2, + 6, + 5, + 0, + 0, + 0, + 4 + ], + [ + 9, + 0, + 0, + 2, + 0, + 0, + 7, + 0, + 0 + ], + [ + 8, + 0, + 4, + 1, + 6, + 2, + 3, + 0, + 7 + ], + [ + 0, + 0, + 0, + 5, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 7, + 0, + 3, + 4, + 9, + 0, + 6, + 0 + ] + ], + "solution": [ + [ + 4, + 8, + 6, + 7, + 3, + 1, + 5, + 9, + 2 + ], + [ + 1, + 3, + 9, + 4, + 2, + 5, + 6, + 7, + 8 + ], + [ + 5, + 2, + 7, + 8, + 9, + 6, + 1, + 4, + 3 + ], + [ + 6, + 4, + 3, + 9, + 7, + 8, + 2, + 1, + 5 + ], + [ + 7, + 1, + 2, + 6, + 5, + 3, + 9, + 8, + 4 + ], + [ + 9, + 5, + 8, + 2, + 1, + 4, + 7, + 3, + 6 + ], + [ + 8, + 9, + 4, + 1, + 6, + 2, + 3, + 5, + 7 + ], + [ + 3, + 6, + 1, + 5, + 8, + 7, + 4, + 2, + 9 + ], + [ + 2, + 7, + 5, + 3, + 4, + 9, + 8, + 6, + 1 + ] + ] + }, + { + "id": 39, + "board": [ + [ + 0, + 0, + 0, + 5, + 0, + 0, + 2, + 1, + 4 + ], + [ + 5, + 0, + 4, + 0, + 0, + 0, + 0, + 3, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 4, + 0, + 5, + 0 + ], + [ + 0, + 6, + 0, + 4, + 5, + 2, + 1, + 8, + 3 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 6 + ], + [ + 0, + 0, + 0, + 9, + 0, + 6, + 0, + 2, + 5 + ], + [ + 1, + 0, + 0, + 0, + 4, + 5, + 0, + 7, + 9 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 2 + ], + [ + 0, + 0, + 0, + 0, + 9, + 3, + 5, + 6, + 1 + ] + ], + "solution": [ + [ + 6, + 9, + 7, + 5, + 3, + 8, + 2, + 1, + 4 + ], + [ + 5, + 8, + 4, + 1, + 2, + 9, + 6, + 3, + 7 + ], + [ + 3, + 2, + 1, + 6, + 7, + 4, + 9, + 5, + 8 + ], + [ + 7, + 6, + 9, + 4, + 5, + 2, + 1, + 8, + 3 + ], + [ + 2, + 1, + 5, + 3, + 8, + 7, + 4, + 9, + 6 + ], + [ + 8, + 4, + 3, + 9, + 1, + 6, + 7, + 2, + 5 + ], + [ + 1, + 3, + 6, + 2, + 4, + 5, + 8, + 7, + 9 + ], + [ + 9, + 5, + 8, + 7, + 6, + 1, + 3, + 4, + 2 + ], + [ + 4, + 7, + 2, + 8, + 9, + 3, + 5, + 6, + 1 + ] + ] + }, + { + "id": 40, + "board": [ + [ + 0, + 8, + 9, + 7, + 0, + 0, + 6, + 2, + 0 + ], + [ + 3, + 0, + 5, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3 + ], + [ + 0, + 2, + 8, + 3, + 4, + 9, + 0, + 5, + 0 + ], + [ + 5, + 9, + 0, + 2, + 6, + 7, + 3, + 0, + 8 + ], + [ + 0, + 3, + 0, + 1, + 8, + 5, + 2, + 0, + 9 + ], + [ + 0, + 1, + 0, + 4, + 0, + 8, + 0, + 0, + 0 + ], + [ + 8, + 4, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 8, + 9, + 7, + 3, + 4, + 6, + 2, + 5 + ], + [ + 3, + 6, + 5, + 8, + 1, + 2, + 9, + 7, + 4 + ], + [ + 2, + 7, + 4, + 9, + 5, + 6, + 8, + 1, + 3 + ], + [ + 6, + 2, + 8, + 3, + 4, + 9, + 1, + 5, + 7 + ], + [ + 5, + 9, + 1, + 2, + 6, + 7, + 3, + 4, + 8 + ], + [ + 4, + 3, + 7, + 1, + 8, + 5, + 2, + 6, + 9 + ], + [ + 7, + 1, + 2, + 4, + 9, + 8, + 5, + 3, + 6 + ], + [ + 8, + 4, + 6, + 5, + 2, + 3, + 7, + 9, + 1 + ], + [ + 9, + 5, + 3, + 6, + 7, + 1, + 4, + 8, + 2 + ] + ] + } + ] + } + } +} \ No newline at end of file diff --git a/assets/fonts/Rubik-Regular.ttf b/assets/fonts/Rubik-Regular.ttf new file mode 100644 index 000000000..52b59ca4f Binary files /dev/null and b/assets/fonts/Rubik-Regular.ttf differ diff --git a/assets/fonts/Staatliches-Regular.ttf b/assets/fonts/Staatliches-Regular.ttf new file mode 100755 index 000000000..5d8ae49cc Binary files /dev/null and b/assets/fonts/Staatliches-Regular.ttf differ diff --git a/assets/fonts/Viga-Regular.ttf b/assets/fonts/Viga-Regular.ttf new file mode 100644 index 000000000..a4be8f12e Binary files /dev/null and b/assets/fonts/Viga-Regular.ttf differ diff --git a/assets/images/2.0x/header.png b/assets/images/2.0x/header.png new file mode 100755 index 000000000..147b27e0d Binary files /dev/null and b/assets/images/2.0x/header.png differ diff --git a/assets/images/2.0x/ic_back.png b/assets/images/2.0x/ic_back.png new file mode 100755 index 000000000..b4ffd3e1e Binary files /dev/null and b/assets/images/2.0x/ic_back.png differ diff --git a/assets/images/2.0x/ic_bell.png b/assets/images/2.0x/ic_bell.png new file mode 100755 index 000000000..42b378f53 Binary files /dev/null and b/assets/images/2.0x/ic_bell.png differ diff --git a/assets/images/2.0x/ic_board.png b/assets/images/2.0x/ic_board.png new file mode 100755 index 000000000..7ecd8a33d Binary files /dev/null and b/assets/images/2.0x/ic_board.png differ diff --git a/assets/images/2.0x/ic_erase.png b/assets/images/2.0x/ic_erase.png new file mode 100644 index 000000000..d54037e60 Binary files /dev/null and b/assets/images/2.0x/ic_erase.png differ diff --git a/assets/images/2.0x/ic_help.png b/assets/images/2.0x/ic_help.png new file mode 100755 index 000000000..e4b0c3899 Binary files /dev/null and b/assets/images/2.0x/ic_help.png differ diff --git a/assets/images/2.0x/ic_help_orange.png b/assets/images/2.0x/ic_help_orange.png new file mode 100755 index 000000000..ab3bd3332 Binary files /dev/null and b/assets/images/2.0x/ic_help_orange.png differ diff --git a/assets/images/2.0x/ic_help_pink.png b/assets/images/2.0x/ic_help_pink.png new file mode 100644 index 000000000..3acc2f16c Binary files /dev/null and b/assets/images/2.0x/ic_help_pink.png differ diff --git a/assets/images/2.0x/ic_logo.png b/assets/images/2.0x/ic_logo.png new file mode 100755 index 000000000..52ee07c74 Binary files /dev/null and b/assets/images/2.0x/ic_logo.png differ diff --git a/assets/images/2.0x/ic_played.png b/assets/images/2.0x/ic_played.png new file mode 100644 index 000000000..8fff6a972 Binary files /dev/null and b/assets/images/2.0x/ic_played.png differ diff --git a/assets/images/2.0x/ic_setting.png b/assets/images/2.0x/ic_setting.png new file mode 100755 index 000000000..4771e0a91 Binary files /dev/null and b/assets/images/2.0x/ic_setting.png differ diff --git a/assets/images/2.0x/ic_setting_large.png b/assets/images/2.0x/ic_setting_large.png new file mode 100755 index 000000000..b8f0d61d6 Binary files /dev/null and b/assets/images/2.0x/ic_setting_large.png differ diff --git a/assets/images/2.0x/ic_stars.png b/assets/images/2.0x/ic_stars.png new file mode 100644 index 000000000..ea06b42cc Binary files /dev/null and b/assets/images/2.0x/ic_stars.png differ diff --git a/assets/images/2.0x/ic_tou.png b/assets/images/2.0x/ic_tou.png new file mode 100644 index 000000000..d44e6488b Binary files /dev/null and b/assets/images/2.0x/ic_tou.png differ diff --git a/assets/images/2.0x/ic_win.png b/assets/images/2.0x/ic_win.png new file mode 100644 index 000000000..c5d673e6c Binary files /dev/null and b/assets/images/2.0x/ic_win.png differ diff --git a/assets/images/2.0x/pencil.png b/assets/images/2.0x/pencil.png new file mode 100755 index 000000000..ddf7629a9 Binary files /dev/null and b/assets/images/2.0x/pencil.png differ diff --git a/assets/images/2.0x/subheader.png b/assets/images/2.0x/subheader.png new file mode 100755 index 000000000..07bf35a4e Binary files /dev/null and b/assets/images/2.0x/subheader.png differ diff --git a/assets/images/3.0x/header.png b/assets/images/3.0x/header.png new file mode 100755 index 000000000..96525b750 Binary files /dev/null and b/assets/images/3.0x/header.png differ diff --git a/assets/images/3.0x/ic_back.png b/assets/images/3.0x/ic_back.png new file mode 100755 index 000000000..94096c3f1 Binary files /dev/null and b/assets/images/3.0x/ic_back.png differ diff --git a/assets/images/3.0x/ic_bell.png b/assets/images/3.0x/ic_bell.png new file mode 100755 index 000000000..8bded1aa6 Binary files /dev/null and b/assets/images/3.0x/ic_bell.png differ diff --git a/assets/images/3.0x/ic_board.png b/assets/images/3.0x/ic_board.png new file mode 100755 index 000000000..2e8347747 Binary files /dev/null and b/assets/images/3.0x/ic_board.png differ diff --git a/assets/images/3.0x/ic_erase.png b/assets/images/3.0x/ic_erase.png new file mode 100644 index 000000000..dac0ecb4a Binary files /dev/null and b/assets/images/3.0x/ic_erase.png differ diff --git a/assets/images/3.0x/ic_fullscreen.png b/assets/images/3.0x/ic_fullscreen.png new file mode 100644 index 000000000..e27e5fee8 Binary files /dev/null and b/assets/images/3.0x/ic_fullscreen.png differ diff --git a/assets/images/3.0x/ic_help.png b/assets/images/3.0x/ic_help.png new file mode 100755 index 000000000..dc367a5fe Binary files /dev/null and b/assets/images/3.0x/ic_help.png differ diff --git a/assets/images/3.0x/ic_help_orange.png b/assets/images/3.0x/ic_help_orange.png new file mode 100755 index 000000000..c3a0e0df2 Binary files /dev/null and b/assets/images/3.0x/ic_help_orange.png differ diff --git a/assets/images/3.0x/ic_help_pink.png b/assets/images/3.0x/ic_help_pink.png new file mode 100644 index 000000000..126b645e8 Binary files /dev/null and b/assets/images/3.0x/ic_help_pink.png differ diff --git a/assets/images/3.0x/ic_hint.png b/assets/images/3.0x/ic_hint.png new file mode 100644 index 000000000..28d1b3047 Binary files /dev/null and b/assets/images/3.0x/ic_hint.png differ diff --git a/assets/images/3.0x/ic_logo.png b/assets/images/3.0x/ic_logo.png new file mode 100755 index 000000000..56e3ccb86 Binary files /dev/null and b/assets/images/3.0x/ic_logo.png differ diff --git a/assets/images/3.0x/ic_pencil.png b/assets/images/3.0x/ic_pencil.png new file mode 100644 index 000000000..f5c60c742 Binary files /dev/null and b/assets/images/3.0x/ic_pencil.png differ diff --git a/assets/images/3.0x/ic_played.png b/assets/images/3.0x/ic_played.png new file mode 100644 index 000000000..5bb21a5e0 Binary files /dev/null and b/assets/images/3.0x/ic_played.png differ diff --git a/assets/images/3.0x/ic_reset.png b/assets/images/3.0x/ic_reset.png new file mode 100644 index 000000000..a7e6a8024 Binary files /dev/null and b/assets/images/3.0x/ic_reset.png differ diff --git a/assets/images/3.0x/ic_setting.png b/assets/images/3.0x/ic_setting.png new file mode 100755 index 000000000..84419632d Binary files /dev/null and b/assets/images/3.0x/ic_setting.png differ diff --git a/assets/images/3.0x/ic_setting_large.png b/assets/images/3.0x/ic_setting_large.png new file mode 100755 index 000000000..88601bdc5 Binary files /dev/null and b/assets/images/3.0x/ic_setting_large.png differ diff --git a/assets/images/3.0x/ic_stars.png b/assets/images/3.0x/ic_stars.png new file mode 100644 index 000000000..2a5fe0c26 Binary files /dev/null and b/assets/images/3.0x/ic_stars.png differ diff --git a/assets/images/3.0x/ic_tou.png b/assets/images/3.0x/ic_tou.png new file mode 100644 index 000000000..b1774874e Binary files /dev/null and b/assets/images/3.0x/ic_tou.png differ diff --git a/assets/images/3.0x/ic_win.png b/assets/images/3.0x/ic_win.png new file mode 100644 index 000000000..ab8e399c3 Binary files /dev/null and b/assets/images/3.0x/ic_win.png differ diff --git a/assets/images/3.0x/pencil.png b/assets/images/3.0x/pencil.png new file mode 100755 index 000000000..73da03be2 Binary files /dev/null and b/assets/images/3.0x/pencil.png differ diff --git a/assets/images/3.0x/subheader.png b/assets/images/3.0x/subheader.png new file mode 100755 index 000000000..eb898d614 Binary files /dev/null and b/assets/images/3.0x/subheader.png differ diff --git a/assets/images/header.png b/assets/images/header.png new file mode 100755 index 000000000..8c61cbef4 Binary files /dev/null and b/assets/images/header.png differ diff --git a/assets/images/ic_back.png b/assets/images/ic_back.png new file mode 100755 index 000000000..f230831ff Binary files /dev/null and b/assets/images/ic_back.png differ diff --git a/assets/images/ic_badge.png b/assets/images/ic_badge.png new file mode 100644 index 000000000..57e22eb4e Binary files /dev/null and b/assets/images/ic_badge.png differ diff --git a/assets/images/ic_bell.png b/assets/images/ic_bell.png new file mode 100755 index 000000000..54f8b9a18 Binary files /dev/null and b/assets/images/ic_bell.png differ diff --git a/assets/images/ic_board.png b/assets/images/ic_board.png new file mode 100755 index 000000000..d5f99d6e1 Binary files /dev/null and b/assets/images/ic_board.png differ diff --git a/assets/images/ic_erase.png b/assets/images/ic_erase.png new file mode 100644 index 000000000..3122a9a4b Binary files /dev/null and b/assets/images/ic_erase.png differ diff --git a/assets/images/ic_fullscreen.png b/assets/images/ic_fullscreen.png new file mode 100644 index 000000000..543f00d69 Binary files /dev/null and b/assets/images/ic_fullscreen.png differ diff --git a/assets/images/ic_help.png b/assets/images/ic_help.png new file mode 100755 index 000000000..f8b38d21f Binary files /dev/null and b/assets/images/ic_help.png differ diff --git a/assets/images/ic_help_orange.png b/assets/images/ic_help_orange.png new file mode 100755 index 000000000..2410e73ca Binary files /dev/null and b/assets/images/ic_help_orange.png differ diff --git a/assets/images/ic_help_pink.png b/assets/images/ic_help_pink.png new file mode 100644 index 000000000..2410e73ca Binary files /dev/null and b/assets/images/ic_help_pink.png differ diff --git a/assets/images/ic_hint.png b/assets/images/ic_hint.png new file mode 100644 index 000000000..af3b36f68 Binary files /dev/null and b/assets/images/ic_hint.png differ diff --git a/assets/images/ic_launcher.png b/assets/images/ic_launcher.png new file mode 100644 index 000000000..fbf76fff8 Binary files /dev/null and b/assets/images/ic_launcher.png differ diff --git a/assets/images/ic_logo.png b/assets/images/ic_logo.png new file mode 100755 index 000000000..bd2095531 Binary files /dev/null and b/assets/images/ic_logo.png differ diff --git a/assets/images/ic_logo_large.png b/assets/images/ic_logo_large.png new file mode 100644 index 000000000..d1477dbbd Binary files /dev/null and b/assets/images/ic_logo_large.png differ diff --git a/assets/images/ic_name.png b/assets/images/ic_name.png new file mode 100644 index 000000000..94ee37bfa Binary files /dev/null and b/assets/images/ic_name.png differ diff --git a/assets/images/ic_pencil.png b/assets/images/ic_pencil.png new file mode 100644 index 000000000..f1ab990ac Binary files /dev/null and b/assets/images/ic_pencil.png differ diff --git a/assets/images/ic_played.png b/assets/images/ic_played.png new file mode 100644 index 000000000..9caa96625 Binary files /dev/null and b/assets/images/ic_played.png differ diff --git a/assets/images/ic_reset.png b/assets/images/ic_reset.png new file mode 100644 index 000000000..af7be1eea Binary files /dev/null and b/assets/images/ic_reset.png differ diff --git a/assets/images/ic_setting.png b/assets/images/ic_setting.png new file mode 100755 index 000000000..bbc22386b Binary files /dev/null and b/assets/images/ic_setting.png differ diff --git a/assets/images/ic_setting_large.png b/assets/images/ic_setting_large.png new file mode 100755 index 000000000..2a2a68212 Binary files /dev/null and b/assets/images/ic_setting_large.png differ diff --git a/assets/images/ic_stars.png b/assets/images/ic_stars.png new file mode 100644 index 000000000..9d7ce55f3 Binary files /dev/null and b/assets/images/ic_stars.png differ diff --git a/assets/images/ic_tou.png b/assets/images/ic_tou.png new file mode 100644 index 000000000..bc144dc74 Binary files /dev/null and b/assets/images/ic_tou.png differ diff --git a/assets/images/ic_win.png b/assets/images/ic_win.png new file mode 100644 index 000000000..9be59f525 Binary files /dev/null and b/assets/images/ic_win.png differ diff --git a/assets/images/pencil.png b/assets/images/pencil.png new file mode 100755 index 000000000..e9a99f85e Binary files /dev/null and b/assets/images/pencil.png differ diff --git a/assets/images/subheader.png b/assets/images/subheader.png new file mode 100755 index 000000000..8f102c268 Binary files /dev/null and b/assets/images/subheader.png differ diff --git a/generation/generation.js b/generation/generation.js new file mode 100644 index 000000000..693e575e8 --- /dev/null +++ b/generation/generation.js @@ -0,0 +1,33 @@ +const sudoku = require('./sudoku'); + +var startingLevel = 1; +var difficulty = "very-hard"; +var numberOfLevels = 40; +var levels = []; + +for (let i = 0; i < numberOfLevels; i++, startingLevel++) { + var initialLevel = sudoku.generate(difficulty, true); + var solution = sudoku.solve(initialLevel); + var level = initialLevel.replace(/\./g, '0'); + var numberBoard = sudoku.board_string_to_grid(level).map(function (innerBoard, index) { + return innerBoard.map(function (val, index) { + return parseInt(val, 10); + }); + });; + + var solutionBoard = sudoku.board_string_to_grid(solution).map(function (innerBoard, index) { + return innerBoard.map(function (val, index) { + return parseInt(val, 10); + }); + });; + + var payload = { + id: startingLevel, + board: numberBoard, + solution: solutionBoard + } + levels.push(payload); +}; + +var json = JSON.stringify(levels); +console.log(json); diff --git a/generation/sudoku.js b/generation/sudoku.js new file mode 100644 index 000000000..a0fbc5398 --- /dev/null +++ b/generation/sudoku.js @@ -0,0 +1,821 @@ +/* + Sudoku.js + --------- + + A Sudoku puzzle generator and solver JavaScript library. + + Please see the README for more details. +*/ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], factory); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals (root is window) + root.sudoku = factory(); + } +}(typeof self !== 'undefined' ? self : this, function () { + var sudoku = {}; + + sudoku.DIGITS = "123456789"; // Allowed sudoku.DIGITS + var ROWS = "ABCDEFGHI"; // Row lables + var COLS = sudoku.DIGITS; // Column lables + var SQUARES = null; // Square IDs + + var UNITS = null; // All units (row, column, or box) + var SQUARE_UNITS_MAP = null; // Squares -> units map + var SQUARE_PEERS_MAP = null; // Squares -> peers map + + var MIN_GIVENS = 17; // Minimum number of givens + var NR_SQUARES = 81; // Number of squares + + // Define difficulties by how many squares are given to the player in a new + // puzzle. + var DIFFICULTY = { + "easy": 62, + "medium": 53, + "hard": 44, + "very-hard": 35, + "insane": 26, + "inhuman": 17, + }; + + // Blank character and board representation + sudoku.BLANK_CHAR = '.'; + sudoku.BLANK_BOARD = "...................................................." + + "............................."; + + // Init + // ------------------------------------------------------------------------- + function initialize() { + /* Initialize the Sudoku library (invoked after library load) + */ + SQUARES = sudoku._cross(ROWS, COLS); + UNITS = sudoku._get_all_units(ROWS, COLS); + SQUARE_UNITS_MAP = sudoku._get_square_units_map(SQUARES, UNITS); + SQUARE_PEERS_MAP = sudoku._get_square_peers_map(SQUARES, + SQUARE_UNITS_MAP); + } + + // Generate + // ------------------------------------------------------------------------- + sudoku.generate = function (difficulty, unique) { + /* Generate a new Sudoku puzzle of a particular `difficulty`, e.g., + + // Generate an "easy" sudoku puzzle + sudoku.generate("easy"); + + + Difficulties are as follows, and represent the number of given squares: + + "easy": 61 + "medium": 52 + "hard": 43 + "very-hard": 34 + "insane": 25 + "inhuman": 17 + + + You may also enter a custom number of squares to be given, e.g., + + // Generate a new Sudoku puzzle with 60 given squares + sudoku.generate(60) + + + `difficulty` must be a number between 17 and 81 inclusive. If it's + outside of that range, `difficulty` will be set to the closest bound, + e.g., 0 -> 17, and 100 -> 81. + + + By default, the puzzles are unique, uless you set `unique` to false. + (Note: Puzzle uniqueness is not yet implemented, so puzzles are *not* + guaranteed to have unique solutions) + + TODO: Implement puzzle uniqueness + */ + + // If `difficulty` is a string or undefined, convert it to a number or + // default it to "easy" if undefined. + if (typeof difficulty === "string" || typeof difficulty === "undefined") { + difficulty = DIFFICULTY[difficulty] || DIFFICULTY.easy; + } + + // Force difficulty between 17 and 81 inclusive + difficulty = sudoku._force_range(difficulty, NR_SQUARES + 1, + MIN_GIVENS); + + // Default unique to true + unique = unique || true; + + // Get a set of squares and all possible candidates for each square + var blank_board = ""; + for (var i = 0; i < NR_SQUARES; ++i) { + blank_board += '.'; + } + var candidates = sudoku._get_candidates_map(blank_board); + + // For each item in a shuffled list of squares + var shuffled_squares = sudoku._shuffle(SQUARES); + for (var si in shuffled_squares) { + var square = shuffled_squares[si]; + + // If an assignment of a random chioce causes a contradictoin, give + // up and try again + var rand_candidate_idx = + sudoku._rand_range(candidates[square].length); + var rand_candidate = candidates[square][rand_candidate_idx]; + if (!sudoku._assign(candidates, square, rand_candidate)) { + break; + } + + // Make a list of all single candidates + var single_candidates = []; + for (var si in SQUARES) { + var square = SQUARES[si]; + + if (candidates[square].length == 1) { + single_candidates.push(candidates[square]); + } + } + + // If we have at least difficulty, and the unique candidate count is + // at least 8, return the puzzle! + if (single_candidates.length >= difficulty && + sudoku._strip_dups(single_candidates).length >= 8) { + var board = ""; + var givens_idxs = []; + for (var i in SQUARES) { + var square = SQUARES[i]; + if (candidates[square].length == 1) { + board += candidates[square]; + givens_idxs.push(i); + } else { + board += sudoku.BLANK_CHAR; + } + } + + // If we have more than `difficulty` givens, remove some random + // givens until we're down to exactly `difficulty` + var nr_givens = givens_idxs.length; + if (nr_givens > difficulty) { + givens_idxs = sudoku._shuffle(givens_idxs); + for (var i = 0; i < nr_givens - difficulty; ++i) { + var target = parseInt(givens_idxs[i]); + board = board.substr(0, target) + sudoku.BLANK_CHAR + + board.substr(target + 1); + } + } + + // Double check board is solvable + // TODO: Make a standalone board checker. Solve is expensive. + if (sudoku.solve(board)) { + return board; + } + } + } + + // Give up and try a new puzzle + return sudoku.generate(difficulty); + }; + + // Solve + // ------------------------------------------------------------------------- + sudoku.solve = function (board, reverse) { + /* Solve a sudoku puzzle given a sudoku `board`, i.e., an 81-character + string of sudoku.DIGITS, 1-9, and spaces identified by '.', representing the + squares. There must be a minimum of 17 givens. If the given board has no + solutions, return false. + + Optionally set `reverse` to solve "backwards", i.e., rotate through the + possibilities in reverse. Useful for checking if there is more than one + solution. + */ + + // Assure a valid board + var report = sudoku.validate_board(board); + if (report !== true) { + throw report; + } + + // Check number of givens is at least MIN_GIVENS + var nr_givens = 0; + for (var i in board) { + if (board[i] !== sudoku.BLANK_CHAR && sudoku._in(board[i], sudoku.DIGITS)) { + ++nr_givens; + } + } + if (nr_givens < MIN_GIVENS) { + throw "Too few givens. Minimum givens is " + MIN_GIVENS; + } + + // Default reverse to false + reverse = reverse || false; + + var candidates = sudoku._get_candidates_map(board); + var result = sudoku._search(candidates, reverse); + + if (result) { + var solution = ""; + for (var square in result) { + solution += result[square]; + } + return solution; + } + return false; + }; + + sudoku.get_candidates = function (board) { + /* Return all possible candidatees for each square as a grid of + candidates, returnning `false` if a contradiction is encountered. + + Really just a wrapper for sudoku._get_candidates_map for programmer + consumption. + */ + + // Assure a valid board + var report = sudoku.validate_board(board); + if (report !== true) { + throw report; + } + + // Get a candidates map + var candidates_map = sudoku._get_candidates_map(board); + + // If there's an error, return false + if (!candidates_map) { + return false; + } + + // Transform candidates map into grid + var rows = []; + var cur_row = []; + var i = 0; + for (var square in candidates_map) { + var candidates = candidates_map[square]; + cur_row.push(candidates); + if (i % 9 == 8) { + rows.push(cur_row); + cur_row = []; + } + ++i; + } + return rows; + } + + sudoku._get_candidates_map = function (board) { + /* Get all possible candidates for each square as a map in the form + {square: sudoku.DIGITS} using recursive constraint propagation. Return `false` + if a contradiction is encountered + */ + + // Assure a valid board + var report = sudoku.validate_board(board); + if (report !== true) { + throw report; + } + + var candidate_map = {}; + var squares_values_map = sudoku._get_square_vals_map(board); + + // Start by assigning every digit as a candidate to every square + for (var si in SQUARES) { + candidate_map[SQUARES[si]] = sudoku.DIGITS; + } + + // For each non-blank square, assign its value in the candidate map and + // propigate. + for (var square in squares_values_map) { + var val = squares_values_map[square]; + + if (sudoku._in(val, sudoku.DIGITS)) { + var new_candidates = sudoku._assign(candidate_map, square, val); + + // Fail if we can't assign val to square + if (!new_candidates) { + return false; + } + } + } + + return candidate_map; + }; + + sudoku._search = function (candidates, reverse) { + /* Given a map of squares -> candiates, using depth-first search, + recursively try all possible values until a solution is found, or false + if no solution exists. + */ + + // Return if error in previous iteration + if (!candidates) { + return false; + } + + // Default reverse to false + reverse = reverse || false; + + // If only one candidate for every square, we've a solved puzzle! + // Return the candidates map. + var max_nr_candidates = 0; + var max_candidates_square = null; + for (var si in SQUARES) { + var square = SQUARES[si]; + + var nr_candidates = candidates[square].length; + + if (nr_candidates > max_nr_candidates) { + max_nr_candidates = nr_candidates; + max_candidates_square = square; + } + } + if (max_nr_candidates === 1) { + return candidates; + } + + // Choose the blank square with the fewest possibilities > 1 + var min_nr_candidates = 10; + var min_candidates_square = null; + for (si in SQUARES) { + var square = SQUARES[si]; + + var nr_candidates = candidates[square].length; + + if (nr_candidates < min_nr_candidates && nr_candidates > 1) { + min_nr_candidates = nr_candidates; + min_candidates_square = square; + } + } + + // Recursively search through each of the candidates of the square + // starting with the one with fewest candidates. + + // Rotate through the candidates forwards + var min_candidates = candidates[min_candidates_square]; + if (!reverse) { + for (var vi in min_candidates) { + var val = min_candidates[vi]; + + // TODO: Implement a non-rediculous deep copy function + var candidates_copy = JSON.parse(JSON.stringify(candidates)); + var candidates_next = sudoku._search( + sudoku._assign(candidates_copy, min_candidates_square, val) + ); + + if (candidates_next) { + return candidates_next; + } + } + + // Rotate through the candidates backwards + } else { + for (var vi = min_candidates.length - 1; vi >= 0; --vi) { + var val = min_candidates[vi]; + + // TODO: Implement a non-rediculous deep copy function + var candidates_copy = JSON.parse(JSON.stringify(candidates)); + var candidates_next = sudoku._search( + sudoku._assign(candidates_copy, min_candidates_square, val), + reverse + ); + + if (candidates_next) { + return candidates_next; + } + } + } + + // If we get through all combinations of the square with the fewest + // candidates without finding an answer, there isn't one. Return false. + return false; + }; + + sudoku._assign = function (candidates, square, val) { + /* Eliminate all values, *except* for `val`, from `candidates` at + `square` (candidates[square]), and propagate. Return the candidates map + when finished. If a contradiciton is found, return false. + + WARNING: This will modify the contents of `candidates` directly. + */ + + // Grab a list of canidates without 'val' + var other_vals = candidates[square].replace(val, ""); + + // Loop through all other values and eliminate them from the candidates + // at the current square, and propigate. If at any point we get a + // contradiction, return false. + for (var ovi in other_vals) { + var other_val = other_vals[ovi]; + + var candidates_next = + sudoku._eliminate(candidates, square, other_val); + + if (!candidates_next) { + //console.log("Contradiction found by _eliminate."); + return false; + } + } + + return candidates; + }; + + sudoku._eliminate = function (candidates, square, val) { + /* Eliminate `val` from `candidates` at `square`, (candidates[square]), + and propagate when values or places <= 2. Return updated candidates, + unless a contradiction is detected, in which case, return false. + + WARNING: This will modify the contents of `candidates` directly. + */ + + // If `val` has already been eliminated from candidates[square], return + // with candidates. + if (!sudoku._in(val, candidates[square])) { + return candidates; + } + + // Remove `val` from candidates[square] + candidates[square] = candidates[square].replace(val, ''); + + // If the square has only candidate left, eliminate that value from its + // peers + var nr_candidates = candidates[square].length; + if (nr_candidates === 1) { + var target_val = candidates[square]; + + for (var pi in SQUARE_PEERS_MAP[square]) { + var peer = SQUARE_PEERS_MAP[square][pi]; + + var candidates_new = + sudoku._eliminate(candidates, peer, target_val); + + if (!candidates_new) { + return false; + } + } + + // Otherwise, if the square has no candidates, we have a contradiction. + // Return false. + } if (nr_candidates === 0) { + return false; + } + + // If a unit is reduced to only one place for a value, then assign it + for (var ui in SQUARE_UNITS_MAP[square]) { + var unit = SQUARE_UNITS_MAP[square][ui]; + + var val_places = []; + for (var si in unit) { + var unit_square = unit[si]; + if (sudoku._in(val, candidates[unit_square])) { + val_places.push(unit_square); + } + } + + // If there's no place for this value, we have a contradition! + // return false + if (val_places.length === 0) { + return false; + + // Otherwise the value can only be in one place. Assign it there. + } else if (val_places.length === 1) { + var candidates_new = + sudoku._assign(candidates, val_places[0], val); + + if (!candidates_new) { + return false; + } + } + } + + return candidates; + }; + + + // Square relationships + // ------------------------------------------------------------------------- + // Squares, and their relationships with values, units, and peers. + + sudoku._get_square_vals_map = function (board) { + /* Return a map of squares -> values + */ + var squares_vals_map = {}; + + // Make sure `board` is a string of length 81 + if (board.length != SQUARES.length) { + throw "Board/squares length mismatch."; + + } else { + for (var i in SQUARES) { + squares_vals_map[SQUARES[i]] = board[i]; + } + } + + return squares_vals_map; + }; + + sudoku._get_square_units_map = function (squares, units) { + /* Return a map of `squares` and their associated units (row, col, box) + */ + var square_unit_map = {}; + + // For every square... + for (var si in squares) { + var cur_square = squares[si]; + + // Maintain a list of the current square's units + var cur_square_units = []; + + // Look through the units, and see if the current square is in it, + // and if so, add it to the list of of the square's units. + for (var ui in units) { + var cur_unit = units[ui]; + + if (cur_unit.indexOf(cur_square) !== -1) { + cur_square_units.push(cur_unit); + } + } + + // Save the current square and its units to the map + square_unit_map[cur_square] = cur_square_units; + } + + return square_unit_map; + }; + + sudoku._get_square_peers_map = function (squares, units_map) { + /* Return a map of `squares` and their associated peers, i.e., a set of + other squares in the square's unit. + */ + var square_peers_map = {}; + + // For every square... + for (var si in squares) { + var cur_square = squares[si]; + var cur_square_units = units_map[cur_square]; + + // Maintain list of the current square's peers + var cur_square_peers = []; + + // Look through the current square's units map... + for (var sui in cur_square_units) { + var cur_unit = cur_square_units[sui]; + + for (var ui in cur_unit) { + var cur_unit_square = cur_unit[ui]; + + if (cur_square_peers.indexOf(cur_unit_square) === -1 && + cur_unit_square !== cur_square) { + cur_square_peers.push(cur_unit_square); + } + } + } + + // Save the current square an its associated peers to the map + square_peers_map[cur_square] = cur_square_peers; + } + + return square_peers_map; + }; + + sudoku._get_all_units = function (rows, cols) { + /* Return a list of all units (rows, cols, boxes) + */ + var units = []; + + // Rows + for (var ri in rows) { + units.push(sudoku._cross(rows[ri], cols)); + } + + // Columns + for (var ci in cols) { + units.push(sudoku._cross(rows, cols[ci])); + } + + // Boxes + var row_squares = ["ABC", "DEF", "GHI"]; + var col_squares = ["123", "456", "789"]; + for (var rsi in row_squares) { + for (var csi in col_squares) { + units.push(sudoku._cross(row_squares[rsi], col_squares[csi])); + } + } + + return units; + }; + + + // Conversions + // ------------------------------------------------------------------------- + sudoku.board_string_to_grid = function (board_string) { + /* Convert a board string to a two-dimensional array + */ + var rows = []; + var cur_row = []; + for (var i in board_string) { + cur_row.push(board_string[i]); + if (i % 9 == 8) { + rows.push(cur_row); + cur_row = []; + } + } + return rows; + }; + + sudoku.board_grid_to_string = function (board_grid) { + /* Convert a board grid to a string + */ + var board_string = ""; + for (var r = 0; r < 9; ++r) { + for (var c = 0; c < 9; ++c) { + board_string += board_grid[r][c]; + } + } + return board_string; + }; + + + // Utility + // ------------------------------------------------------------------------- + + sudoku.print_board = function (board) { + /* Print a sudoku `board` to the console. + */ + + // Assure a valid board + var report = sudoku.validate_board(board); + if (report !== true) { + throw report; + } + + var V_PADDING = " "; // Insert after each square + var H_PADDING = '\n'; // Insert after each row + + var V_BOX_PADDING = " "; // Box vertical padding + var H_BOX_PADDING = '\n'; // Box horizontal padding + + var display_string = ""; + + for (var i in board) { + var square = board[i]; + + // Add the square and some padding + display_string += square + V_PADDING; + + // Vertical edge of a box, insert v. box padding + if (i % 3 === 2) { + display_string += V_BOX_PADDING; + } + + // End of a line, insert horiz. padding + if (i % 9 === 8) { + display_string += H_PADDING; + } + + // Horizontal edge of a box, insert h. box padding + if (i % 27 === 26) { + display_string += H_BOX_PADDING; + } + } + + console.log(display_string); + }; + + sudoku.validate_board = function (board) { + /* Return if the given `board` is valid or not. If it's valid, return + true. If it's not, return a string of the reason why it's not. + */ + + // Check for empty board + if (!board) { + return "Empty board"; + } + + // Invalid board length + if (board.length !== NR_SQUARES) { + return "Invalid board size. Board must be exactly " + NR_SQUARES + + " squares."; + } + + // Check for invalid characters + for (var i in board) { + if (!sudoku._in(board[i], sudoku.DIGITS) && board[i] !== sudoku.BLANK_CHAR) { + return "Invalid board character encountered at index " + i + + ": " + board[i]; + } + } + + // Otherwise, we're good. Return true. + return true; + }; + + sudoku._cross = function (a, b) { + /* Cross product of all elements in `a` and `b`, e.g., + sudoku._cross("abc", "123") -> + ["a1", "a2", "a3", "b1", "b2", "b3", "c1", "c2", "c3"] + */ + var result = []; + for (var ai in a) { + for (var bi in b) { + result.push(a[ai] + b[bi]); + } + } + return result; + }; + + sudoku._in = function (v, seq) { + /* Return if a value `v` is in sequence `seq`. + */ + return seq.indexOf(v) !== -1; + }; + + sudoku._first_true = function (seq) { + /* Return the first element in `seq` that is true. If no element is + true, return false. + */ + for (var i in seq) { + if (seq[i]) { + return seq[i]; + } + } + return false; + }; + + sudoku._shuffle = function (seq) { + /* Return a shuffled version of `seq` + */ + + // Create an array of the same size as `seq` filled with false + var shuffled = []; + for (var i = 0; i < seq.length; ++i) { + shuffled.push(false); + } + + for (var i in seq) { + var ti = sudoku._rand_range(seq.length); + + while (shuffled[ti]) { + ti = (ti + 1) > (seq.length - 1) ? 0 : (ti + 1); + } + + shuffled[ti] = seq[i]; + } + + return shuffled; + }; + + sudoku._rand_range = function (max, min) { + /* Get a random integer in the range of `min` to `max` (non inclusive). + If `min` not defined, default to 0. If `max` not defined, throw an + error. + */ + min = min || 0; + if (max) { + return Math.floor(Math.random() * (max - min)) + min; + } else { + throw "Range undefined"; + } + }; + + sudoku._strip_dups = function (seq) { + /* Strip duplicate values from `seq` + */ + var seq_set = []; + var dup_map = {}; + for (var i in seq) { + var e = seq[i]; + if (!dup_map[e]) { + seq_set.push(e); + dup_map[e] = true; + } + } + return seq_set; + }; + + sudoku._force_range = function (nr, max, min) { + /* Force `nr` to be within the range from `min` to, but not including, + `max`. `min` is optional, and will default to 0. If `nr` is undefined, + treat it as zero. + */ + min = min || 0 + nr = nr || 0 + if (nr < min) { + return min; + } + if (nr > max) { + return max; + } + return nr + } + + // Initialize library after load + initialize(); + + return sudoku; +})); + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee85..e8efba114 100644 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Flutter/Flutter.podspec b/ios/Flutter/Flutter.podspec new file mode 100644 index 000000000..5ca30416b --- /dev/null +++ b/ios/Flutter/Flutter.podspec @@ -0,0 +1,18 @@ +# +# NOTE: This podspec is NOT to be published. It is only used as a local source! +# + +Pod::Spec.new do |s| + s.name = 'Flutter' + s.version = '1.0.0' + s.summary = 'High-performance, high-fidelity mobile apps.' + s.description = <<-DESC +Flutter provides an easy and productive way to build and deploy high-performance mobile apps for Android and iOS. + DESC + s.homepage = 'https://flutter.io' + s.license = { :type => 'MIT' } + s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } + s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s } + s.ios.deployment_target = '8.0' + s.vendored_frameworks = 'Flutter.framework' +end diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee85..399e9340e 100644 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 000000000..3dd946351 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,88 @@ +platform :ios, '10.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' +ENV['SWIFT_VERSION'] = '5.0' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def parse_KV_file(file, separator='=') + file_abs_path = File.expand_path(file) + if !File.exists? file_abs_path + return []; + end + generated_key_values = {} + skip_line_start_symbols = ["#", "/"] + File.foreach(file_abs_path) do |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + generated_key_values[podname] = podpath + else + puts "Invalid plugin specification: #{line}" + end + end + generated_key_values +end + +target 'Runner' do + # Flutter Pod + use_frameworks! + copied_flutter_dir = File.join(__dir__, 'Flutter') + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. + + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') + unless File.exist?(generated_xcode_build_settings_path) + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; + + unless File.exist?(copied_framework_path) + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) + end + unless File.exist?(copied_podspec_path) + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) + end + end + + # Keep pod path relative so it can be checked into Podfile.lock. + pod 'Flutter', :path => 'Flutter' + + # Plugin Pods + + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock + # referring to absolute paths on developers' machines. + system('rm -rf .symlinks') + system('mkdir -p .symlinks/plugins') + plugin_pods = parse_KV_file('../.flutter-plugins') + plugin_pods.each do |name, path| + symlink = File.join('.symlinks', 'plugins', name) + File.symlink(path, symlink) + pod name, :path => File.join(symlink, 'ios') + end +end + +# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. +install! 'cocoapods', :disable_input_output_paths => true + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0' + end + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 000000000..27b7a1d13 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,197 @@ +PODS: + - Crashlytics (3.14.0): + - Fabric (~> 1.10.2) + - Fabric (1.10.2) + - Firebase/AdMob (6.18.0): + - Firebase/CoreOnly + - Google-Mobile-Ads-SDK (~> 7.50) + - Firebase/Analytics (6.18.0): + - Firebase/Core + - Firebase/Core (6.18.0): + - Firebase/CoreOnly + - FirebaseAnalytics (= 6.3.0) + - Firebase/CoreOnly (6.18.0): + - FirebaseCore (= 6.6.3) + - firebase_admob (0.0.1): + - Firebase/AdMob + - Firebase/Core + - Flutter + - firebase_analytics (0.0.1): + - Firebase/Analytics (~> 6.0) + - Firebase/Core + - Flutter + - firebase_core (0.0.1): + - Firebase/Core + - Flutter + - firebase_core_web (0.1.0): + - Flutter + - firebase_crashlytics (0.0.1): + - Crashlytics + - Fabric + - Firebase/Core + - Flutter + - FirebaseAnalytics (6.3.0): + - FirebaseCore (~> 6.6) + - FirebaseInstallations (~> 1.1) + - GoogleAppMeasurement (= 6.3.0) + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (= 0.3.9011) + - FirebaseCore (6.6.3): + - FirebaseCoreDiagnostics (~> 1.2) + - FirebaseCoreDiagnosticsInterop (~> 1.2) + - GoogleUtilities/Environment (~> 6.5) + - GoogleUtilities/Logger (~> 6.5) + - FirebaseCoreDiagnostics (1.2.1): + - FirebaseCoreDiagnosticsInterop (~> 1.2) + - GoogleDataTransportCCTSupport (~> 1.3) + - GoogleUtilities/Environment (~> 6.5) + - GoogleUtilities/Logger (~> 6.5) + - nanopb (~> 0.3.901) + - FirebaseCoreDiagnosticsInterop (1.2.0) + - FirebaseInstallations (1.1.0): + - FirebaseCore (~> 6.6) + - GoogleUtilities/UserDefaults (~> 6.5) + - PromisesObjC (~> 1.2) + - Flutter (1.0.0) + - flutter_email_sender (0.0.1): + - Flutter + - Google-Mobile-Ads-SDK (7.56.0): + - GoogleAppMeasurement (~> 6.0) + - GoogleAppMeasurement (6.3.0): + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (= 0.3.9011) + - GoogleDataTransport (4.0.1) + - GoogleDataTransportCCTSupport (1.4.1): + - GoogleDataTransport (~> 4.0) + - nanopb (~> 0.3.901) + - GoogleUtilities/AppDelegateSwizzler (6.5.1): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Environment (6.5.1) + - GoogleUtilities/Logger (6.5.1): + - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (6.5.1): + - GoogleUtilities/Logger + - GoogleUtilities/Network (6.5.1): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (6.5.1)" + - GoogleUtilities/Reachability (6.5.1): + - GoogleUtilities/Logger + - GoogleUtilities/UserDefaults (6.5.1): + - GoogleUtilities/Logger + - nanopb (0.3.9011): + - nanopb/decode (= 0.3.9011) + - nanopb/encode (= 0.3.9011) + - nanopb/decode (0.3.9011) + - nanopb/encode (0.3.9011) + - package_info (0.0.1): + - Flutter + - PromisesObjC (1.2.8) + - shared_preferences (0.0.1): + - Flutter + - shared_preferences_macos (0.0.1): + - Flutter + - shared_preferences_web (0.0.1): + - Flutter + - webview_flutter (0.0.1): + - Flutter + +DEPENDENCIES: + - firebase_admob (from `.symlinks/plugins/firebase_admob/ios`) + - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) + - firebase_core_web (from `.symlinks/plugins/firebase_core_web/ios`) + - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`) + - Flutter (from `Flutter`) + - flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/ios`) + - package_info (from `.symlinks/plugins/package_info/ios`) + - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) + - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) + - shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`) + - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`) + +SPEC REPOS: + trunk: + - Crashlytics + - Fabric + - Firebase + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreDiagnostics + - FirebaseCoreDiagnosticsInterop + - FirebaseInstallations + - Google-Mobile-Ads-SDK + - GoogleAppMeasurement + - GoogleDataTransport + - GoogleDataTransportCCTSupport + - GoogleUtilities + - nanopb + - PromisesObjC + +EXTERNAL SOURCES: + firebase_admob: + :path: ".symlinks/plugins/firebase_admob/ios" + firebase_analytics: + :path: ".symlinks/plugins/firebase_analytics/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" + firebase_core_web: + :path: ".symlinks/plugins/firebase_core_web/ios" + firebase_crashlytics: + :path: ".symlinks/plugins/firebase_crashlytics/ios" + Flutter: + :path: Flutter + flutter_email_sender: + :path: ".symlinks/plugins/flutter_email_sender/ios" + package_info: + :path: ".symlinks/plugins/package_info/ios" + shared_preferences: + :path: ".symlinks/plugins/shared_preferences/ios" + shared_preferences_macos: + :path: ".symlinks/plugins/shared_preferences_macos/ios" + shared_preferences_web: + :path: ".symlinks/plugins/shared_preferences_web/ios" + webview_flutter: + :path: ".symlinks/plugins/webview_flutter/ios" + +SPEC CHECKSUMS: + Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df + Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74 + Firebase: 0490eca762a72e4f1582319539153897f1508dee + firebase_admob: d8c2bc95b5e0069406280ce6adb816cdee6aa595 + firebase_analytics: dacdcfc524d722fff13dcff942f0dfa47e6be567 + firebase_core: dc539d4bdc69894823e4a6e557034a9e48960f21 + firebase_core_web: d501d8b946b60c8af265428ce483b0fff5ad52d1 + firebase_crashlytics: bd8c58df07f107cb7e1a20cb190b9a468e0a69fd + FirebaseAnalytics: 058d71e714a1a6804d9e0f25e3bb18e377a51579 + FirebaseCore: 78276943ad85e616dfa54dafa6c89512987d9d60 + FirebaseCoreDiagnostics: 2109d10c35e8289b1ee6cabf44d9ffb055620194 + FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 + FirebaseInstallations: 575cd32f2aec0feeb0e44f5d0110a09e5e60b47b + Flutter: 0e3d915762c693b495b44d77113d4970485de6ec + flutter_email_sender: f787522d0e82f50e5766c1213dbffff22fdcf009 + Google-Mobile-Ads-SDK: 65e335fadc97c5a91a9d4546214bfd3a2fb11047 + GoogleAppMeasurement: 39ecba10918b21c83877d392246157f65db351cf + GoogleDataTransport: 653963cf5be60fb59cf051e070f0836fdc305f81 + GoogleDataTransportCCTSupport: 84e4d4bbab642f2e9d83ee65d78aca2b5527d314 + GoogleUtilities: 06eb53bb579efe7099152735900dd04bf09e7275 + nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd + package_info: 48b108e75b8802c2d5e126f208ef540561c98aef + PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6 + shared_preferences: 430726339841afefe5142b9c1f50cb6bd7793e01 + shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 + shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9 + webview_flutter: bec7599de6bfbe8008a739aa3ebd7b364ea9d0cd + +PODFILE CHECKSUM: cd7be0573275eed0345c476d3d67a82c45224287 + +COCOAPODS: 1.8.4 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 8ecaa1ff4..d36d85724 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -19,6 +19,8 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + AB8C0CCC241285EF00E22259 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = AB8C0CCB241285EF00E22259 /* GoogleService-Info.plist */; }; + C02C8B44E4C619138702D3FB /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6921BE9A56532F224FE8E4B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -41,18 +43,23 @@ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 5825D9C9206F3E02F82814C8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146EE1CF9000F007C117D /* Sudoku Brain.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Sudoku Brain.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AB8C0CCB241285EF00E22259 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + B186DF2A877C90EC9AF37415 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + DDBC380CA0FE5FE08D9AA52A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + E6921BE9A56532F224FE8E4B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,6 +69,7 @@ files = ( 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, + C02C8B44E4C619138702D3FB /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -87,14 +95,15 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, + FEC5FE7D7AE8C89C036B65A4 /* Pods */, + A4D13F2DEF71BFF88552C8D4 /* Frameworks */, ); sourceTree = ""; }; 97C146EF1CF9000F007C117D /* Products */ = { isa = PBXGroup; children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, + 97C146EE1CF9000F007C117D /* Sudoku Brain.app */, ); name = Products; sourceTree = ""; @@ -102,6 +111,7 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( + AB8C0CCB241285EF00E22259 /* GoogleService-Info.plist */, 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 97C146FA1CF9000F007C117D /* Main.storyboard */, @@ -123,6 +133,24 @@ name = "Supporting Files"; sourceTree = ""; }; + A4D13F2DEF71BFF88552C8D4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E6921BE9A56532F224FE8E4B /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + FEC5FE7D7AE8C89C036B65A4 /* Pods */ = { + isa = PBXGroup; + children = ( + B186DF2A877C90EC9AF37415 /* Pods-Runner.debug.xcconfig */, + DDBC380CA0FE5FE08D9AA52A /* Pods-Runner.release.xcconfig */, + 5825D9C9206F3E02F82814C8 /* Pods-Runner.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -130,12 +158,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 97FABDE1A418FD131C8938C4 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 3167DFE27B979E8EACA00F80 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -143,7 +173,7 @@ ); name = Runner; productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productReference = 97C146EE1CF9000F007C117D /* Sudoku Brain.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -157,6 +187,8 @@ TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; + DevelopmentTeam = B6B29RJ6L5; + ProvisioningStyle = Automatic; }; }; }; @@ -187,6 +219,7 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + AB8C0CCC241285EF00E22259 /* GoogleService-Info.plist in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -194,6 +227,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3167DFE27B979E8EACA00F80 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -222,6 +270,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + 97FABDE1A418FD131C8938C4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -312,20 +382,26 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = B6B29RJ6L5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.firekamp.sudokuBrain; - PRODUCT_NAME = "$(TARGET_NAME)"; + MARKETING_VERSION = 1.0.1; + PRODUCT_BUNDLE_IDENTIFIER = com.matchalagames.sudokubrain; + PRODUCT_NAME = "Sudoku Brain"; + PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; }; name = Profile; @@ -441,20 +517,26 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = B6B29RJ6L5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.firekamp.sudokuBrain; - PRODUCT_NAME = "$(TARGET_NAME)"; + MARKETING_VERSION = 1.0.1; + PRODUCT_BUNDLE_IDENTIFIER = com.matchalagames.sudokubrain; + PRODUCT_NAME = "Sudoku Brain"; + PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; @@ -464,20 +546,26 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = B6B29RJ6L5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.firekamp.sudokuBrain; - PRODUCT_NAME = "$(TARGET_NAME)"; + MARKETING_VERSION = 1.0.1; + PRODUCT_BUNDLE_IDENTIFIER = com.matchalagames.sudokubrain; + PRODUCT_NAME = "Sudoku Brain"; + PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cfd..b606a98e5 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -15,7 +15,7 @@ @@ -27,19 +27,17 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + + - - diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16e..21a3cc14c 100644 --- a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 000000000..8f1d53db7 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 000000000..edb488e68 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png new file mode 100644 index 000000000..285226ae8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png new file mode 100644 index 000000000..93eda3647 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 000000000..93d1d18cc Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png new file mode 100644 index 000000000..22775b9b2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 000000000..63e58c533 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 000000000..210c93e8e Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png new file mode 100644 index 000000000..aa85750d2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 000000000..d8a6ec3c5 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 000000000..f4a632f9c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 000000000..430bc78be Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png new file mode 100644 index 000000000..1aac1b3a3 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fab2..79e4e3f57 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -3,115 +3,109 @@ { "size" : "20x20", "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", + "filename" : "40.png", "scale" : "2x" }, { "size" : "20x20", "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", + "filename" : "60.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", + "filename" : "58.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", + "filename" : "87.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", + "filename" : "80.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", + "filename" : "120.png", "scale" : "3x" }, { "size" : "60x60", "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", + "filename" : "120.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", + "filename" : "180.png", "scale" : "3x" }, { "size" : "20x20", "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", + "filename" : "20.png", "scale" : "1x" }, { "size" : "20x20", "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", + "filename" : "40.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", + "filename" : "29.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", + "filename" : "58.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", + "filename" : "40.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", + "filename" : "80.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", + "filename" : "76.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", + "filename" : "152.png", "scale" : "2x" }, { "size" : "83.5x83.5", "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", + "filename" : "167.png", "scale" : "2x" }, { "size" : "1024x1024", "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", + "filename" : "1024.png", "scale" : "1x" } ], @@ -119,4 +113,4 @@ "version" : 1, "author" : "xcode" } -} +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada472..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 28c6bf030..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 2ccbfd967..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0b..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cde12118..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7e..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index dcdc2306c..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 2ccbfd967..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 6a84f41e1..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index d0e1f5853..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/Brain.imageset/Brain.png b/ios/Runner/Assets.xcassets/Brain.imageset/Brain.png new file mode 100644 index 000000000..d5fabcc8b Binary files /dev/null and b/ios/Runner/Assets.xcassets/Brain.imageset/Brain.png differ diff --git a/ios/Runner/Assets.xcassets/Brain.imageset/Brain@2x.png b/ios/Runner/Assets.xcassets/Brain.imageset/Brain@2x.png new file mode 100644 index 000000000..edf27cbdf Binary files /dev/null and b/ios/Runner/Assets.xcassets/Brain.imageset/Brain@2x.png differ diff --git a/ios/Runner/Assets.xcassets/Brain.imageset/Brain@3x.png b/ios/Runner/Assets.xcassets/Brain.imageset/Brain@3x.png new file mode 100644 index 000000000..3a0d2e1ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/Brain.imageset/Brain@3x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/Brain.imageset/Contents.json similarity index 68% rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json rename to ios/Runner/Assets.xcassets/Brain.imageset/Contents.json index 0bedcf2fd..7d81c62d7 100644 --- a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ b/ios/Runner/Assets.xcassets/Brain.imageset/Contents.json @@ -2,17 +2,17 @@ "images" : [ { "idiom" : "universal", - "filename" : "LaunchImage.png", + "filename" : "Brain.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "LaunchImage@2x.png", + "filename" : "Brain@2x.png", "scale" : "2x" }, { "idiom" : "universal", - "filename" : "LaunchImage@3x.png", + "filename" : "Brain@3x.png", "scale" : "3x" } ], @@ -20,4 +20,4 @@ "version" : 1, "author" : "xcode" } -} +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/Contents.json b/ios/Runner/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/ios/Runner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eaca..000000000 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eaca..000000000 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eaca..000000000 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b7..000000000 --- a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/Wordmark.imageset/Contents.json b/ios/Runner/Assets.xcassets/Wordmark.imageset/Contents.json new file mode 100644 index 000000000..0ad04e132 --- /dev/null +++ b/ios/Runner/Assets.xcassets/Wordmark.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Wordmark.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Wordmark@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Wordmark@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark.png b/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark.png new file mode 100644 index 000000000..d430177c9 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark.png differ diff --git a/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark@2x.png b/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark@2x.png new file mode 100644 index 000000000..ac6afecab Binary files /dev/null and b/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark@2x.png differ diff --git a/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark@3x.png b/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark@3x.png new file mode 100644 index 000000000..354d1b756 Binary files /dev/null and b/ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark@3x.png differ diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard index f2e259c7c..ca0ff975c 100644 --- a/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -1,8 +1,10 @@ - - + + + - + + @@ -14,24 +16,39 @@ + - - + + + + + + + + + + + + + + - + - - + + + - + - + + diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist new file mode 100644 index 000000000..100e29ce1 --- /dev/null +++ b/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,36 @@ + + + + + CLIENT_ID + 1059367218898-83fbciu2ius3g4a8acspi9e5csopp7gl.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.1059367218898-83fbciu2ius3g4a8acspi9e5csopp7gl + API_KEY + AIzaSyAFn_8tR8OoqORjjasaM8IEOWzGdLf_hfQ + GCM_SENDER_ID + 1059367218898 + PLIST_VERSION + 1 + BUNDLE_ID + com.matchalagames.sudokubrain + PROJECT_ID + sudokubrain-bc1ec + STORAGE_BUCKET + sudokubrain-bc1ec.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:1059367218898:ios:a9cbbed66626d2947b870b + DATABASE_URL + https://sudokubrain-bc1ec.firebaseio.com + + \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 36f58c5a7..9ef8ee0cb 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -11,26 +11,38 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - sudoku_brain + Sudoku Brain CFBundlePackageType APPL CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion - $(FLUTTER_BUILD_NUMBER) + $(CURRENT_PROJECT_VERSION) + GADApplicationIdentifier + ca-app-pub-6145080690961844~5055502822 LSRequiresIPhoneOS + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main + UIRequiresFullScreen + + UIStatusBarHidden + + UIStatusBarStyle + UIStatusBarStyleLightContent UISupportedInterfaceOrientations UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortraitUpsideDown UISupportedInterfaceOrientations~ipad @@ -41,5 +53,7 @@ UIViewControllerBasedStatusBarAppearance + io.flutter.embedded_views_preview + diff --git a/lib/components/animated.dart b/lib/components/animated.dart new file mode 100644 index 000000000..2297f922a --- /dev/null +++ b/lib/components/animated.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; + +void main() => runApp(new App()); + +class App extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Title', + home: AnimateContentExample(), + ); + } +} + +class AnimateContentExample extends StatefulWidget { + @override + _AnimateContentExampleState createState() => + new _AnimateContentExampleState(); +} + +class _AnimateContentExampleState extends State { + double _animatedHeight = 100.0; + + @override + Widget build(BuildContext context) { + return new Scaffold( + appBar: new AppBar( + title: new Text("Animate Content"), + ), + body: new Column( + children: [ + new Card( + child: new Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + new GestureDetector( + onTap: () => setState(() { + _animatedHeight != 0.0 + ? _animatedHeight = 0.0 + : _animatedHeight = 100.0; + }), + child: new Container( + child: new Text("CLICK ME"), + color: Colors.blueAccent, + height: 25.0, + width: 100.0, + ), + ), + new AnimatedContainer( + duration: const Duration(milliseconds: 120), + child: new Text("Toggle Me"), + height: _animatedHeight, + color: Colors.tealAccent, + width: 100.0, + ) + ], + ), + ) + ], + ), + ); + } +} diff --git a/lib/components/gradient_button.dart b/lib/components/gradient_button.dart new file mode 100644 index 000000000..d291d79ae --- /dev/null +++ b/lib/components/gradient_button.dart @@ -0,0 +1,98 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/painting.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class RaisedGradientButton extends StatelessWidget { + final Gradient gradient; + final Gradient circleGradient; + final double width; + final double height; + final Function onPressed; + final String text; + final String icon; + final Color shadowColor; + + const RaisedGradientButton( + {Key key, + this.gradient, + this.circleGradient, + this.shadowColor, + this.width = double.infinity, + this.height = 50.0, + this.onPressed, + this.text, + this.icon}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: width, + height: MediaQuery.of(context).size.height * 0.15, + margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 0.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + gradient: gradient, + boxShadow: [ + BoxShadow( + color: kPrimaryColor, + offset: Offset(0.0, 1.5), + blurRadius: 1.5, + ), + ]), + child: Material( + color: Colors.transparent, + child: InkWell( + onTap: onPressed, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width * 0.05, + ), + Container( + width: MediaQuery.of(context).size.height * 0.13, + child: circleGradient == null + ? null + : Container( + padding: EdgeInsets.all(15.0), + height: double.infinity, + decoration: new BoxDecoration( + gradient: circleGradient, + boxShadow: [ + BoxShadow( + color: shadowColor, + blurRadius: 1.5, + ), + ], + shape: BoxShape.circle, + ), + child: Image( + image: AssetImage(icon), + ), + ), + ), + Spacer( + flex: 1, + ), + Center( + child: AutoSizeText( + text, + maxLines: 1, + style: TextStyle( + color: Colors.white, + fontFamily: 'Staatliches', + fontSize: 31.0), + ), + ), + Spacer( + flex: 2, + ), + ], + )), + ), + ); + } +} diff --git a/lib/components/gradient_button_wi.dart b/lib/components/gradient_button_wi.dart new file mode 100644 index 000000000..8c174b76d --- /dev/null +++ b/lib/components/gradient_button_wi.dart @@ -0,0 +1,65 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/painting.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class RaisedGradientButtonWI extends StatelessWidget { + final Gradient gradient; + final Gradient circleGradient; + final double width; + final double height; + final Function onPressed; + final String text; + final String icon; + final Color shadowColor; + + const RaisedGradientButtonWI( + {Key key, + this.gradient, + this.circleGradient, + this.shadowColor, + this.width = double.infinity, + this.height = 50.0, + this.onPressed, + this.text, + this.icon}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: width, + height: MediaQuery.of(context).size.height * 0.1, + margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 0.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + gradient: gradient, + boxShadow: [ + BoxShadow( + color: kPrimaryColor, + offset: Offset(0.0, 1.5), + blurRadius: 1.5, + ), + ]), + child: Material( + color: Colors.transparent, + child: InkWell( + onTap: onPressed, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + AutoSizeText( + text, + maxLines: 1, + style: TextStyle( + color: Colors.white, + fontFamily: 'Staatliches', + fontSize: 31.0), + ), + ], + )), + ), + ); + } +} diff --git a/lib/components/gradient_line.dart b/lib/components/gradient_line.dart new file mode 100644 index 000000000..aac944bad --- /dev/null +++ b/lib/components/gradient_line.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; + +class GradientLine extends StatelessWidget { + final Gradient gradient; + + GradientLine({this.gradient}); + + @override + Widget build(BuildContext context) { + return Container( + width: MediaQuery.of(context).size.width, + height: 3.0, + margin: EdgeInsets.only(top: 10.0, bottom: 10.0), + decoration: new BoxDecoration( + gradient: gradient, + ), + ); + } +} diff --git a/lib/components/header_text.dart b/lib/components/header_text.dart new file mode 100644 index 000000000..3c6d67944 --- /dev/null +++ b/lib/components/header_text.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +class HeaderText extends StatelessWidget { + final String text; + + HeaderText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text.toUpperCase(), + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 20.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ); + } +} diff --git a/lib/components/logo_header.dart b/lib/components/logo_header.dart new file mode 100644 index 000000000..679e35ecb --- /dev/null +++ b/lib/components/logo_header.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; + +class LogoHeader extends StatelessWidget { + const LogoHeader({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + height: MediaQuery.of(context).size.height * 0.30, + child: Row( + children: [ + Spacer(), + GestureDetector( + onTap: () { + print('back level'); + Navigator.pop(context); + }, + child: Image( + image: AssetImage('assets/images/ic_back.png'), + ), + ), + Spacer(), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/ic_logo.png'), + ), + SizedBox( + height: 10.0, + ), + Image( + image: AssetImage('assets/images/header.png'), + ), + SizedBox( + height: 7.0, + ), + Image( + image: AssetImage('assets/images/subheader.png'), + ), + ], + ), + Spacer(), + Spacer(), + ], + ), + ); + } +} diff --git a/lib/components/num_pad.dart b/lib/components/num_pad.dart new file mode 100644 index 000000000..0c4a6bc07 --- /dev/null +++ b/lib/components/num_pad.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; + +import 'numpad_button.dart'; + +class NumPad extends StatelessWidget { + final List values; + final double marginTop; + final double marginRight; + final double marginBottom; + final double marginLeft; + final bool isPencilOn; + final MainAxisAlignment mainAxisAlignment; + final Function(int) onValueChanged; + + NumPad( + {@required this.values, + this.marginBottom, + this.marginLeft, + this.marginRight, + this.marginTop, + this.mainAxisAlignment, + this.isPencilOn, + @required this.onValueChanged}); + + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.only( + top: marginTop, + right: marginRight, + left: marginLeft, + bottom: marginBottom), + width: double.infinity, + child: Row( + mainAxisAlignment: mainAxisAlignment, + children: generateButtons(values), + ), + ); + } + + List generateButtons(List values) { + List list = []; + for (int i = 0; i < values.length; i++) { + list.add( + NumPadButton( + value: values[i], + isHint: isPencilOn==null?false:isPencilOn, + onClick: (int val) { + onValueChanged(val); + }, + ), + ); + } + return list; + } +} diff --git a/lib/components/numpad_button.dart b/lib/components/numpad_button.dart new file mode 100644 index 000000000..c69cfeb85 --- /dev/null +++ b/lib/components/numpad_button.dart @@ -0,0 +1,73 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class NumPadButton extends StatelessWidget { + final int value; + final Function(int) onClick; + final bool isHint; + + NumPadButton({@required this.value, @required this.onClick, this.isHint}); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + onClick(value); + }, + child: Container( + width: MediaQuery.of(context).size.width * 0.11, + height: MediaQuery.of(context).size.width * 0.11, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(3.0), + color: Colors.transparent, + border: Border.all(width: 1.5, color: Color(kNumPadBorder))), + child: getWidget(value)), + ); + } + + Widget getWidget(int value) { + if (isHint) { + return Padding( + padding: EdgeInsets.only(right: 5.0), + child: ButtonText( + value: value, + fontWeight: FontWeight.w100, + fontSize: 20.0, + textAlign: TextAlign.right, + ), + ); + } else { + return Center( + child: ButtonText( + value: value, + fontWeight: FontWeight.w600, + fontSize: 23.0, + textAlign: TextAlign.center, + ), + ); + } + } +} + +class ButtonText extends StatelessWidget { + final int value; + final double fontSize; + final FontWeight fontWeight; + final TextAlign textAlign; + + ButtonText({this.textAlign, this.value, this.fontWeight, this.fontSize}); + + @override + Widget build(BuildContext context) { + return AutoSizeText( + '$value', + textAlign: textAlign, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: fontSize, + color: Color(kNumPadBorder), + fontWeight: fontWeight), + ); + } +} diff --git a/lib/components/panel.dart b/lib/components/panel.dart new file mode 100644 index 000000000..e78c2ab4f --- /dev/null +++ b/lib/components/panel.dart @@ -0,0 +1,111 @@ +// counter_page.dart +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/switch_button.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class Panel extends StatefulWidget { + final Function(int, bool) onSegmentChange; + final bool defaultPencilValue; + final bool isPaused; + final int hintValue; + + Panel( + {@required this.onSegmentChange, + this.defaultPencilValue, + this.isPaused, + this.hintValue}); + + @override + _PanelState createState() => _PanelState(); +} + +class _PanelState extends State { + @override + Widget build(BuildContext context) { + return AbsorbPointer( + absorbing: widget.isPaused, + child: Container( + margin: EdgeInsets.fromLTRB( + MediaQuery.of(context).size.height * 0.05, + MediaQuery.of(context).size.height * 0.02, + MediaQuery.of(context).size.height * 0.05, + MediaQuery.of(context).size.height * 0.01), + padding: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), + decoration: BoxDecoration( + color: Color(kPanelBg), + borderRadius: BorderRadius.circular(7.0), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + SwitchButton( + value: 0, + iconActive: Icons.fullscreen_exit, + iconInActive: Icons.fullscreen, + onClick: (int val, bool isSel) { + widget.onSegmentChange(val, isSel); + }, + ), + IconButton( + icon: Image( + image: AssetImage('assets/images/ic_erase.png'), + ), + onPressed: () { + widget.onSegmentChange(1, false); + }, + ), + IconButton( + icon: Icon(Icons.refresh), + onPressed: () { + widget.onSegmentChange(2, false); + }, + ), + IconButton( + icon: Stack( + children: [ + Positioned.fill(child: Icon(Icons.lightbulb_outline)), + Positioned( + right: 4.0, + top: 4.0, + child: Visibility( + visible: widget.hintValue > 0 ? true : false, + child: Container( + height: 12.0, + width: 12.0, + decoration: new BoxDecoration( + color: Colors.white, + shape: BoxShape.circle, + ), + child: Center( + child: Text( + '${widget.hintValue >= 0 ? widget.hintValue : 0}', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.black, + fontSize: 11.0, + fontWeight: FontWeight.w700), + ), + ), + ), + )) + ], + ), + onPressed: () { + widget.onSegmentChange(3, false); + }, + ), + SwitchButton( + value: 4, + defaultPValue: widget.defaultPencilValue, + iconActive: Icons.edit, + iconInActive: Icons.edit, + onClick: (int val, bool isSel) { + widget.onSegmentChange(val, isSel); + }, + ), + ], + ), + ), + ); + } +} diff --git a/lib/components/panel_button.dart b/lib/components/panel_button.dart new file mode 100644 index 000000000..3e7ba5704 --- /dev/null +++ b/lib/components/panel_button.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; + +class PanelButton extends StatefulWidget { + final int value; + final Function(int) onClick; + final IconData icon; + final Color color; + + PanelButton( + {@required this.value, + @required this.icon, + this.color, + @required this.onClick}); + + @override + _PanelButtonState createState() => _PanelButtonState(); +} + +class _PanelButtonState extends State { + @override + Widget build(BuildContext context) { + return IconButton( + icon: Icon( + widget.icon, + color: widget.color, + ), + onPressed: () { + widget.onClick(widget.value); + }, + ); + } +} diff --git a/lib/components/play_pause_widget.dart b/lib/components/play_pause_widget.dart new file mode 100644 index 000000000..3839fcc81 --- /dev/null +++ b/lib/components/play_pause_widget.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; +import 'package:sudoku_brain/screens/board/main_board_event.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; + +class PlayPauseWidget extends StatelessWidget { + const PlayPauseWidget({ + Key key, + @required bool isTimerPaused, + @required MainBoardBloc mainBoardBloc, + }) : _isTimerPaused = isTimerPaused, + _mainBoardBloc = mainBoardBloc, + super(key: key); + + final bool _isTimerPaused; + final MainBoardBloc _mainBoardBloc; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + print('Pause'); + Analytics.logEvent('tap_pause'); + if (_isTimerPaused) { + _mainBoardBloc.add(StartTimer()); + } else { + _mainBoardBloc.add(PauseTimer()); + } + }, + child: Icon(_isTimerPaused == true ? Icons.play_arrow : Icons.pause, + size: 30.0)); + } +} diff --git a/lib/components/switch_button.dart b/lib/components/switch_button.dart new file mode 100644 index 000000000..15ea54a19 --- /dev/null +++ b/lib/components/switch_button.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; + +class SwitchButton extends StatefulWidget { + final int value; + final Function(int, bool) onClick; + final IconData iconActive; + final IconData iconInActive; + final Color color; + final bool defaultPValue; + + SwitchButton( + {@required this.value, + @required this.iconActive, + @required this.iconInActive, + this.color, + this.defaultPValue, + @required this.onClick}); + + @override + _SwitchButtonState createState() => _SwitchButtonState(); +} + +class _SwitchButtonState extends State { + bool _isSelected=false; + + + @override + Widget build(BuildContext context) { + return IconButton( + icon: Icon( + _isSelected == true ? widget.iconActive : widget.iconInActive, + color: _isSelected == true ? Colors.blue[200] : Colors.white, + ), + onPressed: () { + setState(() { + if (_isSelected) { + _isSelected = false; + } else { + _isSelected = true; + } + }); + + widget.onClick(widget.value, _isSelected); + }, + ); + } +} diff --git a/lib/components/timer_widget.dart b/lib/components/timer_widget.dart new file mode 100644 index 000000000..9effc73f8 --- /dev/null +++ b/lib/components/timer_widget.dart @@ -0,0 +1,27 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; + +class CounterWidget extends StatelessWidget { + const CounterWidget({ + Key key, + @required MainBoardBloc mainBoardBloc, + }) : _mainBoardBloc = mainBoardBloc, + super(key: key); + + final MainBoardBloc _mainBoardBloc; + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: _mainBoardBloc.outCounter, + initialData: '00:00', + builder: (BuildContext context, AsyncSnapshot snapshot) { + return AutoSizeText( + '${snapshot.data}', + style: TextStyle(fontSize: 19.0), + ); + }, + ); + } +} diff --git a/lib/components/top_container.dart b/lib/components/top_container.dart new file mode 100644 index 000000000..35b59a751 --- /dev/null +++ b/lib/components/top_container.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; + +class TopContainer extends StatelessWidget { + final String text; + final String imagePath; + final Color color; + final Gradient gradient; + final Gradient circleGradient; + final double width; + final double height; + + final Function onPressed; + + TopContainer( + {this.text, + this.imagePath, + this.color, + this.width, + this.height, + this.gradient, + this.circleGradient, + this.onPressed}); + + @override + Widget build(BuildContext context) { + return Expanded( + flex: 1, + child: Container( + decoration: new BoxDecoration( + gradient: gradient, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + GestureDetector( + onTap: () { + Navigator.pop(context); + }, + child: Container( + padding: EdgeInsets.all(20.0), + margin: EdgeInsets.only(top: 30.0), + child: Image.asset('assets/images/ic_back.png'), + ), + ), + Text( + text, + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 30.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ), + ], + ), + Container( + height: 500.0, + width: 130.0, + padding: EdgeInsets.all(30.0), + decoration: new BoxDecoration( + gradient: circleGradient, + boxShadow: [ + BoxShadow( + color: color, + blurRadius: 1.5, + ), + ], + shape: BoxShape.circle, + ), + child: Image.asset( + imagePath, + width: 70.0, + height: 70.0, + fit: BoxFit.fitWidth, + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/main.dart b/lib/main.dart index 5a7af455f..569723367 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,111 +1,89 @@ -import 'package:flutter/material.dart'; +import 'dart:async'; -void main() => runApp(MyApp()); +import 'package:firebase_crashlytics/firebase_crashlytics.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sudoku_brain/screens/board/board_screen.dart'; +import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; +import 'package:sudoku_brain/screens/gameend/bloc.dart'; +import 'package:sudoku_brain/screens/gameend/gameend_screen.dart'; +import 'package:sudoku_brain/screens/help/bloc.dart'; +import 'package:sudoku_brain/screens/help/help_screen.dart'; +import 'package:sudoku_brain/screens/home/bloc.dart'; +import 'package:sudoku_brain/screens/home/home_screen.dart'; +import 'package:sudoku_brain/screens/level/bloc.dart'; +import 'package:sudoku_brain/screens/level/level_screen.dart'; +import 'package:sudoku_brain/screens/levelselection/levelselection_bloc.dart'; +import 'package:sudoku_brain/screens/levelselection/levelselection_screen.dart'; +import 'package:sudoku_brain/screens/settings/bloc.dart'; +import 'package:sudoku_brain/screens/settings/settings_screen.dart'; +import 'package:sudoku_brain/screens/splash/bloc.dart'; +import 'package:sudoku_brain/screens/splash/splash_screen.dart'; +import 'package:sudoku_brain/screens/tutorial/bloc.dart'; +import 'package:sudoku_brain/screens/tutorial/tutorial_screen.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; -class MyApp extends StatelessWidget { - // This widget is the root of your application. - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see the - // application has a blue toolbar. Then, without quitting the app, try - // changing the primarySwatch below to Colors.green and then invoke - // "hot reload" (press "r" in the console where you ran "flutter run", - // or simply save your changes to "hot reload" in a Flutter IDE). - // Notice that the counter didn't reset back to zero; the application - // is not restarted. - primarySwatch: Colors.blue, - ), - home: MyHomePage(title: 'Flutter Demo Home Page'), +void main() { + Crashlytics.instance.enableInDevMode = true; + runZoned(() { + WidgetsFlutterBinding.ensureInitialized(); + SystemChrome.setPreferredOrientations( + [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]).then( + (_) => runApp(MyApp()), ); - } -} - -class MyHomePage extends StatefulWidget { - MyHomePage({Key key, this.title}) : super(key: key); - - // This widget is the home page of your application. It is stateful, meaning - // that it has a State object (defined below) that contains fields that affect - // how it looks. - - // This class is the configuration for the state. It holds the values (in this - // case the title) provided by the parent (in this case the App widget) and - // used by the build method of the State. Fields in a Widget subclass are - // always marked "final". - - final String title; - - @override - _MyHomePageState createState() => _MyHomePageState(); + }, onError: Crashlytics.instance.recordError); } -class _MyHomePageState extends State { - int _counter = 0; - - void _incrementCounter() { - setState(() { - // This call to setState tells the Flutter framework that something has - // changed in this State, which causes it to rerun the build method below - // so that the display can reflect the updated values. If we changed - // _counter without calling setState(), then the build method would not be - // called again, and so nothing would appear to happen. - _counter++; - }); - } - +class MyApp extends StatelessWidget { + // This widget is the root of your application. @override Widget build(BuildContext context) { - // This method is rerun every time setState is called, for instance as done - // by the _incrementCounter method above. - // - // The Flutter framework has been optimized to make rerunning build methods - // fast, so that you can just rebuild anything that needs updating rather - // than having to individually change instances of widgets. - return Scaffold( - appBar: AppBar( - // Here we take the value from the MyHomePage object that was created by - // the App.build method, and use it to set our appbar title. - title: Text(widget.title), + return new MaterialApp( + title: '', + theme: ThemeData.dark().copyWith( + primaryColor: kPrimaryColor, + scaffoldBackgroundColor: kPrimaryColor, ), - body: Center( - // Center is a layout widget. It takes a single child and positions it - // in the middle of the parent. - child: Column( - // Column is also a layout widget. It takes a list of children and - // arranges them vertically. By default, it sizes itself to fit its - // children horizontally, and tries to be as tall as its parent. - // - // Invoke "debug painting" (press "p" in the console, choose the - // "Toggle Debug Paint" action from the Flutter Inspector in Android - // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) - // to see the wireframe for each widget. - // - // Column has various properties to control how it sizes itself and - // how it positions its children. Here we use mainAxisAlignment to - // center the children vertically; the main axis here is the vertical - // axis because Columns are vertical (the cross axis would be - // horizontal). - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'You have pushed the button this many times:', + initialRoute: SplashScreen.id, + routes: { + SplashScreen.id: (context) => BlocProvider( + create: (BuildContext context) => SplashBloc(), + child: SplashScreen(), ), - Text( - '$_counter', - style: Theme.of(context).textTheme.display1, + HomeScreen.id: (context) => BlocProvider( + create: (BuildContext context) => HomeBloc(), + child: HomeScreen(), ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: Icon(Icons.add), - ), // This trailing comma makes auto-formatting nicer for build methods. + MainBoard.id: (context) => BlocProvider( + create: (BuildContext context) => MainBoardBloc(), + child: MainBoard(), + ), + LevelScreen.id: (context) => BlocProvider( + create: (BuildContext context) => LevelBloc(), + child: LevelScreen(), + ), + HelpScreen.id: (context) => BlocProvider( + create: (BuildContext context) => HelpBloc(), + child: HelpScreen(), + ), + TutorialScreen.id: (context) => BlocProvider( + create: (BuildContext context) => TutorialBloc(), + child: TutorialScreen(), + ), + SettingsScreen.id: (context) => BlocProvider( + create: (BuildContext context) => SettingsBloc(), + child: SettingsScreen(), + ), + GameEndScreen.id: (context) => BlocProvider( + create: (BuildContext context) => GameendBloc(), + child: GameEndScreen(), + ), + LevelSelection.id: (context) => BlocProvider( + create: (BuildContext context) => LevelSelectionBloc(), + child: LevelSelection(), + ), + }, ); } } diff --git a/lib/models/board_data.dart b/lib/models/board_data.dart new file mode 100644 index 000000000..840c563cd --- /dev/null +++ b/lib/models/board_data.dart @@ -0,0 +1,21 @@ +import 'package:sudoku_brain/utils/Enums.dart'; + +class BoardData { + int value; + PlayMode mode; + List pencilValues = [0, 0, 0, 0, 0, 0, 0, 0, 0]; + + BoardData({this.value, this.mode}); + + BoardData.fromJson(Map json) { + value = int.parse(json['value']); + mode = json['mode']; + } + + Map toJson() { + final Map data = new Map(); + data['value'] = this.value; + data['mode'] = this.mode; + return data; + } +} diff --git a/lib/models/row_col.dart b/lib/models/row_col.dart new file mode 100644 index 000000000..b850484f5 --- /dev/null +++ b/lib/models/row_col.dart @@ -0,0 +1,20 @@ +class RowCol { + int r; + int c; + + RowCol(int r, int c) { + this.r = r; + this.c = c; + } + + @override + String toString() => "r:" + r.toString() + ",c:" + c.toString(); + + @override + int get hashCode => 10 * r + c; + + @override + bool operator ==(other) { + return (this.r == other.r) && (this.c == other.c); + } +} diff --git a/lib/models/screen_arguments.dart b/lib/models/screen_arguments.dart new file mode 100644 index 000000000..796b34e6a --- /dev/null +++ b/lib/models/screen_arguments.dart @@ -0,0 +1,11 @@ +import 'package:sudoku_brain/utils/Enums.dart'; + +class ScreenArguments { + LevelTYPE levelTYPE; + String levelName; + String bestTime; + int index; + bool isPlayed; + + ScreenArguments({this.levelTYPE, this.levelName, this.index, this.bestTime,this.isPlayed}); +} diff --git a/lib/screens/board/bloc.dart b/lib/screens/board/bloc.dart new file mode 100644 index 000000000..ba082c5c3 --- /dev/null +++ b/lib/screens/board/bloc.dart @@ -0,0 +1,3 @@ +export 'main_board_bloc.dart'; +export 'main_board_event.dart'; +export 'main_board_state.dart'; diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart new file mode 100644 index 000000000..804334996 --- /dev/null +++ b/lib/screens/board/board_screen.dart @@ -0,0 +1,594 @@ +import 'dart:collection'; +import 'dart:convert'; + +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sudoku_brain/components/num_pad.dart'; +import 'package:sudoku_brain/components/panel.dart'; +import 'package:sudoku_brain/components/play_pause_widget.dart'; +import 'package:sudoku_brain/components/timer_widget.dart'; +import 'package:sudoku_brain/models/board_data.dart'; +import 'package:sudoku_brain/models/row_col.dart'; +import 'package:sudoku_brain/models/screen_arguments.dart'; +import 'package:sudoku_brain/screens/gameend/gameend_screen.dart'; +import 'package:sudoku_brain/utils/AdMobIntegration.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; +import 'package:sudoku_brain/utils/LocalDB.dart'; +import 'package:sudoku_brain/utils/Strings.dart'; + +import 'main_board_bloc.dart'; +import 'main_board_event.dart'; +import 'main_board_state.dart'; + +class MainBoard extends StatefulWidget { + static final String id = 'main_board'; + + @override + _MainBoardState createState() => _MainBoardState(); +} + +class _MainBoardState extends State with WidgetsBindingObserver { + MainBoardBloc _mainBoardBloc; + Function(bool) onHintSelected; + + int _row = -1; + int _col = -1; + int _cursor = 0; + int hintCount = -1; + int _cursorCopy = -1; + int _levelIndex = 0; + + String _dynamicText; + String _dynamicTextFB; + String _levelName; + + double _animatedHeight = 50.0; + + bool _isTimerPaused = false; + bool _isPencilON = false; + + AdMobIntegration adMobIntegrationTest; + + List> _boardList = []; + List> _initBoardList = []; + HashSet _conflicts = new HashSet(); + + @override + void initState() { + adMobIntegrationTest = new AdMobIntegration(adRewarded: () { + _mainBoardBloc.add(AdRewarded(levelName: _levelName, index: _levelIndex)); + _mainBoardBloc.add(StartTimer()); + }); + Analytics.logEvent('screen_gameboard'); + + + super.initState(); + WidgetsBinding.instance.addObserver(this); + _mainBoardBloc = BlocProvider.of(context); + } + + @override + Widget build(BuildContext context) { + initBoardData(); + return BlocListener( + bloc: BlocProvider.of(context), + listener: (BuildContext context, state) { + if (state is InitialMainBoardState) { + } else if (state is FetchingLevel) { + } else if (state is LevelFetched) { + _boardList = List.from(state.boardList); + } else if (state is InitStateFetched) { + _initBoardList = List.from(state.boardList); + } else if (state is ConflictsChanged) { + _conflicts = state.conflicts; + } else if (state is CursorChangedState) { + _cursor = state.val; + _cursorCopy = state.val; + if (state.val == 0) { + _cursorCopy = -1; + } + } else if (state is UpdateCellState) { + if (_isPencilON) { + bool isConflict = _conflicts.contains(new RowCol(_row, _col)); + _boardList[_row][_col].mode = PlayMode.PENCIL; + _boardList[_row][_col].pencilValues[state.val - 1] = state.val; + } else { + _boardList[_row][_col].mode = PlayMode.PLAY; + _boardList[_row][_col].value = state.val; + _changeConflicts(); + } + } else if (state is UpdateRowColState) { + _row = state.row; + _col = state.col; + } else if (state is PauseTimerState) { + _isTimerPaused = state.isPaused; + _dynamicText = kPauseText; + _dynamicTextFB = kEndText; + } else if (state is ResetState) { + _cursorCopy = -1; + _boardList = List.from(state.boardList); + _changeConflicts(); + } else if (state is FullScreenState) { + _animatedHeight != 0.0 + ? _animatedHeight = 0.0 + : _animatedHeight = 40.0; + } else if (state is GameFinishedState) { + if (state.isWon) { + Navigator.pushReplacementNamed(context, GameEndScreen.id, + arguments: ScreenArguments( + levelName: _levelName, + index: _levelIndex + 1, + bestTime: state.time, + isPlayed: true)); + } else { + adMobIntegrationTest.initInterstitialAd(); + _isTimerPaused = true; + _dynamicText = kLoseText; + _dynamicTextFB = kLoseBText; + } + } else if (state is PlayAgainState) { + _isTimerPaused = false; + } else if (state is PencilState) { + _isPencilON = state.isPencilEnabled; + } else if (state is GetHintVState) { + hintCount = state.val; + if (hintCount < 0) { + // due to pre decrement its less than 0 + adMobIntegrationTest.initRewardAd(); + _mainBoardBloc.add(PauseTimer()); + } + } + }, + child: + BlocBuilder(builder: (context, state) { + return SafeArea( + child: Scaffold( + backgroundColor: kPrimaryColor, + body: Column(children: [ + AnimatedContainer( + height: _animatedHeight, + duration: const Duration(milliseconds: 150), + child: Container( + margin: EdgeInsets.only(top: 5.0, left: 10.0, right: 10.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: () { + Navigator.pop(context); + }, + child: Icon(Icons.arrow_back, size: 25.0)), + CounterWidget(mainBoardBloc: _mainBoardBloc), + PlayPauseWidget( + isTimerPaused: _isTimerPaused, + mainBoardBloc: _mainBoardBloc), + ], + ), + ), + ), + Container( + child: Stack( + children: [ + Positioned( + child: Container( + margin: EdgeInsets.only( + left: 10.0, right: 10.0, top: 2.0, bottom: 2.0), + child: _buildTable(), + ), + ), + Positioned( + child: Visibility( + visible: _isTimerPaused, + child: Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * 0.55, + color: transparent, + child: Column( + children: [ + Spacer( + flex: 1, + ), + Center( + child: Text( + '$_dynamicText', + style: TextStyle( + fontSize: 40.0, + fontWeight: FontWeight.bold, + color: Colors.yellow), + )), + Spacer( + flex: 1, + ), + InkWell( + onTap: () { + if (_dynamicText == kPauseText) { + Navigator.pop(context); + } else { + _resetBoard(); + _mainBoardBloc.add(PlayAgain()); + } + }, + child: Container( + padding: EdgeInsets.all(10.0), + decoration: BoxDecoration( + color: Color(0xFF7EC1FF), + borderRadius: BorderRadius.circular(10.0), + ), + height: 50.0, + child: AutoSizeText( + _dynamicTextFB == null + ? '' + : _dynamicTextFB, + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 80.0, + letterSpacing: 2.0, + color: Colors.purple[900], + fontWeight: FontWeight.w800, + decoration: TextDecoration.none), + ), + ), + ), + SizedBox( + height: 50.0, + ) + ], + ), + ), + ), + ) + ], + ), + ), + Panel( + hintValue: hintCount, + isPaused: _isTimerPaused, + defaultPencilValue: _isPencilON == true ? false : true, + onSegmentChange: (int segmentValue, bool isSelected) { + if (!_isTimerPaused) { + switch (segmentValue) { + case 0: + Analytics.logEvent('tap_full_screen'); + _mainBoardBloc.add(FullScreen()); + break; + case 1: + Analytics.logEvent('tap_erase'); + _numPadButtonClick(0); + break; + case 2: + Analytics.logEvent('tap_undo'); + _resetBoard(); + break; + case 3: + Analytics.logEvent('tap_hint'); + _mainBoardBloc.add(Hint( + row: _row, + col: _col, + levelDetails: '$_levelName-$_levelIndex', + isPencilMode: _isPencilON, + levelName: _levelName, + index: _levelIndex)); + break; + case 4: + Analytics.logEvent('tap_edit'); + + _mainBoardBloc + .add(PencilMode(isPencilMode: isSelected)); + break; + } + } + }, + ), + NumPad( + isPencilOn: _isPencilON, + values: [1, 2, 3, 4, 5], + marginTop: MediaQuery.of(context).size.height * 0.02, + marginRight: MediaQuery.of(context).size.height * 0.045, + marginLeft: MediaQuery.of(context).size.height * 0.045, + marginBottom: 0.0, + mainAxisAlignment: MainAxisAlignment.spaceAround, + onValueChanged: (int val) { + if (!_isTimerPaused) _numPadButtonClick(val); + }, + ), + NumPad( + isPencilOn: _isPencilON, + values: [6, 7, 8, 9], + marginTop: MediaQuery.of(context).size.height * 0.02, + marginRight: MediaQuery.of(context).size.height * 0.07, + marginLeft: MediaQuery.of(context).size.height * 0.07, + marginBottom: 0.0, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + onValueChanged: (int val) { + if (!_isTimerPaused) _numPadButtonClick(val); + }), + ])), + ); + }), + ); + } + + Table _buildTable() { + return Table( + children: _getTableBoardRow(), // main board + border: new TableBorder.all(color: kBorderTest, width: 1.0), + ); + } + + void _numPadButtonClick(int value) { + if (_isPencilON) { + _mainBoardBloc.add(UpdateCellValue(val: value)); + } else { + _changeCursor(value); + _mainBoardBloc.add(UpdateCellValue(val: value)); + } + } + +// Methods + + void _changeConflicts() { + _mainBoardBloc.add(ChangeConflictsCalled(list: _boardList)); + } + + void _changeCursor(i) { + _mainBoardBloc.add(CursorChanged(val: i)); + } + + Color _getHighlightColor(int r, int c) { + if (_boardList.isNotEmpty && _initBoardList.isNotEmpty) { + bool isConflict = _conflicts.contains(new RowCol(r, c)); + bool isChangeAble = _initBoardList[r][c].value == 0; + + bool isToHighlight = _boardList[r][c].value == _cursorCopy; + + if (r == _row && c == _col) { + return kBoardCellSelected; + } + + if (r == _row && !isConflict) { + return lightBlue; + } else if (r == _row && isConflict) { + return Colors.red[100]; + } + + if (c == _col && !isConflict) { + return lightBlue; + } else if (c == _col && isConflict) { + return Colors.red[100]; + } + + if (isConflict && !isChangeAble) + return Colors.red[100]; + else if (isConflict) + return Color(kBoardCellEmpty); + else if (isToHighlight && !_isPencilON) + return Color(kBoardPreFilled); + else + return Color(kBoardCellEmpty); + } else { + return Color(kBoardCellEmpty); + } + } + + Color _getTextColor(int r, int c) { + if (_initBoardList.isNotEmpty) { + bool isConflict = _conflicts.contains(new RowCol(r, c)); + bool isChangeAble = _initBoardList[r][c].value == 0; + + if (r == _row && c == _col && !isConflict) { + return Colors.black; + } + + if (isConflict && !isChangeAble) + return Colors.black; + else if (isConflict) + return Colors.red; + else if (!isChangeAble) + return Colors.black; + else + return Colors.black; + } else { + return Colors.black; + } + } + + List _getTableBoardRow() { + List lst = new List(); + for (int r = 0; r < 9; r++) { + lst.add(_getTableRow(r)); + } + return lst; + } + + TableRow _getTableRow(r) { + List lst = new List(); + for (int c = 0; c < 9; c++) { + lst.add(InkWell( + onTap: () { + _mainBoardBloc + .add(UpdateRowCol(row: r, col: c, list: _initBoardList)); + }, + child: Container( + height: (MediaQuery.of(context).size.height / 2) / 8.8, + width: (MediaQuery.of(context).size.width / 2) / 8.8, + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular( + getTopLeftRadius(c, r), + ), + topRight: Radius.circular( + getTopRightRadius(c, r), + ), + bottomLeft: Radius.circular( + getBottomLeftRadius(c, r), + ), + bottomRight: Radius.circular( + getBottomRightRadius(c, r), + ), + ), + color: _getHighlightColor(r, c), + ), + child: Column( + children: [ + Visibility( + visible: isShowRowBorder(r), + child: Divider( + color: kPrimaryColor, + height: 1.0, + thickness: 3.0, + ), + ), + Spacer(), + Row( + children: [ + Visibility( + visible: isShowColBorder(c), + child: Container( + height: + ((MediaQuery.of(context).size.height / 2) / 8.8) - 1, + width: 3.0, + color: kPrimaryColor, + ), + ), + Spacer(), + Visibility( + visible: (_boardList.isEmpty + ? false + : _boardList[r][c].mode == PlayMode.PENCIL + ? false + : true), + child: AutoSizeText( + _getText(r, c), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20.0, + color: _getTextColor(r, c), + ), + ), + ), + Visibility( + visible: (_boardList.isEmpty + ? false + : _boardList[r][c].mode == PlayMode.PENCIL + ? true + : false), + child: _buildItemsList(_boardList.isNotEmpty + ? _boardList[r][c].pencilValues + : null), + ), + Spacer(), + ], + ), + Spacer(), + ], + ), + ), + )); + } + return new TableRow(children: lst); + } + + String _getText(int r, int c) { + if (_boardList.isEmpty) { + return ''; + } else { + if (_boardList[r][c].value == 0) { + return ''; + } else { + return '${_boardList[r][c].value}'; + } + } + } + + Widget _buildItemsList(List pencilValues) { + if (pencilValues != null) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + width: 30.0, + height: 30.0, + child: GridView.count( + primary: false, + crossAxisCount: 3, + children: List.generate(pencilValues.length, (index) { + return Container( + width: 30.0, + height: 30.0, + child: Text( + '${pencilValues[index] == 0 ? '' : pencilValues[index]}', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + ); + })), + ), + ], + ); + } else { + return Container( + width: 30.0, + height: 30.0, + ); + } + } + + void initBoardData() { + final ScreenArguments args = ModalRoute.of(context).settings.arguments; + _mainBoardBloc.add(BoardInitISCalled( + context: context, levelName: args.levelName, index: args.index)); + _mainBoardBloc.add(StartTimer()); + + _levelIndex = args.index; + _levelName = args.levelName; + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + print('state: ${state.toString()}'); + if (state == AppLifecycleState.paused) { +// var json = jsonEncode(_boardList, toEncodable: (e) => e.toJsonAttr()); + var json = jsonEncode(_boardList.map((e) => e.toString()).toList()); + LocalDB.setString(LocalDB.keyBoardList, json); + } else if (state == AppLifecycleState.resumed) { + LocalDB.getString(LocalDB.keyBoardList).then((value) async { +// if (value != null && value.isNotEmpty) { +// List data = json.decode(value); +// +// List> test = []; +// for (int i = 0; i < data.length; i++) { +// List innerList = data[i]; +// List dataList = []; +// for (int j = 0; j < innerList.length; j++) { +//// var value=decodedData['${innerList[j]}']; +// +//// dataList.add(BoardData( +//// value: boardData.value, mode: boardData.mode)); +// } +// test.add(dataList); +// } +// } + }); + } + } + + void _resetBoard() { + _mainBoardBloc.add(ResetBoard( + list: _initBoardList, + buildContext: context, + index: _levelIndex, + levelName: _levelName)); + } + + @override + void dispose() { + adMobIntegrationTest.dispose(); + WidgetsBinding.instance.removeObserver(this); + super.dispose(); + } +} diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart new file mode 100644 index 000000000..7b74a44b9 --- /dev/null +++ b/lib/screens/board/main_board_bloc.dart @@ -0,0 +1,309 @@ +import 'dart:async'; +import 'dart:collection'; +import 'dart:convert'; + +import 'package:bloc/bloc.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:sudoku_brain/models/board_data.dart'; +import 'package:sudoku_brain/models/row_col.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; +import 'package:sudoku_brain/utils/LocalDB.dart'; + +import './bloc.dart'; +import '../../utils/Board.dart'; + +class MainBoardBloc extends Bloc { + Timer _timer; + int _currentTimerValue = 0; + bool _isPaused = false; + bool _isFullScreen = true; + List> _solution; + String _timerText; + + StreamController _timerController = + StreamController.broadcast(); + + StreamSink get _tickValue => _timerController.sink; + + Stream get outCounter => _timerController.stream.asBroadcastStream(); + + @override + MainBoardState get initialState => InitialMainBoardState(); + + @override + Stream mapEventToState( + MainBoardEvent event, + ) async* { + if (event is BoardInitISCalled) { + yield FetchingLevel(); + final hintCount = await _getHintCount(event.levelName, event.index); + yield GetHintVState(val: hintCount); + final list = + await _readJson(event.context, event.levelName, event.index, false); + yield LevelFetched(boardList: list); + + final listNew = + await _readJson(event.context, event.levelName, event.index, false); + yield InitStateFetched(boardList: listNew); + + _solution = + await _readJson(event.context, event.levelName, event.index, true); + } else if (event is ChangeConflictsCalled) { + final conflicts = _changeConflicts(event.list); + final gameFinished = _gameFinished(event.list); + yield ConflictsChanged(conflicts: conflicts); + if (gameFinished) { + final isWon = compareLists(event.list); + yield GameFinishedState(isWon: isWon, time: _timerText); + } + } else if (event is CursorChanged) { + final cursor = _changeCursor(event.val); + yield CursorChangedState(val: cursor); + } else if (event is UpdateCellValue) { + final value = _changeCellValue(event.val); + yield UpdateCellState(val: value); + } else if (event is UpdateRowCol) { + final list = _changeRowCol(event.row, event.col, event.list); + if (list != null) yield UpdateRowColState(row: list[0], col: list[1]); + } else if (event is StartTimer) { + _startTimer(); + _isPaused = false; + yield (PauseTimerState(isPaused: _isPaused)); + } else if (event is PauseTimer) { + _stopTimer(); + _isPaused = true; + yield (PauseTimerState(isPaused: _isPaused)); + } else if (event is ResetBoard) { + final list = await _readJson( + event.buildContext, event.levelName, event.index, false); + yield ResetState(boardList: list); + } else if (event is FullScreen) { + final full = fullScreen(); + yield FullScreenState(isFull: full); + } else if (event is Hint) { + yield PencilState(isPencilEnabled: event.isPencilMode); + if (!event.isPencilMode) { + int hintCount = await _getHintCount(event.levelName, event.index); + String key = getDBKey(event.levelName, event.index); + + hintCount = hintCount - 1; + + if (hintCount >= 0) { + LocalDB.setInt(key, hintCount); + int value = getHint(event.row, event.col); + yield UpdateCellState(val: value); + } + yield GetHintVState(val: hintCount); + } + } else if (event is PlayAgain) { + yield PlayAgainState(); + } else if (event is PencilMode) { + yield PencilState(isPencilEnabled: event.isPencilMode); + } else if (event is AdRewarded) { + String key = getDBKey(event.levelName, event.index); + LocalDB.setInt(key, 1); + yield GetHintVState(val: 1); + } + } + + Future _getHintCount(String levelName, int index) async { + String key = getDBKey(levelName, index); + int hintCount = await LocalDB.getInt(key); + + if (hintCount == null) { + int value = 0; + if (levelName == 'easy') { + value = 2; + } else if (levelName == 'medium') { + value = 1; + } else if (levelName == 'hard') { + value = 1; + } + LocalDB.setInt(key, value); + return value; + } else { + return hintCount; + } + } + + String getDBKey(String levelName, int index) { + String key = '${levelName}_hint_${index + 1}'; + print('key: $key'); + return key; + } + + void _stopTimer() { + if (_timer != null) { + _timer.cancel(); + } + } + + int getHint(int row, int col) { + return _solution[row][col].value; + } + + void _startTimer() { + _timer = Timer.periodic(Duration(seconds: 1), (timer) { + _currentTimerValue = _currentTimerValue + 1; + final df = new DateFormat('mm:ss'); + _timerText = df.format( + new DateTime.fromMillisecondsSinceEpoch((_currentTimerValue) * 1000)); + _handleLogic(_timerText); + }); + } + + void _handleLogic(data) { + _tickValue.add(data); + } + + void dispose() { + _timerController.close(); + _tickValue.close(); + } + + bool fullScreen() { + if (_isFullScreen) { + _isFullScreen = false; + } else { + _isFullScreen = true; + } + + return _isFullScreen; + } + + bool compareLists(List> list) { + bool isGameWon = true; + for (int i = 0; i < list.length; i++) { + List innerList = list[i]; + for (int j = 0; j < innerList.length; j++) { + if (list[i][j].value != _solution[i][j].value) { + isGameWon = false; + } + } + } + + _stopTimer(); + return isGameWon; + } + +// Read data from JSON File + Future>> _readJson( + BuildContext context, String objName, int index, bool isSol) async { + String data = + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); + + var decodedData = jsonDecode(data); + List list = decodedData['difficulty'][objName]['level'][index] + [isSol == true ? 'solution' : 'board']; + + // just for testing. TODO: remove later just for testing +// List list; +// if (isSol) { +// list = List.from(dummyList1); +// } else { +// list = List.from(dummyList); +// } + + List> test = []; + for (int i = 0; i < list.length; i++) { + List innerList = list[i]; + List dataList = []; + for (int j = 0; j < innerList.length; j++) { + dataList.add(BoardData(value: innerList[j], mode: PlayMode.PLAY)); + } + test.add(dataList); + } + + return test; + } + +// Change conflicts + HashSet _changeConflicts(List> boardList) { + HashSet _conflicts = Conflict.getConflicts(boardList); + return _conflicts; + } + + bool _gameFinished(List> boardList) { + bool isFinished = Conflict.computeFinishGame(boardList); + return isFinished; + } + +// Change cursor + int _changeCursor(int val) { + return val; + } + +// Change cell value + int _changeCellValue(int val) { + return val; + } + +// + List _changeRowCol(int row, int col, List> list) { + List retList = List(); + if (list[row][col].value == 0) { + retList.add(row); + retList.add(col); + } + return retList; + } + +// + List> reset(List> _initBoardList) { + List> list = new List>.generate( + 9, (i) => new List.from(_initBoardList[i])); + + return list; + } +} + +// showRow Border or Not +bool isShowRowBorder(int r) { + if (r == 3 || r == 6) { + return true; + } else { + return false; + } +} + +double getTopLeftRadius(int c, int r) { + if (c == 0 && r == 0) { + return 10.0; + } else { + return 0.0; + } +} + +double getTopRightRadius(int c, int r) { + if (c == 8 && r == 0) { + return 10.0; + } else { + return 0.0; + } +} + +double getBottomRightRadius(int c, int r) { + if (c == 8 && r == 8) { + return 10.0; + } else { + return 0.0; + } +} + +double getBottomLeftRadius(int c, int r) { + if (c == 0 && r == 8) { + return 10.0; + } else { + return 0.0; + } +} + +bool isShowColBorder(int c) { + if (c == 3 || c == 6) { + return true; + } else { + return false; + } +} diff --git a/lib/screens/board/main_board_event.dart b/lib/screens/board/main_board_event.dart new file mode 100644 index 000000000..e4c91f4a2 --- /dev/null +++ b/lib/screens/board/main_board_event.dart @@ -0,0 +1,103 @@ +import 'package:flutter/cupertino.dart'; +import 'package:meta/meta.dart'; +import 'package:sudoku_brain/models/board_data.dart'; + +@immutable +abstract class MainBoardEvent {} + +class BoardInitISCalled extends MainBoardEvent { + final BuildContext context; + final String levelName; + final int index; + + BoardInitISCalled( + {@required this.context, @required this.levelName, @required this.index}); +} + +class ChangeConflictsCalled extends MainBoardEvent { + final List> list; + + ChangeConflictsCalled({this.list}); +} + +class CursorChanged extends MainBoardEvent { + final int val; + + CursorChanged({this.val}); +} + +class GetHintCount extends MainBoardEvent { + final int val; + + GetHintCount({this.val}); +} + +class PencilMode extends MainBoardEvent { + final bool isPencilMode; + + PencilMode({this.isPencilMode}); +} + +class UpdateCellValue extends MainBoardEvent { + final int val; + + UpdateCellValue({this.val}); +} + +class UpdateRowCol extends MainBoardEvent { + final int row; + final int col; + final List> list; + + UpdateRowCol({this.row, this.col, this.list}); +} + +class Hint extends MainBoardEvent { + final int row; + final int col; + final levelDetails; + final bool isPencilMode; + final String levelName; + final int index; + + Hint( + {this.row, + this.col, + this.levelDetails, + this.isPencilMode, + this.levelName, + this.index}); +} + +class ResetBoard extends MainBoardEvent { + final List> list; + final BuildContext buildContext; + final int index; + final String levelName; + + ResetBoard({this.list, this.buildContext, this.index, this.levelName}); +} + +class FullScreen extends MainBoardEvent {} + +class AdRewarded extends MainBoardEvent { + final int index; + final String levelName; + + AdRewarded({this.levelName, this.index}); +} + +class PlayAgain extends MainBoardEvent {} + +//================================== TIMER =========================================// +class StartTimer extends MainBoardEvent {} + +class PauseTimer extends MainBoardEvent {} + +class RestartTimer extends MainBoardEvent {} + +class TimerTick extends MainBoardEvent { + final int tickValue; + + TimerTick({this.tickValue}); +} diff --git a/lib/screens/board/main_board_state.dart b/lib/screens/board/main_board_state.dart new file mode 100644 index 000000000..331d4be7a --- /dev/null +++ b/lib/screens/board/main_board_state.dart @@ -0,0 +1,118 @@ +import 'dart:collection'; + +import 'package:flutter/cupertino.dart'; +import 'package:meta/meta.dart'; +import 'package:sudoku_brain/models/board_data.dart'; +import 'package:sudoku_brain/models/row_col.dart'; + +@immutable +abstract class MainBoardState {} + +class InitialMainBoardState extends MainBoardState { + final String error; + + InitialMainBoardState({this.error}); +} + +class FetchingLevel extends MainBoardState {} + +class PlayAgainState extends MainBoardState {} + +class LevelFetched extends MainBoardState { + final List> boardList; + + LevelFetched({this.boardList}); +} + +class InitStateFetched extends MainBoardState { + final List> boardList; + + InitStateFetched({this.boardList}); +} + +class SolutionFetched extends MainBoardState {} + +class ErrorFetched extends MainBoardState { + final String error; + + ErrorFetched({this.error}); +} + +class ConflictsChanged extends MainBoardState { + final HashSet conflicts; + + ConflictsChanged({this.conflicts}); +} + +class GameFinishedState extends MainBoardState { + final bool isWon; + final String time; + + GameFinishedState({this.isWon, this.time}); +} + +class CursorChangedState extends MainBoardState { + final int val; + + CursorChangedState({this.val}); +} + +class UpdateCellState extends MainBoardState { + final int val; + + UpdateCellState({this.val}); +} + +class GetHintVState extends MainBoardState { + final int val; + + GetHintVState({this.val}); +} + +class FullScreenState extends MainBoardState { + final bool isFull; + + FullScreenState({this.isFull}); +} + +class HintState extends MainBoardState { + final bool isHintEnabled; + + HintState({this.isHintEnabled}); +} + +class PencilState extends MainBoardState { + final bool isPencilEnabled; + + PencilState({this.isPencilEnabled}); +} + +class UpdateRowColState extends MainBoardState { + final int row; + final int col; + + UpdateRowColState({this.row, this.col}); +} + +class ResetState extends MainBoardState { + final List> boardList; + + ResetState({this.boardList}); +} + +// ========================= TIMER ============================= // +class StartTimerState extends MainBoardState {} + +class PauseTimerState extends MainBoardState { + final bool isPaused; + + PauseTimerState({this.isPaused}); +} + +class RestartTimerState extends MainBoardState {} + +class TimerTickState extends MainBoardState { + final String tickValue; + + TimerTickState({this.tickValue}); +} diff --git a/lib/screens/gameend/bloc.dart b/lib/screens/gameend/bloc.dart new file mode 100644 index 000000000..62317abee --- /dev/null +++ b/lib/screens/gameend/bloc.dart @@ -0,0 +1,3 @@ +export 'gameend_bloc.dart'; +export 'gameend_event.dart'; +export 'gameend_state.dart'; \ No newline at end of file diff --git a/lib/screens/gameend/gameend_bloc.dart b/lib/screens/gameend/gameend_bloc.dart new file mode 100644 index 000000000..3ab323e9b --- /dev/null +++ b/lib/screens/gameend/gameend_bloc.dart @@ -0,0 +1,14 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class GameendBloc extends Bloc { + @override + GameendState get initialState => InitialGameendState(); + + @override + Stream mapEventToState( + GameendEvent event, + ) async* { + } +} diff --git a/lib/screens/gameend/gameend_event.dart b/lib/screens/gameend/gameend_event.dart new file mode 100644 index 000000000..399242344 --- /dev/null +++ b/lib/screens/gameend/gameend_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class GameendEvent {} diff --git a/lib/screens/gameend/gameend_screen.dart b/lib/screens/gameend/gameend_screen.dart new file mode 100644 index 000000000..db3cb5aeb --- /dev/null +++ b/lib/screens/gameend/gameend_screen.dart @@ -0,0 +1,189 @@ +import 'package:flutter/material.dart'; +import 'package:gradient_text/gradient_text.dart'; +import 'package:sudoku_brain/models/screen_arguments.dart'; +import 'package:sudoku_brain/screens/board/board_screen.dart'; +import 'package:sudoku_brain/screens/levelselection/levelselection_screen.dart'; +import 'package:sudoku_brain/utils/AdMobIntegration.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; +import 'package:sudoku_brain/utils/LocalDB.dart'; + +class GameEndScreen extends StatefulWidget { + static String id = 'game_end'; + + @override + _GameEndScreenState createState() => _GameEndScreenState(); +} + +class _GameEndScreenState extends State { + String _levelName; + String _bestTime = ''; + String _lastBestTime = ''; + + bool _isGameEnded = true; + int _levelNumber; + AdMobIntegration adMobIntegrationTest; + + @override + void initState() { + adMobIntegrationTest = AdMobIntegration(); + WidgetsBinding.instance.addPostFrameCallback((_) => getData(context)); + Analytics.logEvent('screen_score'); + Analytics.logEventWithParameter('completed_game', 'level', _levelName); + + super.initState(); + } + + @override + void dispose() { + adMobIntegrationTest.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Container( + color: kPrimaryColor, + child: Column( + children: [ + Padding( + padding: EdgeInsets.only( + top: MediaQuery.of(context).size.height * .13), + child: GradientText(_levelName == null ? '' : _levelName, + gradient: LinearGradient(colors: [ + Color(0xFF71DC8F), + Color(0xFF0BB9AD), + ]), + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 53.0, + letterSpacing: 2.0, + fontWeight: FontWeight.w300, + decoration: TextDecoration.none), + textAlign: TextAlign.center), + ), + CommonText( + text: 'Level $_levelNumber', + ), + Padding( + padding: EdgeInsets.only( + top: MediaQuery.of(context).size.height * .05), + child: Image( + image: AssetImage('assets/images/ic_win.png'), + ), + ), + Container( + margin: EdgeInsets.only( + top: MediaQuery.of(context).size.height * .05, + bottom: MediaQuery.of(context).size.height * .02), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CommonText( + text: _isGameEnded == true + ? 'Total Time ' + : 'Best Time', + ), + CommonText( + text: _lastBestTime == null ? _bestTime : _lastBestTime, + ), + ], + ), + ), + Visibility( + visible: _isGameEnded == null ? false : _isGameEnded, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CommonText( + text: 'New Best Time', + ), + CommonText( + text: _bestTime == null ? '' : _bestTime, + ), + ], + ), + ), + Padding( + padding: EdgeInsets.only( + top: MediaQuery.of(context).size.height * .04), + child: RaisedButton( + padding: EdgeInsets.fromLTRB(30.0, 5.0, 30.0, 5.0), + color: Color(0xFF7EC1FF), + child: Text(_isGameEnded == true ? 'NEXT' : 'PLAY AGAIN', + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 30.0, + color: kPrimaryColor, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + textAlign: TextAlign.center), + onPressed: () { + if (!_isGameEnded) { + Navigator.pushReplacementNamed(context, MainBoard.id, + arguments: ScreenArguments( + levelName: _levelName.toLowerCase(), + index: _levelNumber - 1)); + } else { + Analytics.logEvent('tap_play_again'); + Navigator.pushReplacementNamed(context, LevelSelection.id, + arguments: ScreenArguments( + levelTYPE: _levelName == 'easy' + ? LevelTYPE.EASY + : (_levelName == 'medium' + ? LevelTYPE.MEDIUM + : (_levelName == 'hard' + ? LevelTYPE.HARD + : LevelTYPE.EXPERT)))); + } + }, + ), + ), + ], + ), + ), + ); + } + + Future getData(BuildContext context) async { + final ScreenArguments args = ModalRoute.of(context).settings.arguments; + + _levelName = args.levelName; + _levelNumber = args.index; + _bestTime = args.bestTime; + _isGameEnded = args.isPlayed; + + String key = '${_levelName}_$_levelNumber'; + String test = await LocalDB.getString(key); + _lastBestTime = test; + + if (_isGameEnded) { + LocalDB.setString(key, _bestTime); + adMobIntegrationTest.initInterstitialAd(); + } + + setState(() {}); + } +} + +class CommonText extends StatelessWidget { + final String text; + + CommonText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: 20.0, + color: Colors.white, + fontWeight: FontWeight.w100, + decoration: TextDecoration.none), + ); + } +} diff --git a/lib/screens/gameend/gameend_state.dart b/lib/screens/gameend/gameend_state.dart new file mode 100644 index 000000000..de164bf1b --- /dev/null +++ b/lib/screens/gameend/gameend_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class GameendState {} + +class InitialGameendState extends GameendState {} diff --git a/lib/screens/help/bloc.dart b/lib/screens/help/bloc.dart new file mode 100644 index 000000000..fd88585ea --- /dev/null +++ b/lib/screens/help/bloc.dart @@ -0,0 +1,3 @@ +export 'help_bloc.dart'; +export 'help_event.dart'; +export 'help_state.dart'; \ No newline at end of file diff --git a/lib/screens/help/help_bloc.dart b/lib/screens/help/help_bloc.dart new file mode 100644 index 000000000..9c198f2bf --- /dev/null +++ b/lib/screens/help/help_bloc.dart @@ -0,0 +1,14 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class HelpBloc extends Bloc { + @override + HelpState get initialState => InitialHelpState(); + + @override + Stream mapEventToState( + HelpEvent event, + ) async* { + } +} diff --git a/lib/screens/help/help_event.dart b/lib/screens/help/help_event.dart new file mode 100644 index 000000000..a1708a8c5 --- /dev/null +++ b/lib/screens/help/help_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class HelpEvent {} diff --git a/lib/screens/help/help_screen.dart b/lib/screens/help/help_screen.dart new file mode 100644 index 000000000..e799f9698 --- /dev/null +++ b/lib/screens/help/help_screen.dart @@ -0,0 +1,99 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_email_sender/flutter_email_sender.dart'; +import 'package:package_info/package_info.dart'; +import 'package:sudoku_brain/components/gradient_button_wi.dart'; +import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/screens/termofuse/termofuse_screen.dart'; +import 'package:sudoku_brain/screens/tutorial/tutorial_screen.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Logs.dart'; + +class HelpScreen extends StatelessWidget { + static final String id = 'help_screen'; + final double sizedBoxHeight = 30.0; + + @override + Widget build(BuildContext context) { + Analytics.logEvent('screen_help'); + + return SafeArea( + child: Column( + children: [ + TopContainer( + imagePath: 'assets/images/ic_help.png', + text: 'HELP', + color: kPrimaryColor, + gradient: LinearGradient( + colors: [kPrimaryColor, kPrimaryColor], + ), + circleGradient: LinearGradient( + colors: [Color(0xFFFFC7E7), Color(0xFFFF3AA0)], + ), + ), + Expanded( + flex: 2, + child: Container( + color: kPrimaryColor, + child: Column( + children: [ + RaisedGradientButtonWI( + text: 'TUTORIAL', + gradient: LinearGradient( + colors: [Color(0xFFFABB69), Color(0xFFFE3E16)], + ), + onPressed: () { + Logs.printLogs('Tutorial Clicked'); + Navigator.pushNamed(context, TutorialScreen.id); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButtonWI( + text: 'CONTACT US', + gradient: LinearGradient( + colors: [Color(0xFF82FFF4), Color(0xFF05AB9C)], + ), + onPressed: () async { + Analytics.logEvent('screen_contact_us'); + + getVersionName().then((onValue) async { + Logs.printLogs('onValue: $onValue'); + final Email email = Email( + subject: 'Have questions or feedback? v $onValue', + recipients: ['hello@matchalagames.com'], + isHTML: false, + ); + await FlutterEmailSender.send(email); + }); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButtonWI( + text: 'TERMS OF USE', + gradient: LinearGradient( + colors: [Color(0xFFBEE4FF), Color(0xFF1E9FFE)], + ), + onPressed: () { + print('button clicked'); + Navigator.push( + context, + MaterialPageRoute(builder: (context) => TermsOfUse()), + ); + }), + ], + ), + ), + ), + ], + ), + ); + } + + Future getVersionName() async { + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + String version = packageInfo.version; + return version; + } +} diff --git a/lib/screens/help/help_state.dart b/lib/screens/help/help_state.dart new file mode 100644 index 000000000..cb3a98b86 --- /dev/null +++ b/lib/screens/help/help_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class HelpState {} + +class InitialHelpState extends HelpState {} diff --git a/lib/screens/home/bloc.dart b/lib/screens/home/bloc.dart new file mode 100644 index 000000000..3b1874415 --- /dev/null +++ b/lib/screens/home/bloc.dart @@ -0,0 +1,3 @@ +export 'home_bloc.dart'; +export 'home_event.dart'; +export 'home_state.dart'; \ No newline at end of file diff --git a/lib/screens/home/home_bloc.dart b/lib/screens/home/home_bloc.dart new file mode 100644 index 000000000..c2487fd8b --- /dev/null +++ b/lib/screens/home/home_bloc.dart @@ -0,0 +1,14 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class HomeBloc extends Bloc { + @override + HomeState get initialState => InitialHomeState(); + + @override + Stream mapEventToState( + HomeEvent event, + ) async* { + } +} diff --git a/lib/screens/home/home_event.dart b/lib/screens/home/home_event.dart new file mode 100644 index 000000000..1eee85652 --- /dev/null +++ b/lib/screens/home/home_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class HomeEvent {} diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart new file mode 100644 index 000000000..647e33501 --- /dev/null +++ b/lib/screens/home/home_screen.dart @@ -0,0 +1,133 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_button.dart'; +import 'package:sudoku_brain/screens/help/help_screen.dart'; +import 'package:sudoku_brain/screens/level/level_screen.dart'; +import 'package:sudoku_brain/screens/settings/settings_screen.dart'; +import 'package:sudoku_brain/utils/AdMobIntegration.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class HomeScreen extends StatefulWidget { + static final String id = 'home_screen'; + + @override + _HomeScreenState createState() => _HomeScreenState(); +} + +class _HomeScreenState extends State { + final double sizedBoxHeight = 25.0; + + final double sizedBoxTop = 10.0; + + AdMobIntegration _adMobIntegrationTest; + + @override + void initState() { + _adMobIntegrationTest = AdMobIntegration(); + _adMobIntegrationTest.initBannerAd(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + Analytics.logEvent('screen_landing'); + return SafeArea( + child: Container( + color: kPrimaryColor, + child: ListView( + children: [ + Container( + height: MediaQuery.of(context).size.height * 0.30, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/ic_logo.png'), + ), + SizedBox( + height: sizedBoxTop, + ), + Image( + image: AssetImage('assets/images/header.png'), + ), + SizedBox( + height: 7.0, + ), + Image( + image: AssetImage('assets/images/subheader.png'), + ), + ], + ), + ), + Column( + children: [ + Visibility( + visible: false, + child: RaisedGradientButton( + text: 'CONTINUE', + icon: 'assets/images/ic_board.png', + gradient: LinearGradient( + colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8497FF), Color(0xFFBDDAFF)], + ), + shadowColor: Color(0xFF8497FF), + onPressed: () {}), + ), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButton( + text: 'NEW GAME', + icon: 'assets/images/pencil.png', + gradient: LinearGradient( + colors: [Color(0xFFA193FF), Color(0xFF6442FD)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFFB9ACFF), Color(0xFF6B4CFD)], + ), + shadowColor: Color(0xFFB9ACFF), + onPressed: () { + Navigator.pushNamed(context, LevelScreen.id); + }), + Visibility( + visible: false, + child: RaisedGradientButton( + text: 'SETTINGS', + icon: 'assets/images/ic_setting_large.png', + gradient: LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), + shadowColor: Color(0xFF8DFDC4), + onPressed: () { + Navigator.pushNamed(context, SettingsScreen.id); + }), + ), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButton( + text: 'HELP', + icon: 'assets/images/ic_help_pink.png', + gradient: LinearGradient( + colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFFFFC7E7), Color(0xFFFF3AA0)], + ), + shadowColor: Color(0xFFFFC7E7), + onPressed: () { + Navigator.pushNamed(context, HelpScreen.id); + }), + ], + ), + ], + ), + ), + ); + } +} diff --git a/lib/screens/home/home_state.dart b/lib/screens/home/home_state.dart new file mode 100644 index 000000000..cf879ad92 --- /dev/null +++ b/lib/screens/home/home_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class HomeState {} + +class InitialHomeState extends HomeState {} diff --git a/lib/screens/level/bloc.dart b/lib/screens/level/bloc.dart new file mode 100644 index 000000000..616d281e2 --- /dev/null +++ b/lib/screens/level/bloc.dart @@ -0,0 +1,3 @@ +export 'level_bloc.dart'; +export 'level_event.dart'; +export 'level_state.dart'; \ No newline at end of file diff --git a/lib/screens/level/level_bloc.dart b/lib/screens/level/level_bloc.dart new file mode 100644 index 000000000..9a63c0030 --- /dev/null +++ b/lib/screens/level/level_bloc.dart @@ -0,0 +1,19 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; + +import './bloc.dart'; + +class LevelBloc extends Bloc { + @override + LevelState get initialState => InitialLevelState(); + + @override + Stream mapEventToState( + LevelEvent event, + ) async* { + if (event is LevelSelected) { + yield SelectedLevelState(levelTYPE: event.levelTYPE); + } + } +} diff --git a/lib/screens/level/level_event.dart b/lib/screens/level/level_event.dart new file mode 100644 index 000000000..c80efeb28 --- /dev/null +++ b/lib/screens/level/level_event.dart @@ -0,0 +1,11 @@ +import 'package:meta/meta.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; + +@immutable +abstract class LevelEvent {} + +class LevelSelected extends LevelEvent { + final LevelTYPE levelTYPE; + + LevelSelected({this.levelTYPE}); +} diff --git a/lib/screens/level/level_screen.dart b/lib/screens/level/level_screen.dart new file mode 100644 index 000000000..dd86b3e6d --- /dev/null +++ b/lib/screens/level/level_screen.dart @@ -0,0 +1,96 @@ +import 'package:enum_to_string/enum_to_string.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sudoku_brain/components/gradient_button_wi.dart'; +import 'package:sudoku_brain/components/logo_header.dart'; +import 'package:sudoku_brain/models/screen_arguments.dart'; +import 'package:sudoku_brain/screens/level/bloc.dart'; +import 'package:sudoku_brain/screens/levelselection/levelselection_screen.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; +import 'package:sudoku_brain/utils/Logs.dart'; + +class LevelScreen extends StatefulWidget { + static final String id = 'level_screen'; + + @override + _LevelScreenState createState() => _LevelScreenState(); +} + +class _LevelScreenState extends State { + LevelBloc _levelBloc; + final double sizedBoxHeight = 25.0; + + @override + void initState() { + super.initState(); + Analytics.logEvent('screen_levels'); + + _levelBloc = BlocProvider.of(context); + } + + @override + Widget build(BuildContext context) { + return BlocListener( + bloc: BlocProvider.of(context), + listener: (BuildContext context, state) { + if (state is SelectedLevelState) { + Logs.printLogs('${EnumToString.parse(state.levelTYPE)}'); + Navigator.pushNamed(context, LevelSelection.id, + arguments: ScreenArguments(levelTYPE: state.levelTYPE)); + } + }, + child: BlocBuilder(builder: (context, state) { + return SafeArea( + child: Container( + color: kPrimaryColor, + + child: ListView( + children: [ + LogoHeader(), + RaisedGradientButtonWI( + text: '${EnumToString.parse(LevelTYPE.EASY)}', + gradient: kEasyLevelGrad, + onPressed: () { + _levelBloc.add(LevelSelected(levelTYPE: LevelTYPE.EASY)); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButtonWI( + text: '${EnumToString.parse(LevelTYPE.MEDIUM)}', + gradient: kMediumLevelGrad, + onPressed: () { + _levelBloc + .add(LevelSelected(levelTYPE: LevelTYPE.MEDIUM)); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButtonWI( + text: '${EnumToString.parse(LevelTYPE.HARD)}', + gradient: kHardLevelGrad, + onPressed: () { + _levelBloc.add(LevelSelected(levelTYPE: LevelTYPE.HARD)); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButtonWI( + text: '${EnumToString.parse(LevelTYPE.EXPERT)}', + gradient: kExpertLevelGrad, + onPressed: () { + _levelBloc + .add(LevelSelected(levelTYPE: LevelTYPE.EXPERT)); + }), + ], + ), + +// + ), + ); + }), + ); + } +} diff --git a/lib/screens/level/level_state.dart b/lib/screens/level/level_state.dart new file mode 100644 index 000000000..8871c0c82 --- /dev/null +++ b/lib/screens/level/level_state.dart @@ -0,0 +1,13 @@ +import 'package:meta/meta.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; + +@immutable +abstract class LevelState {} + +class InitialLevelState extends LevelState {} + +class SelectedLevelState extends LevelState { + final LevelTYPE levelTYPE; + + SelectedLevelState({this.levelTYPE}); +} diff --git a/lib/screens/levelselection/bloc.dart b/lib/screens/levelselection/bloc.dart new file mode 100644 index 000000000..d84280d07 --- /dev/null +++ b/lib/screens/levelselection/bloc.dart @@ -0,0 +1,3 @@ +export 'levelselection_bloc.dart'; +export 'levelselection_event.dart'; +export 'levelselection_state.dart'; \ No newline at end of file diff --git a/lib/screens/levelselection/levelselection_bloc.dart b/lib/screens/levelselection/levelselection_bloc.dart new file mode 100644 index 000000000..6a16554b7 --- /dev/null +++ b/lib/screens/levelselection/levelselection_bloc.dart @@ -0,0 +1,41 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:bloc/bloc.dart'; +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/utils/LocalDB.dart'; + +import './bloc.dart'; + +class LevelSelectionBloc + extends Bloc { + @override + LevelSelectionState get initialState => InitialLevelSelectionState(); + + @override + Stream mapEventToState( + LevelSelectionEvent event, + ) async* { + if (event is LevelListEvent) { + List list = await _readJson(event.context, event.levelName); + yield LevelListState(levelList: list); + } + } + + Future> _readJson(BuildContext context, String objName) async { + String data = + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); + + var decodedData = jsonDecode(data); + List list = decodedData['difficulty'][objName]['level']; + + List updatedList = []; + for (int i = 0; i < list.length; i++) { + String key = '${objName.toLowerCase()}_${i + 1}'; + String time = await LocalDB.getString(key); + updatedList.add(time == null ? false : true); + } + + return updatedList; + } +} diff --git a/lib/screens/levelselection/levelselection_event.dart b/lib/screens/levelselection/levelselection_event.dart new file mode 100644 index 000000000..479a8f3e0 --- /dev/null +++ b/lib/screens/levelselection/levelselection_event.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:meta/meta.dart'; + +@immutable +abstract class LevelSelectionEvent {} + +class LevelListEvent extends LevelSelectionEvent { + final String levelName; + final BuildContext context; + + LevelListEvent({this.context, this.levelName}); +} diff --git a/lib/screens/levelselection/levelselection_screen.dart b/lib/screens/levelselection/levelselection_screen.dart new file mode 100644 index 000000000..1c3311154 --- /dev/null +++ b/lib/screens/levelselection/levelselection_screen.dart @@ -0,0 +1,190 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:enum_to_string/enum_to_string.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sudoku_brain/components/logo_header.dart'; +import 'package:sudoku_brain/models/screen_arguments.dart'; +import 'package:sudoku_brain/screens/board/board_screen.dart'; +import 'package:sudoku_brain/screens/gameend/gameend_screen.dart'; +import 'package:sudoku_brain/screens/levelselection/bloc.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class LevelSelection extends StatefulWidget { + static String id = 'level_selection'; + + @override + _LevelSelectionState createState() => _LevelSelectionState(); +} + +class _LevelSelectionState extends State { + LevelSelectionBloc _levelselectionBloc; + String _levelName; + List _levelList; + Gradient _gradient; + + @override + void initState() { + super.initState(); + Analytics.logEvent('screen_level_details'); + _levelselectionBloc = BlocProvider.of(context); + } + + @override + Widget build(BuildContext context) { + getArguments(); + return BlocListener( + bloc: BlocProvider.of(context), + listener: (BuildContext context, state) { + if (state is LevelListState) { + _levelList = List.from(state.levelList); + } + }, + child: BlocBuilder( + builder: (context, state) { + return SafeArea( + child: Container( + color: kPrimaryColor, + child: Column( + children: [ + LogoHeader(), + Expanded( + flex: 6, + child: Container( + margin: EdgeInsets.fromLTRB(30.0, 0.0, 30.0, 10.0), + decoration: new BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: const Radius.circular(10.0), + topRight: const Radius.circular(10.0), + ), + gradient: _gradient, + ), + child: Column( + children: [ + Padding( + padding: EdgeInsets.only(top: 20.0, bottom: 10.0), + child: AutoSizeText( + '${_levelName == null ? '' : _levelName.toUpperCase()}', + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 35.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ), + ), + _buildItemsList(_levelList), + ], + ), + ), + ), + ], + ), + ), + ); + }), + ); + } + + Widget _buildItemsList(List items) { + if (items != null) { + return Expanded( + flex: 1, + child: Container( + width: double.maxFinite, + padding: EdgeInsets.all(10.0), + height: MediaQuery.of(context).size.height * 0.61, + child: GridView.count( + primary: false, + crossAxisCount: 3, + children: List.generate(items.length, (index) { + return GestureDetector( + onTap: () { + if (items[index]) { + Navigator.pushReplacementNamed(context, GameEndScreen.id, + arguments: ScreenArguments( + levelName: _levelName.toLowerCase(), + index: index + 1, + isPlayed: false)); + } else { + Navigator.pushNamed(context, MainBoard.id, + arguments: ScreenArguments( + levelName: _levelName.toLowerCase(), + index: index)); + } + }, + child: Container( + margin: EdgeInsets.all(10.0), + decoration: BoxDecoration( + color: items[index] == true + ? Color(0xFF006360) + : Color(0xFF003D4D), + borderRadius: BorderRadius.circular(10.0)), + height: 30.0, + child: Stack( + children: [ + Positioned.fill( + child: Center( + child: AutoSizeText( + 'Level ${index + 1}', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 20.0, + fontWeight: FontWeight.w100, + fontFamily: 'Viga', + decoration: TextDecoration.none), + maxLines: 1, + ), + )), + Positioned( + right: 0.0, + child: Visibility( + visible: items[index], + child: Image( + image: AssetImage('assets/images/ic_played.png'), + ), + ), + ) + ], + ), + ), + ); + })), + ), + ); + } else { + return Container( + padding: EdgeInsets.all(10.0), + width: double.maxFinite, + ); + } + } + + void getArguments() { + final ScreenArguments args = ModalRoute.of(context).settings.arguments; + _levelName = EnumToString.parse(args.levelTYPE); + getGradient(_levelName); + _levelselectionBloc.add( + LevelListEvent(context: context, levelName: _levelName.toLowerCase())); + Analytics.logEventWithParameter( + 'choose_level', 'level', _levelName.toLowerCase()); + } + + void getGradient(String levelName) { + switch (levelName) { + case 'EASY': + _gradient = kEasyLevelGrad; + break; + case 'MEDIUM': + _gradient = kMediumLevelGrad; + break; + case 'HARD': + _gradient = kHardLevelGrad; + break; + case 'EXPERT': + _gradient = kExpertLevelGrad; + break; + } + } +} diff --git a/lib/screens/levelselection/levelselection_state.dart b/lib/screens/levelselection/levelselection_state.dart new file mode 100644 index 000000000..28ca45de9 --- /dev/null +++ b/lib/screens/levelselection/levelselection_state.dart @@ -0,0 +1,12 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class LevelSelectionState {} + +class InitialLevelSelectionState extends LevelSelectionState {} + +class LevelListState extends LevelSelectionState { + List levelList; + + LevelListState({this.levelList}); +} diff --git a/lib/screens/settings/bloc.dart b/lib/screens/settings/bloc.dart new file mode 100644 index 000000000..b2dd32d24 --- /dev/null +++ b/lib/screens/settings/bloc.dart @@ -0,0 +1,3 @@ +export 'settings_bloc.dart'; +export 'settings_event.dart'; +export 'settings_state.dart'; \ No newline at end of file diff --git a/lib/screens/settings/settings_bloc.dart b/lib/screens/settings/settings_bloc.dart new file mode 100644 index 000000000..92c9d8212 --- /dev/null +++ b/lib/screens/settings/settings_bloc.dart @@ -0,0 +1,14 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class SettingsBloc extends Bloc { + @override + SettingsState get initialState => InitialSettingsState(); + + @override + Stream mapEventToState( + SettingsEvent event, + ) async* { + } +} diff --git a/lib/screens/settings/settings_event.dart b/lib/screens/settings/settings_event.dart new file mode 100644 index 000000000..080966113 --- /dev/null +++ b/lib/screens/settings/settings_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class SettingsEvent {} diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart new file mode 100644 index 000000000..6fe9c12ee --- /dev/null +++ b/lib/screens/settings/settings_screen.dart @@ -0,0 +1,108 @@ +import 'package:custom_switch/custom_switch.dart'; +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_line.dart'; +import 'package:sudoku_brain/components/header_text.dart'; +import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class SettingsScreen extends StatelessWidget { + static final String id = 'settings_screen'; + + final double spaceBTText = 15.0; + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Column( + children: [ + TopContainer( + onPressed: () { + Navigator.pop(context); + }, + text: 'SETTINGS', + imagePath: 'assets/images/ic_setting_large.png', + gradient: LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), + color: Color(0xFF8DFDC4), + ), + Expanded( + flex: 2, + child: Container( + padding: EdgeInsets.fromLTRB(25.0, 0.0, 25.0, 0.0), + width: MediaQuery.of(context).size.width, + color: kPrimaryColor, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: spaceBTText, + ), + HeaderText( + text: 'Sounds & Haptics', + ), + GradientLine( + gradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), + ), + SettingsItem() + ], + ), + ), + ), + ), + ], + ), + ); + } +} + +class SettingsItem extends StatelessWidget { + const SettingsItem({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SmallText( + text: 'Turn On Sounds', + ), + CustomSwitch( + activeColor: Color(0xFF0AB8AD), + value: false, + onChanged: (value) { + print("VALUE : $value"); + }, + ), + ], + ); + } +} + +class SmallText extends StatelessWidget { + final String text; + + SmallText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: 14.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ); + } +} diff --git a/lib/screens/settings/settings_state.dart b/lib/screens/settings/settings_state.dart new file mode 100644 index 000000000..28ded58eb --- /dev/null +++ b/lib/screens/settings/settings_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class SettingsState {} + +class InitialSettingsState extends SettingsState {} diff --git a/lib/screens/splash/bloc.dart b/lib/screens/splash/bloc.dart new file mode 100644 index 000000000..75e57d1ee --- /dev/null +++ b/lib/screens/splash/bloc.dart @@ -0,0 +1,3 @@ +export 'splash_bloc.dart'; +export 'splash_event.dart'; +export 'splash_state.dart'; \ No newline at end of file diff --git a/lib/screens/splash/splash_bloc.dart b/lib/screens/splash/splash_bloc.dart new file mode 100644 index 000000000..05f8ddb9c --- /dev/null +++ b/lib/screens/splash/splash_bloc.dart @@ -0,0 +1,14 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class SplashBloc extends Bloc { + @override + SplashState get initialState => InitialSplashState(); + + @override + Stream mapEventToState( + SplashEvent event, + ) async* { + } +} diff --git a/lib/screens/splash/splash_event.dart b/lib/screens/splash/splash_event.dart new file mode 100644 index 000000000..fabc9277c --- /dev/null +++ b/lib/screens/splash/splash_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class SplashEvent {} diff --git a/lib/screens/splash/splash_screen.dart b/lib/screens/splash/splash_screen.dart new file mode 100644 index 000000000..5fa1097dc --- /dev/null +++ b/lib/screens/splash/splash_screen.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/screens/home/home_screen.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class SplashScreen extends StatefulWidget { + static String id = 'splasf_screen'; + + @override + _SplashScreenState createState() => _SplashScreenState(); +} + +class _SplashScreenState extends State { + @override + void initState() { + super.initState(); + _delay(); + } + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Container( + color: kPrimaryColor, + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/ic_logo_large.png'), + ), + Image( + image: AssetImage('assets/images/ic_name.png'), + ) + ], + ), + ), + )); + } + + void _delay() { + Future.delayed(const Duration(milliseconds: 3000), () { + Navigator.pushReplacementNamed(context, HomeScreen.id); + }); + } +} diff --git a/lib/screens/splash/splash_state.dart b/lib/screens/splash/splash_state.dart new file mode 100644 index 000000000..478e23a24 --- /dev/null +++ b/lib/screens/splash/splash_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class SplashState {} + +class InitialSplashState extends SplashState {} diff --git a/lib/screens/termofuse/bloc.dart b/lib/screens/termofuse/bloc.dart new file mode 100644 index 000000000..dfb8977b2 --- /dev/null +++ b/lib/screens/termofuse/bloc.dart @@ -0,0 +1,3 @@ +export 'termofuse_bloc.dart'; +export 'termofuse_event.dart'; +export 'termofuse_state.dart'; \ No newline at end of file diff --git a/lib/screens/termofuse/termofuse_bloc.dart b/lib/screens/termofuse/termofuse_bloc.dart new file mode 100644 index 000000000..7cd7cff30 --- /dev/null +++ b/lib/screens/termofuse/termofuse_bloc.dart @@ -0,0 +1,14 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class TermofuseBloc extends Bloc { + @override + TermsOfUseState get initialState => InitialTermOfUseState(); + + @override + Stream mapEventToState( + TermofuseEvent event, + ) async* { + } +} diff --git a/lib/screens/termofuse/termofuse_event.dart b/lib/screens/termofuse/termofuse_event.dart new file mode 100644 index 000000000..aed70514e --- /dev/null +++ b/lib/screens/termofuse/termofuse_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class TermofuseEvent {} diff --git a/lib/screens/termofuse/termofuse_screen.dart b/lib/screens/termofuse/termofuse_screen.dart new file mode 100644 index 000000000..0e6573e55 --- /dev/null +++ b/lib/screens/termofuse/termofuse_screen.dart @@ -0,0 +1,141 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_line.dart'; +import 'package:sudoku_brain/components/header_text.dart'; +import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class TermsOfUse extends StatefulWidget { + @override + _TermsOfUseState createState() => _TermsOfUseState(); +} + +class _TermsOfUseState extends State { + final double spaceBTText = 15.0; + + final Completer _controller = + Completer(); + + bool _isLoaded = false; + + @override + void initState() { + Analytics.logEvent('screen_terms_of_use'); + + super.initState(); + } + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Column( + children: [ + TopContainer( + text: 'TERMS OF USE', + imagePath: 'assets/images/ic_tou.png', + gradient: LinearGradient( + colors: [Color(0xFF1E9FFE), Color(0xFF125B91)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8EC4EC), Color(0xFF198CE1)], + ), + color: Color(0xFF8EC4EC), + ), + Visibility( + visible: false, + child: Container( + padding: EdgeInsets.fromLTRB(25.0, 0.0, 25.0, 0.0), + width: MediaQuery.of(context).size.width, + color: kPrimaryColor, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: spaceBTText, + ), + HeaderText( + text: 'TERMS OF USE', + ), + GradientLine( + gradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), + ), + ], + ), + ), + ), + ), + Container( + width: double.maxFinite, + color: kPrimaryColor, + height: MediaQuery.of(context).size.height * 0.60, + child: Stack( + children: [ + Positioned.fill( + child: WebView( + initialUrl: + 'https://www.matchalagames.com/terms-of-service/', + javascriptMode: JavascriptMode.unrestricted, + onWebViewCreated: (WebViewController webViewController) { + _controller.complete(webViewController); + }, + navigationDelegate: (NavigationRequest request) { + print('allowing navigation to $request'); + return NavigationDecision.navigate; + }, + onPageStarted: (String url) { + print('Page started loading: $url'); + }, + onPageFinished: (String url) { + print('Page finished loading: $url'); + setState(() { + _isLoaded = true; + }); + }, + gestureNavigationEnabled: true, + ), + ), + Positioned( + child: Visibility( + visible: _isLoaded == false ? true : false, + child: Center( + child: CircularProgressIndicator( + valueColor: + new AlwaysStoppedAnimation(kPrimaryColor), + ), + ), + ), + ) + ], + ), + ) + ], + ), + ); + } +} + +class SmallText extends StatelessWidget { + final String text; + + SmallText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: 14.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ); + } +} diff --git a/lib/screens/termofuse/termofuse_state.dart b/lib/screens/termofuse/termofuse_state.dart new file mode 100644 index 000000000..d83ded3b8 --- /dev/null +++ b/lib/screens/termofuse/termofuse_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class TermsOfUseState {} + +class InitialTermOfUseState extends TermsOfUseState {} diff --git a/lib/screens/tutorial/bloc.dart b/lib/screens/tutorial/bloc.dart new file mode 100644 index 000000000..ce295d932 --- /dev/null +++ b/lib/screens/tutorial/bloc.dart @@ -0,0 +1,3 @@ +export 'tutorial_bloc.dart'; +export 'tutorial_event.dart'; +export 'tutorial_state.dart'; \ No newline at end of file diff --git a/lib/screens/tutorial/tutorial_bloc.dart b/lib/screens/tutorial/tutorial_bloc.dart new file mode 100644 index 000000000..2fdf9f785 --- /dev/null +++ b/lib/screens/tutorial/tutorial_bloc.dart @@ -0,0 +1,14 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class TutorialBloc extends Bloc { + @override + TutorialState get initialState => InitialTutorialState(); + + @override + Stream mapEventToState( + TutorialEvent event, + ) async* { + } +} diff --git a/lib/screens/tutorial/tutorial_event.dart b/lib/screens/tutorial/tutorial_event.dart new file mode 100644 index 000000000..ea6518c35 --- /dev/null +++ b/lib/screens/tutorial/tutorial_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class TutorialEvent {} diff --git a/lib/screens/tutorial/tutorial_screen.dart b/lib/screens/tutorial/tutorial_screen.dart new file mode 100644 index 000000000..1e638d9f6 --- /dev/null +++ b/lib/screens/tutorial/tutorial_screen.dart @@ -0,0 +1,144 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_line.dart'; +import 'package:sudoku_brain/components/header_text.dart'; +import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/utils/Analytics.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Strings.dart'; + +class TutorialScreen extends StatelessWidget { + static final String id = 'tutorial_screen'; + final double spaceBTText = 15.0; + + @override + Widget build(BuildContext context) { + Analytics.logEvent('screen_tutorial'); + + return SafeArea( + child: Column( + children: [ + TopContainer( + text: 'HELP', + imagePath: 'assets/images/ic_help_orange.png', + gradient: LinearGradient( + colors: [Color(0xFFFC8D4A), Color(0xFFFE3E16)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFFFFC8AD), Color(0xFFFF7154)], + ), + color: Color(0xFFFFC8AD), + ), + Expanded( + flex: 2, + child: Container( + padding: EdgeInsets.fromLTRB(25.0, 0.0, 25.0, 0.0), + width: MediaQuery.of(context).size.width, + color: kPrimaryColor, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: spaceBTText, + ), + Text( + 'TUTORIAL', + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 30.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ), + GradientLine( + gradient: LinearGradient( + colors: [Color(0xFFFC8D4A), Color(0xFFFE3E16)], + ), + ), + HeaderText( + text: kTutHeadOne, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialWIOne, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialWITwo, + ), + SizedBox( + height: spaceBTText, + ), + HeaderText( + text: kTutHeadTwo, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialHTPOne, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialHTPTwo, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialHTPThree, + ), + SizedBox( + height: spaceBTText, + ), + HeaderText( + text: kTutHeadThree, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialGFB, + ), + SizedBox( + height: spaceBTText, + ), + ], + ), + ), + ), + ), + ], + ), + ); + } +} + +class SmallText extends StatelessWidget { + final String text; + + SmallText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: 15.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ); + } +} + diff --git a/lib/screens/tutorial/tutorial_state.dart b/lib/screens/tutorial/tutorial_state.dart new file mode 100644 index 000000000..74f7cfa31 --- /dev/null +++ b/lib/screens/tutorial/tutorial_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class TutorialState {} + +class InitialTutorialState extends TutorialState {} diff --git a/lib/utils/AdMobIntegration.dart b/lib/utils/AdMobIntegration.dart new file mode 100644 index 000000000..b9538403e --- /dev/null +++ b/lib/utils/AdMobIntegration.dart @@ -0,0 +1,113 @@ +import 'dart:io'; + +import 'package:firebase_admob/firebase_admob.dart'; +import 'package:flutter/foundation.dart'; +import 'package:sudoku_brain/utils/Strings.dart'; + +class AdMobIntegration { + MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( + testDevices: ["517603BE84183CF5E71EFA90A419FC0D"], + nonPersonalizedAds: true, + keywords: ['Game', 'Sudoku'], + ); + + BannerAd _bannerAd; + InterstitialAd _interstitialAd; + final Function adRewarded; + + AdMobIntegration({this.adRewarded}); + + initBannerAd() { + FirebaseAdMob.instance.initialize(appId: _getAdAccountId()); + _bannerAd = _createBannerAd() + ..load() + ..show(); + } + + initInterstitialAd() { + FirebaseAdMob.instance.initialize(appId: _getAdAccountId()); + _interstitialAd = _createInterstitialAd() + ..load() + ..show(); + } + + initRewardAd() { + RewardedVideoAd.instance + .load(adUnitId: _getRewardAdID(), targetingInfo: targetingInfo); + RewardedVideoAd.instance.listener = + (RewardedVideoAdEvent event, {String rewardType, int rewardAmount}) { + if (event == RewardedVideoAdEvent.rewarded) { + adRewarded(); + } else if (event == RewardedVideoAdEvent.loaded) { + RewardedVideoAd.instance.show(); + } else if (event == RewardedVideoAdEvent.failedToLoad) { + adRewarded(); + } + }; + } + + BannerAd _createBannerAd() { + return BannerAd( + adUnitId: _getBannerID(), + size: AdSize.banner, + targetingInfo: targetingInfo, + listener: (MobileAdEvent event) {}); + } + + InterstitialAd _createInterstitialAd() { + return InterstitialAd( + adUnitId: _getInterstitialAdID(), + targetingInfo: targetingInfo, + listener: (MobileAdEvent event) {}, + ); + } + + void dispose() { +// if (_bannerAd != null) _bannerAd.dispose(); + if (_interstitialAd != null) _interstitialAd.dispose(); + } + + String _getBannerID() { + if (kReleaseMode) { + if (Platform.isAndroid) { + return kBannerAdIDAndroid; + } else { + return kBannerAdIDiOS; + } + } else { + return BannerAd.testAdUnitId; + } + } + + String _getInterstitialAdID() { + if (kReleaseMode) { + if (Platform.isAndroid) { + return kInterstitialAdIDAndroid; + } else { + return kInterstitialAdIDiOS; + } + } else { + return InterstitialAd.testAdUnitId; + } + } + + String _getRewardAdID() { + if (kReleaseMode) { + if (Platform.isAndroid) { + return kRewardAddIDAndroid; + } else { + return kRewardAddIDiOS; + } + } else { + return RewardedVideoAd.testAdUnitId; + } + } + + String _getAdAccountId() { + if (Platform.isAndroid) { + return kAppIDAndroid; + } else { + return kAppIDiOS; + } + } +} diff --git a/lib/utils/Analytics.dart b/lib/utils/Analytics.dart new file mode 100644 index 000000000..5c0f21df7 --- /dev/null +++ b/lib/utils/Analytics.dart @@ -0,0 +1,13 @@ +import 'package:firebase_analytics/firebase_analytics.dart'; + +class Analytics { + static logEvent(String eventName) { + FirebaseAnalytics().logEvent(name: eventName); + } + + static logEventWithParameter( + String eventName, String parameterName, String parameterValue) { + FirebaseAnalytics() + .logEvent(name: eventName, parameters: {parameterName: parameterValue}); + } +} diff --git a/lib/utils/Board.dart b/lib/utils/Board.dart new file mode 100644 index 000000000..a03b8e189 --- /dev/null +++ b/lib/utils/Board.dart @@ -0,0 +1,91 @@ +import 'dart:collection'; + +import 'package:sudoku_brain/models/board_data.dart'; + +import '../models/row_col.dart'; + +class Conflict { + static HashSet getConflicts(List> grid) { + HashSet result = new HashSet(); + computeRowConflicts(grid, result); + computeColConflicts(grid, result); + computeBlockConflicts(grid, result); + return result; + } + + static void computeRowConflicts( + List> grid, HashSet res) { + for (int r = 0; r < 9; r++) { + HashMap usedNumToRowCol = new HashMap(); + for (int c = 0; c < 9; c++) { + int newNum = grid[r][c].value; + + if (newNum == 0) continue; + if (usedNumToRowCol.containsKey(newNum)) { + res.add(new RowCol(r, c)); + res.add(usedNumToRowCol[newNum]); + } else + usedNumToRowCol[newNum] = new RowCol(r, c); + } + } + } + + static void computeColConflicts( + List> grid, HashSet res) { + for (int c = 0; c < 9; c++) { + HashMap usedNumToRowCol = new HashMap(); + for (int r = 0; r < 9; r++) { + int newNum = grid[r][c].value; + if (newNum == 0) continue; + if (usedNumToRowCol.containsKey(newNum)) { + res.add(new RowCol(r, c)); + res.add(usedNumToRowCol[newNum]); + } else + usedNumToRowCol[newNum] = new RowCol(r, c); + } + } + } + + // Check to finish game + static bool computeFinishGame(List> grid) { + bool isGameFinished = true; + for (int c = 0; c < 9; c++) { + for (int r = 0; r < 9; r++) { + int newNum = grid[r][c].value; + if (newNum == 0) { + isGameFinished = false; + } + } + } + return isGameFinished; + } + + static void computeBlockConflicts( + List> grid, HashSet res) { + blockConf(0, 0, grid, res); + blockConf(0, 3, grid, res); + blockConf(0, 6, grid, res); + blockConf(3, 0, grid, res); + blockConf(3, 3, grid, res); + blockConf(3, 6, grid, res); + blockConf(6, 0, grid, res); + blockConf(6, 3, grid, res); + blockConf(6, 6, grid, res); + } + + static void blockConf( + int row, int col, List> grid, HashSet res) { + HashMap usedNumToRowCol = new HashMap(); + for (int r = row; r < row + 3; r++) { + for (int c = col; c < col + 3; c++) { + int newNum = grid[r][c].value; + if (newNum == 0) continue; + if (usedNumToRowCol.containsKey(newNum)) { + res.add(new RowCol(r, c)); + res.add(usedNumToRowCol[newNum]); + } else + usedNumToRowCol[newNum] = new RowCol(r, c); + } + } + } +} diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart new file mode 100644 index 000000000..2ec4a15e7 --- /dev/null +++ b/lib/utils/Constants.dart @@ -0,0 +1,69 @@ +// Colors +import 'package:flutter/material.dart'; + +const kPrimaryColor = Color(0xFF220E4A); +const kBoardTextColor = 0xFF737272; +const kBoardCellEmpty = 0xFFFFF3D2; +const kBoardBorder = 0xFFE2E6E7; +const kBoardPreFilled = 0xFFFCD0A3; +const kNumPadBorder = 0xFFABDCFF; +const kPanelBg = 0xFF38356e; +const transparent = Color(0xca000000); +const lightBlue = Color(0xFFDCF8FF); +const kBoardCellSelected = Color(0xFF80C3FF); +const kBorderTest = Color(0x60170D2E); + +// Gradients +const kEasyLevelGrad = LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], +); + +const kMediumLevelGrad = LinearGradient( + colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], +); + +const kHardLevelGrad = LinearGradient( + colors: [Color(0xFFA193FF), Color(0xFF6442FD)], +); +const kExpertLevelGrad = LinearGradient( + colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], +); + +const String levelHintName = ''; + +// init list +List> constantList = [ + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0] +]; + +List> dummyList1 = [ + [8, 6, 2, 7, 3, 9, 1, 4, 5], + [4, 3, 1, 2, 5, 6, 7, 8, 9], + [9, 5, 7, 1, 4, 8, 6, 3, 2], + [2, 8, 3, 4, 6, 5, 9, 1, 7], + [5, 1, 6, 8, 9, 7, 4, 2, 3], + [7, 9, 4, 3, 1, 2, 8, 5, 6], + [1, 2, 9, 5, 7, 4, 3, 6, 8], + [6, 4, 5, 9, 8, 3, 2, 7, 1], + [3, 7, 8, 6, 2, 1, 5, 9, 4] +]; + +List> dummyList = [ + [8, 0, 2, 7, 3, 9, 1, 4, 5], + [4, 3, 1, 2, 5, 6, 7, 8, 9], + [9, 5, 7, 1, 4, 8, 6, 3, 2], + [2, 8, 3, 4, 0, 5, 9, 1, 7], + [5, 1, 6, 8, 9, 7, 4, 2, 3], + [7, 9, 4, 3, 1, 2, 8, 5, 6], + [1, 2, 9, 5, 7, 4, 3, 6, 8], + [6, 4, 5, 9, 8, 3, 2, 7, 1], + [3, 7, 8, 6, 2, 1, 5, 9, 0] +]; diff --git a/lib/utils/Enums.dart b/lib/utils/Enums.dart new file mode 100644 index 000000000..0c94e0d05 --- /dev/null +++ b/lib/utils/Enums.dart @@ -0,0 +1,3 @@ +// Enums +enum PlayMode { PENCIL, PLAY } +enum LevelTYPE { EASY, MEDIUM, HARD, EXPERT } diff --git a/lib/utils/LocalDB.dart b/lib/utils/LocalDB.dart new file mode 100644 index 000000000..b77131c89 --- /dev/null +++ b/lib/utils/LocalDB.dart @@ -0,0 +1,69 @@ +import 'dart:convert'; + +import 'package:shared_preferences/shared_preferences.dart'; + +class LocalDB { + static final keyBoardList = 'keyBoardList'; + + // Set Data Methods + static setString(String key, String value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setString(key, value); + } + + static setInt(String key, int value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setInt(key, value); + } + + static setBool(String key, bool value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setBool(key, value); + } + + static setObject(String key, Object value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setString(key, jsonEncode(value)); + } + + static setList(String key, List value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setString(key, value.toString()); + } + + static Future getList(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getString(key); + } + + // Get Data Methods + static Future getString(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getString(key); + } + + static Future getInt(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getInt(key); + } + + static Future getBool(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getBool(key); + } + + static Future getObject(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + if (prefs.containsKey(key)) { + return jsonDecode(prefs.getString(key)); + } else { + return null; + } + } + + // Remove Data Method + static removeValue(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.remove(key); + } +} diff --git a/lib/utils/Logs.dart b/lib/utils/Logs.dart new file mode 100644 index 000000000..bf9687a37 --- /dev/null +++ b/lib/utils/Logs.dart @@ -0,0 +1,5 @@ +class Logs { + static void printLogs(String msg) { + print('DEBUG: $msg'); + } +} diff --git a/lib/utils/Strings.dart b/lib/utils/Strings.dart new file mode 100644 index 000000000..237409f4a --- /dev/null +++ b/lib/utils/Strings.dart @@ -0,0 +1,39 @@ +// appID and banner Ad ID + +const kAppIDAndroid='ca-app-pub-6145080690961844~7490094473'; +const kBannerAdIDAndroid='ca-app-pub-6145080690961844/2884635057'; +const kAppIDiOS='ca-app-pub-6145080690961844~5055502822'; +const kBannerAdIDiOS='ca-app-pub-6145080690961844/4880243001'; +const kInterstitialAdIDiOS='ca-app-pub-6145080690961844/8199269398'; +const kInterstitialAdIDAndroid='ca-app-pub-6145080690961844/5182223814'; +const kRewardAddIDiOS='ca-app-pub-6145080690961844/1278637826'; +const kRewardAddIDAndroid='ca-app-pub-6145080690961844/5901436785'; + +// Text Tutorial +const kTutHeadOne = 'What is Sudoku'; +const kTutHeadTwo = 'How to play Sudoku'; +const kTutHeadThree = 'Is sudoku good for brain?'; + +// SubText +const kTutorialWIOne = + 'Sudoku is a puzzle game designed for a single player, much like a crossword puzzle. The puzzle itself is nothing more than a grid of little boxes called “cells”.'; + +const kTutorialWITwo = + 'They are stacked nine high and nine wide, making 81 cells total. The puzzle comes with some of the cells (usually less than half of them) already filled in.'; + +const kTutorialHTPOne = + 'Look for Easy Opportunities First. Every Sudoku grid, when you start the game, comes with some numbers already placed into their correct spaces. ...'; + +const kTutorialHTPTwo = + 'Look to Neighboring Rows. Sudoku is a game of recognizing patterns and spotting opportunities. ...'; + +const kTutorialHTPThree = 'Follow Your Momentum.'; +const kTutorialGFB = + 'A brain game like sudoku, as well as crossword puzzles, taking classes, reading, and writing, can help delay dementia and Alzheimer\'s disease, and protect the brain from decline. ... And, says Snyder, while it offers good exercise and stimulation for the brain, sudoku can actually be very relaxing.'; + +//=================== +const kWinText = 'You\'ve won!'; +const kLoseText = 'You\'ve lost!'; +const kPauseText = 'PAUSE'; +const kEndText = 'END GAME'; +const kLoseBText = 'PLAY AGAIN'; diff --git a/pubspec.lock b/pubspec.lock index 034e169df..999b5e9a6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,13 +1,41 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.2" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.4.0" + auto_size_text: + dependency: "direct main" + description: + name: auto_size_text + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + bloc: + dependency: transitive + description: + name: bloc + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" boolean_selector: dependency: transitive description: @@ -23,12 +51,26 @@ packages: source: hosted version: "1.1.2" collection: - dependency: transitive + dependency: "direct main" description: name: collection url: "https://pub.dartlang.org" source: hosted version: "1.14.11" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" cupertino_icons: dependency: "direct main" description: @@ -36,30 +78,175 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.3" + custom_switch: + dependency: "direct main" + description: + name: custom_switch + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1" + enum_to_string: + dependency: "direct main" + description: + name: enum_to_string + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.9" + firebase: + dependency: transitive + description: + name: firebase + url: "https://pub.dartlang.org" + source: hosted + version: "7.2.1" + firebase_admob: + dependency: "direct main" + description: + name: firebase_admob + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.1+3" + firebase_analytics: + dependency: "direct main" + description: + name: firebase_analytics + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.11" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.4" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+2" + firebase_crashlytics: + dependency: "direct main" + description: + name: firebase_crashlytics + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3+3" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" + flutter_email_sender: + dependency: "direct main" + description: + name: flutter_email_sender + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.2" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.4" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + gradient_text: + dependency: "direct main" + description: + name: gradient_text + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0+4" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + intl: + dependency: "direct main" + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.1" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.1+1" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.5" + version: "0.12.6" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.7" + version: "1.1.8" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" + package_info: + dependency: "direct main" + description: + name: package_info + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.0+14" path: dependency: transitive description: @@ -74,6 +261,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0+1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + provider: + dependency: transitive + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.4" quiver: dependency: transitive description: @@ -81,6 +296,41 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.5" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.23.1" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.6+2" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+6" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2+4" sky_engine: dependency: transitive description: flutter @@ -127,7 +377,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.5" + version: "0.2.11" typed_data: dependency: transitive description: @@ -142,5 +392,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.8" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.19+8" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "3.5.0" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" sdks: - dart: ">=2.2.2 <3.0.0" + dart: ">=2.7.0-dev <3.0.0" + flutter: ">=1.12.13+hotfix.5 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index b588f9d54..296b8d51b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,6 +23,29 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^0.1.2 + intl: ^0.16.1 + flutter_bloc: ^3.1.0 + collection: ^1.14.11 + enum_to_string: ^1.0.9 + shared_preferences: 0.5.6+2 + flutter_email_sender: 2.2.2 + package_info: 0.4.0+14 + webview_flutter: 0.3.19+8 + gradient_text: 1.0.2 + firebase_admob: 0.9.1+3 + auto_size_text: ^2.1.0 + custom_switch: ^0.0.1 + firebase_core: 0.4.4 + firebase_analytics: ^5.0.11 + firebase_crashlytics: 0.1.3+3 + flutter_launcher_icons: ^0.7.3 + +flutter_icons: + android: true + ios: true + image_path: "assets/images/ic_launcher.png" + + dev_dependencies: flutter_test: @@ -41,30 +64,31 @@ flutter: uses-material-design: true # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. + assets: + - assets/brain.json + - assets/images/ - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a # "family" key with the font family name, and a "fonts" key with a # list giving the asset and other descriptors for the font. For # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic + fonts: + - family: Staatliches + fonts: + - asset: assets/fonts/Staatliches-Regular.ttf + - family: Rubik + fonts: + - asset: assets/fonts/Rubik-Regular.ttf + - family: Viga + fonts: + - asset: assets/fonts/Viga-Regular.ttf + + # - family: Trajan Pro # fonts: - # - asset: fonts/TrajanPro.ttf + # - asset: fonts/Staatliches-Regular.ttf # - asset: fonts/TrajanPro_Bold.ttf # weight: 700 #