This commit is contained in:
gnieark 2015-11-18 00:18:38 +01:00
commit 0cda4d630e
4 changed files with 832 additions and 0 deletions

220
easy.txt Executable file
View File

@ -0,0 +1,220 @@
+-----------------+
|7 4 5 |
| 2 3 7 8 6|
| 9 5 7|
|4 7 |
|9 3|
| 3 2|
|1 5 9 |
|2 1 4 7 9 |
| 2 1 4|
+-----------------+
+-----------------+
| 6 9 |
| 2 3|
| 6 2 9 3 5 1 |
| 1 |
| 1 5 3 8 7 4|
|5 2 3 4 6 8 9 |
| 5 6 |
|6 3 8 2 4 |
|8 4 7 |
+-----------------+
+-----------------+
|1 5|
| 5 9 1 |
|6 3 2 5 7 4|
| 4 8 2 |
|7 8|
| 1 7 3 |
|3 1 8 6 2 7|
| 7 3 5 |
|8 3|
+-----------------+
+-----------------+
| 4 2 5 7|
| 9 5 1 |
|3 7 6 8|
|6 4 2|
|1 8 7 4|
|5 2 3|
| 2 9 1|
| 1 5 7 |
|2 8 1 3 |
+-----------------+
+-----------------+
| 7 6 2 4 |
| 4 6 9 |
|9 2 8 5 |
|8 2 9 |
| 3 4 |
| 4 9 6|
| 7 3 2 4|
| 5 8 6 |
| 3 2 6 7 |
+-----------------+
+-----------------+
|6 7 3 9|
| 5 9 3 4|
| 3 7 |
| 1|
|9 7 5 4 2 |
| 7 6|
| 9 1 4 |
| 8 2 |
|2 1 5 9 8|
+-----------------+
+-----------------+
| 6 1 4 5 |
| 8 3 5 6 |
|2 1|
|8 4 7 6|
| 6 3 |
|7 9 1 4|
|5 2|
| 7 2 6 9 |
| 4 5 8 7 |
+-----------------+
+-----------------+
| 6 4 5 |
| 8 |
|7 2 3 9 |
|5 8 6 |
|3 7|
| 9 2 1|
| 1 6 3 8|
| 5 |
| 4 2 9 |
+-----------------+
+-----------------+
| 4 5|
| 7 9 6 |
|4 2 1 |
| 2 6|
|1 8 2 3|
|9 5 |
| 2 7 1|
| 6 5 8 |
|3 1 |
+-----------------+
+-----------------+
| 5 7 8 2 |
|4 6|
| 7 6 8 |
|5 2 9 4 3 1|
| |
|8 6 1 7 5 4|
| 9 3 6 |
|7 5|
| 2 4 6 1 |
+-----------------+
+-----------------+
|5 2 8|
| 4 1 5 6|
| 9 |
|2 8 3 9|
| |
|6 7 4 3|
| 2 |
|4 1 7 3 |
|9 6 5|
+-----------------+
+-----------------+
|9 6 7 |
| 1 4 6 |
|4 8 5 |
| 7 2 1|
|6 5 1 8 9 3|
|3 1 4 |
| 9 5 2|
| 6 3 1 |
| 8 6 7|
+-----------------+
+-----------------+
| 2 5 |
| 5 6 |
|6 8 2 7 5 3|
| 5 3 6 9 |
|9 6|
| 1 9 7 5 |
|1 2 8 6 7 4|
| 9 2 |
| 4 1 |
+-----------------+
+-----------------+
|5 4 2 |
| 7 2 |
| 6 8 9|
| 2 7 9 6 |
|8 2 5|
| 6 3 5 1 |
|7 1 5 |
| 6 5 |
| 8 1 3|
+-----------------+
+-----------------+
|8 5 4 2|
|4 2 9 |
| 8 7 |
| 6 1|
| 4 8 3 |
|2 5 |
| 3 4 7 |
| 8 7 9 6|
|6 1 4 7|
+-----------------+
+-----------------+
| 1 2 3 |
|6 5 8 9 3 |
| 7 8 9 |
|7 2 5 4 |
| 1 5 3 4 9 6 7|
| 8 5|
|5 4 1 7 |
|1 3 9 2 5 |
|8 |
+-----------------+
+-----------------+
|1 4 3 9 |
| 2 9 1 |
|9 2 8 7|
| 1 9 3 6|
| |
|5 6 2 7 |
|7 8 9 5|
| 9 5 4 |
| 5 6 2 9|
+-----------------+
+-----------------+
|2 1 9 |
|6 5 8 4 1|
| 3 5 |
| 1 7 |
| 2 4 3 5 1 8 |
| 7 2 |
| 6 5 |
|7 9 2 4 5|
| 7 4 2|
+-----------------+
+-----------------+
| 3 5 6 7 8|
|8 9 6 |
| 4 7 8 |
| 5 4 3 1|
|1 6 5 7|
|3 1 2 9 |
| 8 4 5 |
| 3 6 9|
| 4 9 5 8 |
+-----------------+
+-----------------+
| 1 6 |
| 9 2 8|
|7 5 |
|5 3 6 |
|3 4 8 7|
| 4 7 9|
| 3 4|
|4 1 2 |
| 9 5 |
+-----------------+

