DONT WORK
unknown
php
4 years ago
3.0 kB
2
Indexable
<?php
class SudokuSolver{
private array $grid;
public function __construct(array $a)
{
$this->grid = array($a);
}
public function solve(): array|bool
{
if (!$this->validate()){
return false;
}
$x = 0;
$y = 0;
for($i =0 ;$i < 9; $i ++){
for($j = 0; $j < 0; $j ++){
if($this->grid[$i][$j] == 0){
return true;
}
else{
$x = $i;
$y = $j;
}
}
}
for ($i = 1; $i < 10;$i ++){
$this->grid[$x][$y] = $i;
if($this->solve()) return $this->grid;
}
$this->grid[$x][$y] = 0;
return false;
}
public function reverse_solve() : array|bool{
if (!$this->validate()){
return false;
}
$x = 0;
$y = 0;
for($i =0 ;$i < 9; $i ++){
for($j = 0; $j < 0; $j ++){
if($this->grid[$i][$j] == 0){
return true;
}
else{
$x = $i;
$y = $j;
}
}
}
for ($i = 10; $i > 0;$i --){
$this->grid[$x][$y] = $i;
if($this->solve()) return $this->grid;
}
$this->grid[$x][$y] = 0;
return false;
}
private function validate() : bool{
if(!$this->validate_columns()){
return false;
}
if(!$this->validate_regions()){
return false;
}
if(!$this->validate_rows()){
return false;
}
return true;
}
private function validate_columns() : bool
{
for ($i = 0; $i < 9; $i++){
$a = [0,0,0,0,0,0,0,0,0];
for ($j = 0; $j < 9; $j ++){
if ($a[$this->grid[$j][$i]] != 0){
return false;
}
$a[$this->grid[$j][$i]]++;
}
}
return true;
}
private function validate_rows() : bool
{
for ($i = 0; $i < 9; $i++){
$a = [0,0,0,0,0,0,0,0,0];
for ($j = 0; $j < 9; $j ++){
if ($a[$this->grid[$i][$j]] != 0){
return false;
}
$a[$this->grid[$i][$j]]++;
}
}
return true;
}
private function validate_regions() : bool
{
for($i = 0; $i < 9; $i += 3){
for($j = 0; $j < 9; $j += 3){
$a = [0,0,0,0,0,0,0,0,0];
for ($row = 0; $row < 3; $row ++){
for ($column = 0; $column < 3; $column++){
if ($a[$this->grid[$i + $row][$j + $column]] != 0){
return false;
}
$a[$this->grid[$i + $row][$j + $column]]++;
}
}
}
}
}
}
Editor is loading...