DONT WORK

 avatar
unknown
php
4 years ago
3.0 kB
1
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...