172
gnieark.php Normal file
View File

@ -0,0 +1,172 @@
<?php
//separer les map
$grids=explode("\n",str_replace(array("+-----------------+\n","|"),"",file_get_contents("easy.txt")));
$grid=array();
foreach($grids as $gridLine){
$lineArray=array();
for($i=0;$i<strlen($gridLine);$i=$i+2){
$lineArray[]=$gridLine[$i];
}
$grid[]=$lineArray;
if(count($grid)==9){
viewGrid(resolveSudoku($grid));
$grid=array();
}
}
function resolveSudoku($grille){
//compter les cases libres
$numberOfFreeCases=0;
for ($y=0;$y<9;$y++){
for($x=0;$x<9;$x++){
if($grille[$y][$x]==" "){
$numberOfFreeCases++;
}
}
}
while( $numberOfFreeCases>0){
// echo $numberOfFreeCases."\n";
//toutes les cases
for ($y=0;$y<9;$y++){
for($x=0;$x<9;$x++){
//si la case est vide
if($grille[$y][$x]==" "){
$numbersAvailable=array();
for($k=1;$k<10;$k++){
if (canBePlaced($k,$x,$y,$grille)){
$numbersAvailable[]=$k;
}
}
if(count($numbersAvailable)==1){
//only 1 number can be placed there
$grille[$y][$x]=$numbersAvailable[0];
$numberOfFreeCases--;
}else{
//tester si une des valeurs doit etre là dans le sens où elle ne peut pas etre
// placée ailleurs dans son petit carré, sa ligne ou sa colonne
$listsOfFreeCasesSame=listFreeCasesNearMe($x,$y,$grille);
foreach ($listsOfFreeCasesSame as $freeCasesSame){
foreach ($numbersAvailable as $number){
$cantPlace=true;
foreach($freeCasesSame as $case){
if(canBePlaced($number,$case['x'],$case['y'],$grille)){
$cantPlace=false;
break;
}
}
if($cantPlace){
//on va le placer ici
$grille[$y][$x]= $number;
$numberOfFreeCases--;
break 2;
}
}
}
}
}
}
}
}
return $grille;
}
function listFreeCasesNearMe($x,$y,$grid){
//ligne
$freeOnSameLine=array();
for($i=0;$i<9;$i++){
if(($grid[$y][$i]==" ") && ($x<>$i)){
$freeOnSameLine[]=array('x'=>$i,'y'=>$y);
}
}
//colonne
$freeOnSameColumn=array();
for($i=0;$i<9;$i++){
if(($grid[$i][$x]==" ") && ($y<>$i)){
$freeOnSameColumn[]=array('x'=>$x,'y'=>$i);
}
}
//carré 3X3
if($x<3){
$xMin=0;
}elseif(($x>2) && ($x<6)){
$xMin=3;
}else{
//x>=6
$xMin=6;
}
if($y<3){
$yMin=0;
}elseif(($y>2) && ($y<6)){
$yMin=3;
}else{
//y>=6
$yMin=6;
}
for($k=$yMin;$k<$yMin + 3;$k++){
for($l=$xMin;$l<$xMin + 3;$l++){
if($grid[$k][$l]==" "){
$freeOnSameCarre[]=array('x'=>$l,'y'=>$k);
}
}
}
return array($freeOnSameLine,$freeOnSameColumn,$freeOnSameCarre);
}
function canBePlaced($number,$x,$y,$grid){
//vis à vis des valeurs sur la ligne
if(in_array($number,$grid[$y])){
return false;
}
// vis à vis des valeurs libres sur la colonne
$col=array();
$valeursPossiblesEnColonnes=array();
for($k=0;$k<9;$k++){
if($number==$grid[$k][$x]){
return false;
}
}
//valeurs libres petit carré
if($x<3){
$xMin=0;
}elseif(($x>2) && ($x<6)){
$xMin=3;
}else{
//x>=6
$xMin=6;
}
if($y<3){
$yMin=0;
}elseif(($y>2) && ($y<6)){
$yMin=3;
}else{
//y>=6
$yMin=6;
}
$valeursPossiblesPetitCarre=array();
$carre=array();
for($k=$yMin;$k<$yMin + 3;$k++){
for($l=$xMin;$l<$xMin + 3;$l++){
if($number==$grid[$k][$l]){
return false;
}
}
}
return true;
}
function viewGrid($grid){
echo "+-----------------+\n";
foreach($grid as $line){
echo "|";
echo implode(" ",$line);
echo "|\n";
}
echo "+-----------------+\n";
}

