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]);
    }
}

Basis algoritme Opdracht 1. algoritme 1 - deel 1