Basis algoritme naar PHP
Algoritme 1 - rij
We nemen eerst de basis waarin we alleen de eerste rij waardes gebruiken in een eenvoudige array:
$sudoku = array(2,3,0,4);
We vertellen eerst aan de lege waardes (dus daar waar nu een 0 staat), welke waardes mogelijk zijn en die we dus kunnen elimineren. Ook hier kiezen we weer voor een eenvoudige aanpak. We zien dat op index 2 van de array $sudoku een lege waarde zit. Op die plek willen we dus alle mogelijk opties (1,2,3 en 4) opgeven. Dat kan op de volgende manier:
$sudoku[2] = array(1,2,3,4);
Als ik nu de uitvoer van de sudoku array laat zien dan ziet die er zo uit: (let op de inhoud van index 2, waarin dus een array is opgenomen)
print_r($sudoku);
//resultaat:
Array
(
[0] => 2
[1] => 3
[2] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
[3] => 4
)
Als je naar de hele rij kijkt weet je al dat niet alle waardes mogelijk zijn. We gaan dus kijken naar welke waardes al voorkomen in rij 1 en die elimineren (verwijderen) we uit de array op index 2. PHP heeft een mooie functie om te kijken of een waarde al voorkomt in de array:
in_array(1, $sudoku); // {zoekwaarde, array} geeft true terug als de waarde bestaat in de array $sudoku of false als deze niet bestaat.
We controleren het bestaan vanuit de waardes in het 'nog lege' veld. Je kan dat met een loop automatiseren:
meer info over php foreach klik hier
foreach($sudoku[2] as $index => $mogelijkeWaarde) {
// dit stukje wordt nu voor elke waarde uitgevoerd, dus eerst 1, dan 2, dan 3 en als laatste 4
}
Als je nu bovenstaande 2 combineert krijg je het volgende algoritme:
foreach($sudoku[2] as $index => $mogelijkeWaarde) {
in_array($mogelijkeWaarde, $sudoku); // true als die bestaat
}
Nu moet je de waarde nog elimineren, dat kun je doen door de waarde in de array te wissen.
unset($sudoku[2][0]); // deze code wist de waarde 1
Met deze info kunnen we het script compleet maken:
$sudoku = array(2,3,0,4);
$sudoku[2] = array(1,2,3,4);
foreach($sudoku[2] as $index => $mogelijkeWaarde) {
if(in_array($mogelijkeWaarde, $sudoku) == true) {
unset($sudoku[2][$index]);
}
}