220
hard.txt Executable file
View File

@ -0,0 +1,220 @@
+-----------------+
|1 4 2 |
|9 7 4 8 |
| 8 9 7 3|
| 1 9 |
|6 7|
| 1 2 7 |
|8 3 5 4 |
| 6 1 9 8|
| 2 7 4|
+-----------------+
+-----------------+
|1 4 9 |
| 3 7 1 |
|7 8 |
| 1 4 6 2 9 |
| 6 7 |
| 3 5 7 1 8 |
| 5 4|
| 8 3 7 |
| 5 1 8|
+-----------------+
+-----------------+
| 4 3 9 |
| 2 5 8 4|
| 1 5 8 |
| 1 8 4 6|
| |
|8 9 7 5 |
| 8 7 5 |
|2 6 3 4 |
| 4 8 5 |
+-----------------+
+-----------------+
| 7 6 |
| 5 1 2|
| 1 6 3|
|2 3 9 5 |
|7 2 1 9|
| 9 6 3 1|
|1 8 3 |
|4 3 5 |
| 7 2 |
+-----------------+
+-----------------+
| 5 7 9|
| 9 3 6 |
| 6 9 4 5|
| 4 7 1 |
| 6 8 |
| 3 2 5 |
|1 3 4 2 |
| 8 2 9 |
|9 7 1 |
+-----------------+
+-----------------+
|1 2 3 |
|7 4 5 9|
| 8 |
| 6 4 5 |
| 4 9 6 5 |
| 7 8 2 |
| 8 |
|8 2 1 7|
| 7 4 3|
+-----------------+
+-----------------+
| 6 4 9 |
|2 8 9 6 3|
| 7 1 4|
|4 3 8 |
| 3 2 |
| 4 1 5|
|1 4 5 |
|8 3 9 2 7|
| 9 1 8 |
+-----------------+
+-----------------+
|5 4 3 7|
| 7 5 |
| 3 1 |
| 5 8 9 2 |
| 2 9 |
| 5 7 1 2 |
| 8 9 |
| 9 7 |
|6 2 9 4|
+-----------------+
+-----------------+
| 9 2 7 |
|7 8 2 |
| 1 7 6|
| 5 9 7|
| 4 3 |
|6 8 1 |
|1 7 6 |
| 5 1 4|
| 9 4 3 |
+-----------------+
+-----------------+
| 8 1 7 6 |
| 3 1|
| 6 4 2|
|3 1 |
| 4 5 7 2 1 9 |
| 6 5|
|2 9 5 |
|4 2 |
| 9 1 6 4 |
+-----------------+
+-----------------+
| 6 2 |
| 7 |
|4 3 1 6 8|
| 1 7 6 |
|6 4|
| 5 1 3 |
|2 8 5 4 1|
| 7 |
| 9 2 |
+-----------------+
+-----------------+
|9 4 3|
| 3 2 1|
|4 2 1 8 7 |
| 2 7 |
| 3 7 |
| 6 9 |
| 9 3 6 1 2|
|3 2 5 |
|1 5 6|
+-----------------+
+-----------------+
| |
|8 5 9 2 4 |
| 2 9 8 |
|3 5 6 7 |
|6 4 2 1|
| 7 5 9 6|
| 7 3 2 |
| 2 8 1 5 4|
| |
+-----------------+
+-----------------+
|9 7 6 |
| 3 |
|6 8 7 4 |
| 3 8 7 1|
|2 5 4 9|
|1 8 9 2 |
| 2 8 4 3|
| 2 |
| 7 6 4|
+-----------------+
+-----------------+
| 9 7 6|
| 1 3 8|
| 2 7 3 |
| 9 8 |
|7 4 6 3|
| 5 2 |
| 5 3 9 |
|2 5 4 |
|1 2 4 |
+-----------------+
+-----------------+
| 2 4 7 6 |
| 4 9 |
| 9 6 7|
|8 1 5 |
| 5 3 7 1 |
| 1 5 2|
|7 8 4 |
| 3 7 |
| 6 9 5 3 |
+-----------------+
+-----------------+
| 5 3 1|
| 2 8 9 4 |
| 1 6 7 |
|1 9 7 |
| 4 5 |
| 9 2 8|
| 1 4 3 |
| 7 9 5 8 |
|9 8 3 |
+-----------------+
+-----------------+
| 8 1 6 |
| 4 2 8 |
| 6 3 5|
| 1 2 7 |
|3 2 9 1|
| 7 9 5 |
|1 3 5 |
| 9 3 6 |
| 8 1 9 |
+-----------------+
+-----------------+
| 1 4 |
| 9 1 8|
|6 5 3 1 |
| 9 2|
| 4 8 5 9 |
|5 3 |
| 2 8 1 3|
|1 5 3 |
| 1 2 |
+-----------------+
+-----------------+
| 8 9 3 1 5|
| |
| 7 6 5 8 |
|9 6|
|5 6 7 2|
|2 7 8|
| 5 8 2 4 |
| |
|7 5 4 3 8 |
+-----------------+

