Libraries
Inhaltsverzeichnis
Bibliothek f�r Regression-Tests
Testen auf Regressionen ist immer schwierig und aufwendig, wenn die Tests nicht vollst�ndig automatisiert werden k�nnen. Ein Problem beim Testen vieler verschiedener Techniken besteht darin, eine gro�e Auswahl an Testf�llen zu finden, die automatisch behandelt werden k�nnen.
In der Vergangenheit wurde einiges an Arbeit investiert um Bibliotheken von Testf�llen (bzw. Bibliotheken von Sudokus, die als Testf�lle verwendet werden k�nnen) zusammenzustellen, z.B. Ruuds Benchmark Sudoku List, Mike Barkers zoo, RWs The Effortless Extremes thread oder tareks A Pure Jellyfish Collection (und diese Liste ist nat�rlich unvollst�ndig).
Die meisten dieser Zusammenstellungen kann jedoch nicht f�r automatisierte Tests verwendet werden, weil sie von der verwendeten Solver-Strategie abh�ngen oder in verschiedenen Formaten vorliegen. Ich habe daher eine eigene Sammlung von Testf�llen zusammengestellt und ein Format entwickelt, das einfaches Testen erm�glicht. Die meisten Testf�lle wurden mit HoDoKu erzeugt, aber viele sind auch aus Foren und Sammlungen aus dem Internet. Aufgrund der gro�en Anzahl an Testf�llen (mehr als 1000 in Version 1.0 der Bibliothek) wurden bei den einzelnen Sudokus keine Referenzen angegeben.
Der Zweck dieser Bibliothek ist es, so viele Testf�lle wie m�glich f�r so viele verschiedene L�sungstechniken wie m�glich zu sammeln. Jeder Test belegt genau eine Zeile und testet eine bestimmte Technik f�r eine bestimmte Menge an Kandidaten. Die einzige Anforderung an einen g�ltigen Testfall besteht darin, dass es keine andere Instanz der getesteten Technik f�r die angegebenen Kandidaten gibt, die zu einer anderen Platzierung oder zu anderen Eliminierungen f�hrt.
Das Bibliotheksformat hat den zus�tzlichen Vorteil, dass es ein komplettes PM-Grid enth�lt und den Unterschied zwischen Angabe und vom Anwender gesetzten Zellen bewahrt (und dabei trotzdem nur eine Zeile ben�tigt).
Ein besonderer Dank gilt dem MaNik-e Team f�r ihre Hilfe beim Kodieren der eigentlichen Testroutine.
HoDoKu Bibliotheksformat
Ein Test besteht aus einer Zeile mit sieben Feldern, die mit ":" getrennt werden. Format:
:<Technik>:<Kandidat(en)>:<Angabe>:<gel�schte Kandidaten>:<Eliminierungen>:<gesetzte Zellen>:<Extra>
- <Technik>
- Eine alphanumerische Zeichenkette, die die Technik bestimmt (f�r Werte siehe die Bibliotheksdatei). F�r einige Techniken existieren Varianten. Eine Variante beginnt mit einem Trennstrich nach dem Code f�r die Technik, gefolgt von einer Nummer. Varianten k�nnen nat�rlich bei Bedarf ignoriert werden. Besteht die Variante aus einem einfachen 'x', ist der Test ein Fail-Case: Es darf keine Instanz der Technik gefunden werden.
- <Kandidat(en)>
- Der Kandidat (die Kandidaten), f�r den die Technik angewendet wird (siehe unten)
- <Angabe>
- Die gesetzten Zellen des Sudokus; ein '+' vor einer Ziffer bedeutet, dass der Wert nicht zur Angabe geh�rt, sondern dass die Zelle vom Anwender gesetzt wurde (optional)
- <gel�schte Kandidaten>
- Kandidaten, die gel�scht werden m�ssen, nachdem die Zellen der Angabe gesetzt wurden. <givens> und <deleted candidates> gemeinsam entsprechen einem PM-Grid, allerdings mit dem Vorteil, dass der Unterschied zwischen Angabe und vom Anwender gesetzten Zellen erhalten bleiben kann (Format siehe unten)
- <Eliminierungen>
- Kandidaten, die von der <Technik> im PM-Grid eliminiert werden k�nnen, falls vorhanden (Format siehe unten)
- <gesetzte Zellen>
- Zellen, die von der <Technik> im PM-Grid gesetzt werden k�nnen, falls vorhanden (Format siehe unten)
- <Extra>
- Kann zus�tzliche Informationen f�r einzelne Techniken enthalten. Derzeit sind folgende Werte
definiert:
- Chains/Loops: Die L�nge der chain/loop in Anzahl Inferences
Format f�r Kandidaten/Eliminierungen/gesetzte Zellen
<Kandidat><Zeile><Spalte>
<Zeile> und <Spalte> gehen von 1 bis 9; enth�lt ein Eintrag mehrere Instanzen, werden sie mit Leerzeichen getrennt.
Beispiel: ":436 257:" bedeutet "r3c6<>4, r5c7<>2"
<Eliminierungen> und <gesetzte Zellen> k�nnen nicht gleichzeitig vorkommen.
Der Inhalt von <Kandidaten> h�ngt von der Technik ab:
- F�r Singles, Forcing Chain/Net Verities: Der Kandidat, der gesetzt werden kann
- Nice Loops/AIC, Forcing Chain/Net Contradictions, ALS, SDC: Der Kandidat, der eliminiert werden kann
- Alle anderen Techniken: Die im L�sungsschritt verwendeten Kandidaten
Beispiel 1:
:0003:8:6...+53+4.7....4+2+56.+254867+3+9+1.+4..+9+6.1.162+38+5749.3..+1+4.+5....42193..1.+57...+44+2.6+3.+1+75:::829:
Bedeutung:
Erzeuge ein Sudoku aus der Zeichenkette
"6....3..7....4..6..54867..........1.162.8.749.3..........42193..1..7....4..6....5"
(alles von <Angabe>, das kein '+' davor stehen hat - die 'echte' Angabe). Nun platziere die Zellen, die durch den folgenden String gegeben sind:
"....5.4.......25..2.....391.4..96......3.5.......14.5.............5....4.2..3.17."
(alles von <Angabe> mit einem '+' davor); man kann auch alle '+' ignorieren und den folgenden String setzen:
"6...534.7....4256.254867391.4..96.1.162385749.3..14.5....42193..1.57...442.63.175"
es gibt keine Kandidaten, die gel�scht werden m�ssen;
suche ein Naked Single f�r Kandidat 8 im durch <Angabe> und <gel�schte Kandidaten> bestimmten PM-Grid; es sollte eins gefunden werden, das 8 in r2c9 setzt.
Beispiel 2 (die Zeichenkette muss auf einer Zeile stehen)
:0603:3:14+8..+9+72+5.+3...89.697+6....38.+61......3+2.8.56...9......2.5+9+186....+8+3....61+6+1...35+89:224 524 225 525 135 455 755 458 758 165 168 771 284 484 784 285 485 785:364 365::
Bedeutung:
Setze alle Zellen von <Angabe> wie oben beschrieben; danach eliminiere:
r2c4<>25, r2c5 <>25,
r3c5<>1, r5c5<>47, r5c8<>47, r6c5<>1, r6c8<>1, r7c1<>7, r4c8<>247, r5c8<>247;
suche ein Uniqueness Test Type 4 im PM, das Kandidaten f�r Ziffer 3 eliminieren kann; es sollte eines existieren, das 3 aus r6c4 und r6c5 entfernt.
Die komplette Bibliothek:
Exemplar-Bibliothek
HoDoKus Exemplar-Bibliothek ist eine lose Sammlung von Sudokus, die bestimmte Techniken verdeutlichen. Die meisten dieser Sudokus wurden mit HoDoKus Batch-Erzeugungs-Modus (siehe Sudokus im Batchbetrieb erzeugen im Benutzer-Handbuch) gefunden.
Einige Beispiel funktionieren nur, wenn Solver-Optionen oder die Solver-Hierarchie ge�ndert werden, einige wenige Beispiele sind �berhaupt falsch.
Die Bibliothek:
Copyright © 2008-12 by Bernhard Hobiger
Alles Material auf dieser Site unterliegt der GNU FDLv1.3.