Parallele Programmierung - Solitaire Chess

Parallele Programmierung - Solitaire Chess Kira Duwe - Enno Zickler DKRZ- UHH 7. Oktober 2013 Kira Duwe - Enno Zickler (DKRZ- UHH) Parallele Progra...
2 downloads 0 Views 959KB Size
Parallele Programmierung - Solitaire Chess Kira Duwe - Enno Zickler DKRZ- UHH

7. Oktober 2013

Kira Duwe - Enno Zickler (DKRZ- UHH)

Parallele Programmierung - Solitaire Chess

7. Oktober 2013

1 / 16

Spielregeln

Figuren ziehen nach Schachregeln pro Zug eine Figur ziehen, um eine andere zu schlagen 4 x 4 - Brett 10 Figuren : 2 x Bauer, T¨ urme, Springer, L¨aufer; 1 x K¨onig und Dame Ziel: eine einzige Figur bleibt u ¨brig

Kira Duwe - Enno Zickler (DKRZ- UHH)

Parallele Programmierung - Solitaire Chess

7. Oktober 2013

2 / 16

Fragestellungen Vorhaben Welche Startpositionen sind l¨ osbar? (mit variierender Figurenanzahl) M¨ogliche Erweiterungen: gr¨ oßeres Spielbrett andere Brettform In wie viel Z¨ ugen ist ein Spiel l¨ osbar? Wie viele unterschiedliche zum Ziel f¨ uhrende Zugm¨oglichkeiten gibt es?

Ergebnis Wie viele Spielbretter sind l¨ osbar Alle Spielbretter mit 1 bis 10 Figuren Variable Brettgr¨oße von 1 bis 21 Felder in beliebiger rechteckiger Form

Kira Duwe - Enno Zickler (DKRZ- UHH)

Parallele Programmierung - Solitaire Chess

7. Oktober 2013

3 / 16

Spielbrettdarstellung Oktaldarstellung Figuren

16 Felder * 3 bit = 48 bit uint64 ist ausreichend

0 = leeres Feld

kleiner als Array (16 * 8 bit = 128 bit)

1 = Bauer

0 0 4 2

1 5 2 3

0 6 1 0

0 0 4 3

Tabelle: Spielbrett 3032 4124 0650 0010

Kira Duwe - Enno Zickler (DKRZ- UHH)

Parallele Programmierung - Solitaire Chess

2 = Turm 3 = L¨aufer 4 = Springer 5 = K¨onig 6 = Dame

7. Oktober 2013

4 / 16

Spielbretterzeugung

Verschachtelte for-Schleifen, f¨ ur jede Figur von 0 bis Spielbrettgr¨oße bei doppelten Figuren sollte die 2. Figur abh¨angig von der 1. sein Abschneiden der Schleifendurchl¨aufe, wenn betrachtetes Feld nicht frei

Kira Duwe - Enno Zickler (DKRZ- UHH)

Parallele Programmierung - Solitaire Chess

7. Oktober 2013

5 / 16

Spielbretterzeugung I

1 for ( Dame von 0 bis 16) 2 if ( Feldfrei ) 3 for ( Koenig von 0 bis 16) 4 if ( Feldfrei ) 5 for ( Springer1 von 0 bis 16) 6 if ( Feldfrei ) 7 for ( Springer2 von posSpringer1 bis ,→ 16) 8 ... 9 for ( Bauer2 von posBauer1 bis 16) 0 S p ie l b re t t be r e ch n e n

Kira Duwe - Enno Zickler (DKRZ- UHH)

Parallele Programmierung - Solitaire Chess

7. Oktober 2013

6 / 16

Spielbrettberechnung

Dynamische Programmierung Vorherige L¨osungen werden wieder verwendet Erzeugung nach Figurenanzahl (+ for-Schleife) Berechnung nach Figurenanzahl aufsteigend L¨osungen der vorherigen Ebene m¨ ussen bekannt sein

Kira Duwe - Enno Zickler (DKRZ- UHH)

Parallele Programmierung - Solitaire Chess

7. Oktober 2013

7 / 16

Spielbrettberechnung

Umwandlung in Array f¨ ur Zugberechnung ¨ Felderweise Uberpr¨ ufung des gesamten Brettes, ob durch m¨oglichen Zug ein l¨osbares Brett entsteht Zugriff auf vorherige L¨ osungen Abbruch der Berechnung, wenn Nachfolgebrett als l¨osbar gespeichert

Kira Duwe - Enno Zickler (DKRZ- UHH)

Parallele Programmierung - Solitaire Chess

7. Oktober 2013

8 / 16

Schlagen der Figuren I

1 einser_Bitmaske = 0 x f f ff f f ff f f ff f f ff L L ; 2 3 // Spielfiguren , geschlagene und schlagende , von ,→ Spielbrett loeschen 4 // Von der Bitmaske wird "(7