220
medium.txt Executable file
View File

@ -0,0 +1,220 @@
+-----------------+
| 9 3 |
|3 9 2|
| 5 2 3 1 7 |
| 4 2 5 |
|2 9 5 1|
| 1 3 2 |
| 8 3 4 5 1 |
|5 1 6|
| 1 8 |
+-----------------+
+-----------------+
| 4 7 1|
|8 2 1 |
| 7 9 3 |
| 4 2 6|
|2 7|
|6 5 9 |
| 5 6 1 |
| 4 9 5|
|4 1 3 |
+-----------------+
+-----------------+
|1 7 9 |
| 1 6|
|8 6 7 |
|9 3 8 1 |
| |
| 8 2 5 7|
| 4 6 5|
|3 5 |
| 2 4 8|
+-----------------+
+-----------------+
|3 9 4 |
| 9 7 |
| 8 5 3|
| 8 1 |
|5 4 7 9|
| 1 3 |
|2 7 5 |
| 8 6 |
| 3 2 4|
+-----------------+
+-----------------+
| 9 5 |
|4 7 2 |
| 8 3 6 4 1 |
| 1 5 8 |
| 3 7 |
| 2 7 4 |
| 4 5 1 8 7 |
| 7 5 2|
| 2 1 |
+-----------------+
+-----------------+
|9 4 2 |
| 5 7 4 |
| 1 6 |
|2 8 9 |
|7 8|
| 5 7 3|
| 8 9 |
| 6 3 4 |
| 1 3 5|
+-----------------+
+-----------------+
| 1 8 4 7|
|9 5 |
| 8 1 |
| 8 2 |
|7 4 6 8|
| 6 2 |
| 5 7 |
| 8 2|
|5 3 2 1 |
+-----------------+
+-----------------+
| 2 4 8|
| 2 9 |
| 1 9 |
|1 9 5 3 |
| 3 4 |
| 8 3 1 6|
| 8 7 |
| 1 5 |
|2 3 5 |
+-----------------+
+-----------------+
| 8 7 |
| 2 6 9 |
| 6 3 8 |
| 9 8 4 |
|4 5|
| 6 1 2 |
| 7 2 1 |
| 7 6 1 |
| 3 5 |
+-----------------+
+-----------------+
| 3 9 2 1 5|
|1 5 8 3 |
| |
|5 9 4|
|3 7 8 1|
|6 5 3|
| |
| 1 9 2 6|
|9 5 7 4 1 |
+-----------------+
+-----------------+
| 5 |
|1 2 4 9 3 |
| 2 1 6 |
| 2 |
| 3 5 7|
|5 9 4 |
| 9 6|
|9 5 3 8 4|
| 8 6 |
+-----------------+
+-----------------+
| 3 1 |
| 2 6 4 7|
| 2 3|
| 7 2 8 9|
| 3 6 |
|2 9 1 3 |
|8 3 |
|4 9 5 6 |
| 2 4 |
+-----------------+
+-----------------+
| |
|5 6 7 3|
| 7 6 4 8 1 |
|8 3 2|
| 5 8 9 |
|6 9 1|
| 8 1 7 4 2 |
|2 8 6 7|
| |
+-----------------+
+-----------------+
| 3 1 |
| 6 9 7 3 |
| 8 6|
| 1 8 4 |
| 7 8 |
| 2 9 6 |
|4 5 |
| 3 7 8 2 |
| 9 3 |
+-----------------+
+-----------------+
|2 9 |
| 7 6 5 9|
| 4 6 1|
|7 1 2 4|
| 4 |
|8 1 9 6|
|1 2 3 |
|5 3 2 7 |
| 9 2|
+-----------------+
+-----------------+
| 5 1 4 |
| 7 2 |
| 8 3|
| 1 8|
|5 4 9|
|7 6 |
|4 7 |
| 2 6 |
| 3 9 8 |
+-----------------+
+-----------------+
| 8 5|
| 1 9 |
|7 1 6|
| 1 6 9|
|3 5 1 4|
|6 8 3 |
|5 6 2|
| 5 4 |
|9 2 |
+-----------------+
+-----------------+
| 8 |
| 3 7 5 |
| 2 9 3|
| 9 6 2|
|2 4 8 1|
|6 5 7 |
|4 9 1 |
| 1 5 8 |
| 2 |
+-----------------+
+-----------------+
| 1 2 5|
| 7 5 |
|5 4 8 |
| 5 1 7 |
|9 7 3 8|
| 9 8 1 |
| 6 5 8 1|
| 4 9 |
|2 3 1 |
+-----------------+
+-----------------+
| 3 4 |
|8 5 6 |
|2 1 |
| 9 7 |
| 7 3 4 |
| 6 5 |
| 7 9|
| 1 6 8|
| 2 3 |
+-----------------+