<?php $originalfeld = $_POST['feld']; if(is_array($_POST['feld'])) { for($y = 0; $y < count($_POST['feld']); $y++) { for($x = 0; $x < count($_POST['feld'][$y]); $x++) if($_POST['feld'][$x][$y] == '') $_POST['feld'][$x][$y] = 0; } } $vzeilen = array( array($_POST['feld'][0][0], $_POST['feld'][1][0], $_POST['feld'][2][0], $_POST['feld'][3][0], $_POST['feld'][4][0], $_POST['feld'][5][0], $_POST['feld'][6][0], $_POST['feld'][7][0], $_POST['feld'][8][0]) , array($_POST['feld'][0][1], $_POST['feld'][1][1], $_POST['feld'][2][1], $_POST['feld'][3][1], $_POST['feld'][4][1], $_POST['feld'][5][1], $_POST['feld'][6][1], $_POST['feld'][7][1], $_POST['feld'][8][1]) , array($_POST['feld'][0][2], $_POST['feld'][1][2], $_POST['feld'][2][2], $_POST['feld'][3][2], $_POST['feld'][4][2], $_POST['feld'][5][2], $_POST['feld'][6][0], $_POST['feld'][7][2], $_POST['feld'][8][2]) , array($_POST['feld'][0][3], $_POST['feld'][1][3], $_POST['feld'][2][3], $_POST['feld'][3][3], $_POST['feld'][4][3], $_POST['feld'][5][3], $_POST['feld'][6][3], $_POST['feld'][7][3], $_POST['feld'][8][3]) , array($_POST['feld'][0][4], $_POST['feld'][1][4], $_POST['feld'][2][4], $_POST['feld'][3][4], $_POST['feld'][4][4], $_POST['feld'][5][4], $_POST['feld'][6][4], $_POST['feld'][7][4], $_POST['feld'][8][4]) , array($_POST['feld'][0][5], $_POST['feld'][1][5], $_POST['feld'][2][5], $_POST['feld'][3][5], $_POST['feld'][4][5], $_POST['feld'][5][5], $_POST['feld'][6][5], $_POST['feld'][7][5], $_POST['feld'][8][5]) , array($_POST['feld'][0][6], $_POST['feld'][1][6], $_POST['feld'][2][6], $_POST['feld'][3][6], $_POST['feld'][4][6], $_POST['feld'][5][6], $_POST['feld'][6][6], $_POST['feld'][7][6], $_POST['feld'][8][6]) , array($_POST['feld'][0][7], $_POST['feld'][1][7], $_POST['feld'][2][7], $_POST['feld'][3][7], $_POST['feld'][4][7], $_POST['feld'][5][7], $_POST['feld'][6][7], $_POST['feld'][7][7], $_POST['feld'][8][7]) , array($_POST['feld'][0][8], $_POST['feld'][1][8], $_POST['feld'][2][8], $_POST['feld'][3][8], $_POST['feld'][4][8], $_POST['feld'][5][8], $_POST['feld'][6][8], $_POST['feld'][7][8], $_POST['feld'][8][8]) ); $vfeld = array( array(& $vzeilen[0][0], & $vzeilen[1][0], & $vzeilen[2][0], & $vzeilen[3][0], & $vzeilen[4][0], & $vzeilen[5][0], & $vzeilen[6][0], & $vzeilen[7][0], & $vzeilen[8][0]) , array(& $vzeilen[0][1], & $vzeilen[1][1], & $vzeilen[2][1], & $vzeilen[3][1], & $vzeilen[4][1], & $vzeilen[5][1], & $vzeilen[6][1], & $vzeilen[7][1], & $vzeilen[8][1]) , array(& $vzeilen[0][2], & $vzeilen[1][2], & $vzeilen[2][2], & $vzeilen[3][2], & $vzeilen[4][2], & $vzeilen[5][2], & $vzeilen[6][2], & $vzeilen[7][2], & $vzeilen[8][2]) , array(& $vzeilen[0][3], & $vzeilen[1][3], & $vzeilen[2][3], & $vzeilen[3][3], & $vzeilen[4][3], & $vzeilen[5][3], & $vzeilen[6][3], & $vzeilen[7][3], & $vzeilen[8][3]) , array(& $vzeilen[0][4], & $vzeilen[1][4], & $vzeilen[2][4], & $vzeilen[3][4], & $vzeilen[4][4], & $vzeilen[5][4], & $vzeilen[6][4], & $vzeilen[7][4], & $vzeilen[8][4]) , array(& $vzeilen[0][5], & $vzeilen[1][5], & $vzeilen[2][5], & $vzeilen[3][5], & $vzeilen[4][5], & $vzeilen[5][5], & $vzeilen[6][5], & $vzeilen[7][5], & $vzeilen[8][5]) , array(& $vzeilen[0][6], & $vzeilen[1][6], & $vzeilen[2][6], & $vzeilen[3][6], & $vzeilen[4][6], & $vzeilen[5][6], & $vzeilen[6][6], & $vzeilen[7][6], & $vzeilen[8][6]) , array(& $vzeilen[0][7], & $vzeilen[1][7], & $vzeilen[2][7], & $vzeilen[3][7], & $vzeilen[4][7], & $vzeilen[5][7], & $vzeilen[6][7], & $vzeilen[7][7], & $vzeilen[8][7]) , array(& $vzeilen[0][8], & $vzeilen[1][8], & $vzeilen[2][8], & $vzeilen[3][8], & $vzeilen[4][8], & $vzeilen[5][8], & $vzeilen[6][8], & $vzeilen[7][8], & $vzeilen[8][8]) ); $zeilen = array( array($_POST['feld'][0][0], $_POST['feld'][1][0], $_POST['feld'][2][0], $_POST['feld'][3][0], $_POST['feld'][4][0], $_POST['feld'][5][0], $_POST['feld'][6][0], $_POST['feld'][7][0], $_POST['feld'][8][0]) , array($_POST['feld'][0][1], $_POST['feld'][1][1], $_POST['feld'][2][1], $_POST['feld'][3][1], $_POST['feld'][4][1], $_POST['feld'][5][1], $_POST['feld'][6][1], $_POST['feld'][7][1], $_POST['feld'][8][1]) , array($_POST['feld'][0][2], $_POST['feld'][1][2], $_POST['feld'][2][2], $_POST['feld'][3][2], $_POST['feld'][4][2], $_POST['feld'][5][2], $_POST['feld'][6][0], $_POST['feld'][7][2], $_POST['feld'][8][2]) , array($_POST['feld'][0][3], $_POST['feld'][1][3], $_POST['feld'][2][3], $_POST['feld'][3][3], $_POST['feld'][4][3], $_POST['feld'][5][3], $_POST['feld'][6][3], $_POST['feld'][7][3], $_POST['feld'][8][3]) , array($_POST['feld'][0][4], $_POST['feld'][1][4], $_POST['feld'][2][4], $_POST['feld'][3][4], $_POST['feld'][4][4], $_POST['feld'][5][4], $_POST['feld'][6][4], $_POST['feld'][7][4], $_POST['feld'][8][4]) , array($_POST['feld'][0][5], $_POST['feld'][1][5], $_POST['feld'][2][5], $_POST['feld'][3][5], $_POST['feld'][4][5], $_POST['feld'][5][5], $_POST['feld'][6][5], $_POST['feld'][7][5], $_POST['feld'][8][5]) , array($_POST['feld'][0][6], $_POST['feld'][1][6], $_POST['feld'][2][6], $_POST['feld'][3][6], $_POST['feld'][4][6], $_POST['feld'][5][6], $_POST['feld'][6][6], $_POST['feld'][7][6], $_POST['feld'][8][6]) , array($_POST['feld'][0][7], $_POST['feld'][1][7], $_POST['feld'][2][7], $_POST['feld'][3][7], $_POST['feld'][4][7], $_POST['feld'][5][7], $_POST['feld'][6][7], $_POST['feld'][7][7], $_POST['feld'][8][7]) , array($_POST['feld'][0][8], $_POST['feld'][1][8], $_POST['feld'][2][8], $_POST['feld'][3][8], $_POST['feld'][4][8], $_POST['feld'][5][8], $_POST['feld'][6][8], $_POST['feld'][7][8], $_POST['feld'][8][8]) ); $zielfeld = array( array(& $zeilen[0][0], & $zeilen[1][0], & $zeilen[2][0], & $zeilen[3][0], & $zeilen[4][0], & $zeilen[5][0], & $zeilen[6][0], & $zeilen[7][0], & $zeilen[8][0]) , array(& $zeilen[0][1], & $zeilen[1][1], & $zeilen[2][1], & $zeilen[3][1], & $zeilen[4][1], & $zeilen[5][1], & $zeilen[6][1], & $zeilen[7][1], & $zeilen[8][1]) , array(& $zeilen[0][2], & $zeilen[1][2], & $zeilen[2][2], & $zeilen[3][2], & $zeilen[4][2], & $zeilen[5][2], & $zeilen[6][2], & $zeilen[7][2], & $zeilen[8][2]) , array(& $zeilen[0][3], & $zeilen[1][3], & $zeilen[2][3], & $zeilen[3][3], & $zeilen[4][3], & $zeilen[5][3], & $zeilen[6][3], & $zeilen[7][3], & $zeilen[8][3]) , array(& $zeilen[0][4], & $zeilen[1][4], & $zeilen[2][4], & $zeilen[3][4], & $zeilen[4][4], & $zeilen[5][4], & $zeilen[6][4], & $zeilen[7][4], & $zeilen[8][4]) , array(& $zeilen[0][5], & $zeilen[1][5], & $zeilen[2][5], & $zeilen[3][5], & $zeilen[4][5], & $zeilen[5][5], & $zeilen[6][5], & $zeilen[7][5], & $zeilen[8][5]) , array(& $zeilen[0][6], & $zeilen[1][6], & $zeilen[2][6], & $zeilen[3][6], & $zeilen[4][6], & $zeilen[5][6], & $zeilen[6][6], & $zeilen[7][6], & $zeilen[8][6]) , array(& $zeilen[0][7], & $zeilen[1][7], & $zeilen[2][7], & $zeilen[3][7], & $zeilen[4][7], & $zeilen[5][7], & $zeilen[6][7], & $zeilen[7][7], & $zeilen[8][7]) , array(& $zeilen[0][8], & $zeilen[1][8], & $zeilen[2][8], & $zeilen[3][8], & $zeilen[4][8], & $zeilen[5][8], & $zeilen[6][8], & $zeilen[7][8], & $zeilen[8][8]) ); $blocks[0][0] = array(& $zeilen[0][0], & $zeilen[0][1], & $zeilen[0][2], & $zeilen[1][0], & $zeilen[1][1], & $zeilen[1][2], & $zeilen[2][0], & $zeilen[2][1], & $zeilen[2][2]); $blocks[1][0] = array(& $zeilen[0][3], & $zeilen[0][4], & $zeilen[0][5], & $zeilen[1][3], & $zeilen[1][4], & $zeilen[1][5], & $zeilen[2][3], & $zeilen[2][4], & $zeilen[2][5]); $blocks[2][0] = array(& $zeilen[0][6], & $zeilen[0][7], & $zeilen[0][8], & $zeilen[1][6], & $zeilen[1][7], & $zeilen[1][8], & $zeilen[2][6], & $zeilen[2][7], & $zeilen[2][8]); $blocks[0][1] = array(& $zeilen[3][0], & $zeilen[3][1], & $zeilen[3][2], & $zeilen[4][0], & $zeilen[4][1], & $zeilen[4][2], & $zeilen[5][0], & $zeilen[5][1], & $zeilen[5][2]); $blocks[1][1] = array(& $zeilen[3][3], & $zeilen[3][4], & $zeilen[3][5], & $zeilen[4][3], & $zeilen[4][4], & $zeilen[4][5], & $zeilen[5][3], & $zeilen[5][4], & $zeilen[5][5]); $blocks[2][1] = array(& $zeilen[3][6], & $zeilen[3][7], & $zeilen[3][8], & $zeilen[4][6], & $zeilen[4][7], & $zeilen[4][8], & $zeilen[5][6], & $zeilen[5][7], & $zeilen[5][8]); $blocks[0][2] = array(& $zeilen[6][0], & $zeilen[6][1], & $zeilen[6][2], & $zeilen[7][0], & $zeilen[7][1], & $zeilen[7][2], & $zeilen[8][0], & $zeilen[8][1], & $zeilen[8][2]); $blocks[1][2] = array(& $zeilen[6][3], & $zeilen[6][4], & $zeilen[6][5], & $zeilen[7][3], & $zeilen[7][4], & $zeilen[7][5], & $zeilen[8][3], & $zeilen[8][4], & $zeilen[8][5]); $blocks[2][2] = array(& $zeilen[6][6], & $zeilen[6][7], & $zeilen[6][8], & $zeilen[7][6], & $zeilen[7][7], & $zeilen[7][8], & $zeilen[8][6], & $zeilen[8][7], & $zeilen[8][8]); //in $possible kommen die moeglichen Zahlen pro feld for($y = 0; $y < 9; $y++) { for($x = 0; $x < 9; $x++) { if($zeilen[$y][$x] === 0) { $bx = ($x - ($x % 3))/3; $by = ($y - ($y % 3))/3; for($n = 1; $n <= 9; $n++) { if( !in_array($n, $zielfeld[$x]) && !in_array($n, $zeilen[$y]) && !in_array($n, $blocks[$bx][$by]) ) $possible[$x][$y][] = $n; } } } } //print_r($possible);die(); //jetzt fuer jede spalte in $possible ins originalfeld einsetzen und ein feld weitergehen //in $cursor wird fuer jedes feld der aktuelle cursor in $possible gespeichert. //wenn cursor gleich anzahl in possible dann muss so lange zurueck gegangen werden, bis der cursor wieder erhoeht werden kann //wenn zurueck gegangen wird muessen alle nachfolgenden cursor zurueckgesetzt werden $rollback = false; for($y = 0; $y < 9; $y++) { for($x = 0; $x < 9; $x++) { $foundvalidnumber = false; if($vfeld[$x][$y] === 0) { $bx = ($x - ($x % 3))/3; $by = ($y - ($y % 3))/3; if(!isset($cursor[$x][$y])) $cursor[$x][$y] = 0; for(1; $cursor[$x][$y] < count($possible[$x][$y]); $cursor[$x][$y]++) { $n = $possible[$x][$y][$cursor[$x][$y]]; if(!in_array($n, $zielfeld[$x]) && !in_array($n, $zeilen[$y]) && !in_array($n, $blocks[$bx][$by])) { $zielfeld[$x][$y] = $n; $foundvalidnumber = true; $rollback = false; break; } } } else { if(!$rollback) $foundvalidnumber = true; } if($foundvalidnumber === false) { $rollback = true; $cursor[$x][$y] = 0; $zielfeld[$x][$y] = $vfeld[$x][$y]; } if($rollback) { if($x == 0) { $y = $y -1; if($y == -1) echo('ohne l�sung wieder am Anfang'); $x = 9; $y = 8; $x = 7; } else { $x = $x -2; } } } } $_POST['feld'] = $originalfeld; $results['feld'] = $zielfeld; file_exists('vendor/autoload.php' ? require 'vendor/autoload.php': trigger_error("vendor/autoload.php not found")); $oSmarty = new Smarty(); $oSmarty->template_dir = './/templates/'; $oSmarty->compile_dir = './templates_c/'; $oSmarty->assign('POST', $_POST); $oSmarty->assign('UM', $_SET['UM']); if(isset($results)) $oSmarty->assign('results', $results); echo (microtime()); $oSmarty->display('index.tpl.html');