This commit is contained in:
		
							
								
								
									
										105
									
								
								tests/sudoku_solver.aer
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								tests/sudoku_solver.aer
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| import 'math'; | ||||
|  | ||||
| class Sudoku { | ||||
| 	public int[] $board; | ||||
| 	int $size; | ||||
|  | ||||
| 	public void __construct(int[] $board) { | ||||
| 		$this->board = $board; | ||||
| 		$this->size = sizeof($this->board); | ||||
| 	} | ||||
|  | ||||
| 	public bool isSafe(int $row, int $col, int $n) { | ||||
| 		for(int $d = 0; $d < $this->size; $d++) { | ||||
| 			if($this->board[$row][$d] == $n) { | ||||
| 				return false; | ||||
| 			} | ||||
| 		} | ||||
| 		for(int $r = 0; $r < $this->size; $r++) { | ||||
| 			if($this->board[$r][$col] == $n) { | ||||
| 				return false; | ||||
| 			} | ||||
| 		} | ||||
| 		int $sqrt = (int) sqrt($this->size); | ||||
| 		int $boxRowStart = $row - $row % $sqrt; | ||||
| 		int $boxColStart = $col - $col % $sqrt; | ||||
| 		for(int $w = $boxRowStart; $w < $boxRowStart + $sqrt; $w++) { | ||||
| 			for(int $q = $boxColStart; $q < $boxColStart + $sqrt; $q++) { | ||||
| 				if($this->board[$w][$q] == $n) { | ||||
| 					return false; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	public void print() { | ||||
| 		for(int $r = 0; $r < $this->size; $r++) { | ||||
| 			for(int $d = 0; $d < $this->size; $d++) { | ||||
| 				print($this->board[$r][$d] + " "); | ||||
| 			} | ||||
| 			print("\n"); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public bool solve() { | ||||
| 		int $row = -1; | ||||
| 		int $col = -1; | ||||
| 		bool $isEmpty = true; | ||||
| 		for(int $i = 0; $i < $this->size; $i++) { | ||||
| 			for(int $j = 0; $j < $this->size; $j++) { | ||||
| 				if($this->board[$i][$j] == 0) { | ||||
| 					$row = $i; | ||||
| 					$col = $j; | ||||
| 					$isEmpty = false; | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			if(!$isEmpty) { | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		if($isEmpty) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		for(int $n = 1; $n <= $this->size; $n++) { | ||||
| 			if($this->isSafe($row, $col, $n)) { | ||||
| 				$this->board[$row][$col] = $n; | ||||
| 				if($this->solve()) { | ||||
| 					return true; | ||||
| 				} else { | ||||
| 					$this->board[$row][$col] = 0; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| class Program { | ||||
|  | ||||
| 	void main() { | ||||
| 		int[] $board = { | ||||
| 			{3, 0, 6, 5, 0, 8, 4, 0, 0}, | ||||
| 			{5, 2, 0, 0, 0, 0, 0, 0, 0}, | ||||
| 			{0, 8, 7, 0, 0, 0, 0, 3, 1}, | ||||
| 			{0, 0, 3, 0, 1, 0, 0, 8, 0}, | ||||
| 			{9, 0, 0, 8, 6, 3, 0, 0, 5}, | ||||
| 			{0, 5, 0, 0, 9, 0, 6, 0, 0}, | ||||
| 			{1, 3, 0, 0, 0, 0, 2, 5, 0}, | ||||
| 			{0, 0, 0, 0, 0, 0, 0, 7, 4}, | ||||
| 			{0, 0, 5, 2, 0, 6, 3, 0, 0} | ||||
| 		}; | ||||
| 		object $sudoku = new Sudoku($board); | ||||
| 		$sudoku->print(); | ||||
| 		print("=================\n"); | ||||
| 		if($sudoku->solve()) { | ||||
| 			$sudoku->print(); | ||||
| 		} else { | ||||
| 			print("No solution found\n"); | ||||
| 			$sudoku->print(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| } | ||||
							
								
								
									
										19
									
								
								tests/sudoku_solver.exp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								tests/sudoku_solver.exp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| 3 0 6 5 0 8 4 0 0  | ||||
| 5 2 0 0 0 0 0 0 0  | ||||
| 0 8 7 0 0 0 0 3 1  | ||||
| 0 0 3 0 1 0 0 8 0  | ||||
| 9 0 0 8 6 3 0 0 5  | ||||
| 0 5 0 0 9 0 6 0 0  | ||||
| 1 3 0 0 0 0 2 5 0  | ||||
| 0 0 0 0 0 0 0 7 4  | ||||
| 0 0 5 2 0 6 3 0 0  | ||||
| ================= | ||||
| 3 1 6 5 7 8 4 9 2  | ||||
| 5 2 9 1 3 4 7 6 8  | ||||
| 4 8 7 6 2 9 5 3 1  | ||||
| 2 6 3 4 1 5 9 8 7  | ||||
| 9 7 4 8 6 3 1 2 5  | ||||
| 8 5 1 7 9 2 6 4 3  | ||||
| 1 3 8 9 4 7 2 5 6  | ||||
| 6 9 2 3 5 1 8 7 4  | ||||
| 7 4 5 2 8 6 3 1 9  | ||||
		Reference in New Issue
	
	Block a user