sudokuusers-cs.au.dk/mic/dintprog/e13/uge/1/slides/00-sudoku.pdf · dintprog, e13 sudoku.2...
TRANSCRIPT
dIntProg, E13 Sudoku.2
Oprindelsen af Sudoku
• Suji wa dokushin ni kagir – tallene må kun forekomme én gang
• Su doku – tal enkelt
• Opfundet af Leonhard Euler – Schweitzisk matematiker, 1707-1783 – Største matematiker i det 18. århundrede – Latinske kvadrater (romertal), 1783
Leonhard Euler Joseph Louis Lagrange Simeon Denis Poisson
Gustav Peter Lejeune Dirichlet Rudolf Otto Sigismund Lipschitz
C. Felix (Christian) Klein C. L. Ferdinand (Carl Louis) Lindemann
Hermann Minkowski Constantin Carathéodory
Georg Aumann Friedrich Ludwig Bauer
David Gries Michael E. Caspersen
dIntProg, E13 Sudoku.3
Nutidens Sudoku • Howard Garnes, 1979
– Math Puzzles and Logic Problems, Dell Magazines – Amerikansk puslespilsblad – Et spil benævnt ”Number Place”
• Nikoli, 1984 – Japansk puslespilsblad – Introducerede betegnelsen Suji wa dokushin ni kagir – Stort hit fra 1986 (registreret varemærke)
• I dag – Udgivelse af fem Sudoku-blade hver måned i Japan
dIntProg, E13 Sudoku.4
Sudoku og computerprogrammer • Wayne Gould
– Startede i 1997 på et program der kunne lave Sudoku-spil – Det tog ham efter sigende over seks år... – waynegouldpuzzles.com/sudoku/
• Leverer til engelske aviser... – Debut i The Times, 12. november 2004
• ... og danske – Politiken, 12. juni 2005 – Jyllands-Posten, 13. juni 2005 – Ekstra Bladet, 15. juni 2005 – ...
dIntProg, E13 Sudoku.5
GADs bestsellerliste, 14. oktober 2005
1. Litas: Sudoku 1 2. Litas: Sudoku 2 3. Litas: Sudoku 3 4. Sudoku for begyndere 5. Sudoku 6. Su Doku 7. Su Doku 2 8. Flere Sudoku 9. Junior Sudoku 10. Mange flere Sudoku
dIntProg, E13 Sudoku.6
Mennesket mod maskinen... (1)
Deep Blue vinder matchen 3,5 – 2,5
3. – 11. maj 1997
dIntProg, E13 Sudoku.7
Mennesket mod maskinen... (2)
Dyb Gul løfter 187,5 kg mod Kaspers 180 kg
11. maj 19...
Kasper Dyb Gul
dIntProg, E13 Sudoku.8
Computere og intelligens...
En computer der spiller skak
udviser menneskelige træk i samme grad
som en gaffeltruck der løfter gods...
dIntProg, E13 Sudoku.9
Computerens styrke • At kunne foretage simple beregninger lynhurtigt
• På kort tid at kunne – lagre store datamængder – søge i store datamængder – bearbejde store datamængder – afsøge et stort antal muligheder og kombinationer
• Informations-Repræsentations-Transformations-Maskine – hurtig og sikker i detaljen – skal programmeres!
Computer og program • En computer er en generel maskine, men uden
program(mer) er den intet værd!
• Computer + X-program = X-maskine
dIntProg, E13 Sudoku.10
X = Windows, Linux, OS X, … skak, sudoku, tekst, musik, studieadministration, social interaktion, flykontrol, stråle- behandling, DNA-forskning, kommunikation, spil, læse, regne, undervise, motorstyring, bremsestyring, bolighandel, bilhandel, dagligvarehandel, billeddeling, videodeling, kvidre, søge, oversættelse, … Computer
Program
Program
Program
Program
…
dIntProg, E13 Sudoku.15
Spilleregel
I hver blok, række og søjle skal tallene 1..9 forekomme præcis en gang.
Blok
Række
Søjle
dIntProg, E13 Sudoku.17
Strategier med udgangspunkt i værdi
• Eliminering (Locked cells) – udgangspunkt i en bestemt værdi
(værdien 1)
• Afledt udelukkelse – udgangspunkt i en bestemt værdi
(værdien 2)
dIntProg, E13 Sudoku.18
Strategier med udgangspunkt i felt
• Komplettering – udgangspunkt i et bestemt felt
• Sweeping – udgangspunkt i et bestemt felt
dIntProg, E13 Sudoku.19
Hvis man har muskler nok • Rå kraft (brute force)
• Afprøv systematisk alle lovende muligheder a b c d e f g h i
1
2
3
4
5
6
7
8
9
a1 c1 e1 g1 i1 a2 b2 e2 h2 i2 ...
9
3 9
2 7 8
7 8
8
3 9 2 7 8 1 7
7
9 2
9
2 4
1 4
dIntProg, E13 Sudoku.20
Hvis man har muller nok • Rå kraft (brute force)
• Afprøv systematisk alle lovende muligheder a b c d e f g h i
1
2
3
4
5
6
7
8
9
a1 c1 e1 g1 i1 a2 b2 e2 h2 i1 ...
9
3 9
2 7 8
7 8
8
3 9 2 7 8 1 7
7
9 4
9
2 4
1 4
dIntProg, E13 Sudoku.21
Hvis man har muller nok • Rå kraft (brute force)
• Afprøv systematisk alle lovende muligheder a b c d e f g h i
1
2
3
4
5
6
7
8
9
a1 c1 e1 g1 i1 a2 b2 e2 h2 i1 ...
9
3 9
2 7 8
7 8
8
3 9 2 7 8 4
7
9
2 4
1 4
?
dIntProg, E13 Sudoku.22
Algoritmen prøvAlleMuligheder() { if <alle felter er udfyldt> { <udskriv grid> } else { <husk seneste felt> <gå til næste frie felt> for <hvert ciffer c> { if <c er lovende> { <fastfrys feltværdi> prøvAlleMuligheder() } } // backtrack to previous field <fortryd fastfrosne værdi> <gå tilbage til forrige felt> } }
a b c d e f g h i
1
2
3
4
5
6
7
8
9
3 9 2 7 8 1 7 9 4
dIntProg, E13 Sudoku.23
Hvad har vi brug for at kunne på et Grid prøvAlleMuligheder() { if <alle felter er udfyldt> { <udskriv grid> } else { <husk seneste felt> <gå til næste frie felt> for <hvert ciffer c> { if <c er lovende> { <fastfrys feltværdi> prøvAlleMuligheder() } } // backtrack to previous field <fortryd fastfrosne værdi> <gå tilbage til forrige felt> } }
// allFilled() // printGrid() // currentField() // advanceToNextUnfilled() // promissing(c) // setFieldValue(c) // clearCurrentField() // setToField()
dIntProg, E13 Sudoku.24
Java-version public void tryAll() { if ( g.allFilled() ) { g.printGrid(); } else { // try all promissing values at next field Field previous = g.currentField(); g.advanceToNextUnfilled(); for ( int c = 1; c <=9; c++ ) { if ( g.promissing(c) ) { g.setFieldValue(c); tryAll(); } } // backtrack to previous field g.clearCurrentField(); g.setToField(previous); } }
Metoden promissing(c) benytter sweeping til at afgøre om en kandidat c er værd at satse på.
blok række søjle
dIntProg, E13 Sudoku.25
Klassemodel
Grid
boolean allFilled() void printGrid() Field currentField() void advanceToNextField() boolean promissing(int c) void setFieldValue(int v) void clearCurrentField() void setToField(Field f)
Solver
void tryAll()
1
Time Magazine, 1984
dIntProg, E13 Sudoku.28
In 1984, TIME magazine quoted the chief editor of a certain software publication as saying:
"Put the right kind of software into a computer, and it will do whatever you want it to. There may be limits on what you can do with the machines themselves, but there are no limits on what you can do with
software.”
Sludder!
Der er grænser – masser af grænser –
men ufatteligt mange ting kan lade sig gøre.