snb
Verenigingslid
- Lid geworden
- 12 jun 2008
- Berichten
- 20.223
Vorig jaar hadden we een draad over de Sudoku in NRC en hoe die met VBA op te lossen is.
Ik had de indruk dat het nog wel wat eenvoudiger kon.
Mijn oorspronkelijke aanpak ging uit van de matrix als 2-dimensionele array.
Dat maakt de conversie naar rijen, kolommen en vakken onnodig ingewikkeld.
Ik heb nu de matrix vertaald naar een array met 99 elementen: voor iedere cel 1.
Mijn aanpak bestaat nu uit geneste recursie:
- de analyse per rij, kolom, vak en binnenvak voor ieder cijfer van 1 t/m 9
- verwijdering van mogelijke getallen uit cellen die in hetzelfde gebied voorkomen als een cel met een enkele waarde
- de heraanroeping van de verwijdermacro bij aantreffen van een cel met enkele waarde.
De suggestie van EVR (de 'buiten'vakken) in de vorige draad blijkt overbodig. De huidige 3 routines blijken in staat alle Sudoku's op te lossen.
Ik heb de pagina op mijn website aangepast, meer uitleg toegevoegd en een nieuw bestand met simpeler code ophaalklaar gemaakt.
www.snb-vba.eu
Ik had de indruk dat het nog wel wat eenvoudiger kon.
Mijn oorspronkelijke aanpak ging uit van de matrix als 2-dimensionele array.
Dat maakt de conversie naar rijen, kolommen en vakken onnodig ingewikkeld.
Ik heb nu de matrix vertaald naar een array met 99 elementen: voor iedere cel 1.
Mijn aanpak bestaat nu uit geneste recursie:
- de analyse per rij, kolom, vak en binnenvak voor ieder cijfer van 1 t/m 9
- verwijdering van mogelijke getallen uit cellen die in hetzelfde gebied voorkomen als een cel met een enkele waarde
- de heraanroeping van de verwijdermacro bij aantreffen van een cel met enkele waarde.
De suggestie van EVR (de 'buiten'vakken) in de vorige draad blijkt overbodig. De huidige 3 routines blijken in staat alle Sudoku's op te lossen.
Ik heb de pagina op mijn website aangepast, meer uitleg toegevoegd en een nieuw bestand met simpeler code ophaalklaar gemaakt.