NB: Dette er et utkast. Oppgaven vil sansynligvis endres.
I oppgaven skal man implemetere spillet Sudoku, som skal kunne spilles på konsollen.Spillet Sukoku består av et delvis utfylt 9x9 brett av tall fra 1 til 9. Målet med spillet er å fylle brettet fulstendig ut slik at det følger visse regler. Reglene er: Det samme tallet kan kun opptre én gang i: 1. hver kolonne, 2. hver rad, og 3. hvert av 3x3 område man får dersom man deler opp brettet i 9 like, kvadratiske deler.
Implementsjon av Sudoku
Sudoku-oppgaven er en åpen oppgave, hvor man selv velger løsninger for hvordan spillet skal implementeres. Det stilles likevel følgende krav:
- Programmet må bestå av minst tre klasser; en klasse for å representere (innholdet i) en rute på brettet, en klasse for brettet med ruter og et hovedprogram for interaksjon med spilleren. De to første av disse må være ordentlig innkapslet.
- Spillet må kunne spilles gjennom konsollen. Dvs. at en spilleren må kunne skrive instruksjoner i konsollen, som deretter utføres i spillet.
- Brett-klassen må kunne initialiseres med en String på formatet beskrevet i lengre nede på siden.
Forslag til visuell representasjon av brett:
+-------------+-------------+-------------+ 1 | . (1) 2 | . . . | . . . | 2 | . . . | . . . | . . . | 3 | . . . | . . . | . . . | +-------------+-------------+-------------+ 4 | . 1* . | . . . | . . . | 5 | . . . | . . . | 2* 2* . | 6 | . . . | . . . | . . . | +-------------+-------------+-------------+ 7 | 2* . . | . 2* . | . . . | 8 | . . . | . . . | . . . | 9 | . . . | . . . | . . . | +-------------+-------------+-------------+ a b c d e f g h i
Forklaring:
- Tall i parenteser: tall som ikke kan endres
- Tall uten parenteser: tall satt av spilleren
- Punktum: tom rute
- Asterisk/stjerne: tall satt av spilleren, i konflikt
Beskrivelse av formatet på brett
Formatet er en streng av tall og punktum. Hvert tegn representerer innholdet i en rute. Rutene kommer venstre til høyre, top til bunn. Det er alltid 81 tegn i strengen.
Eksempelproblemer
.....2..38.273.45....6..87.9.8..5367..6...1..4513..9.8.84..3....79.512.62..8.....
.68.257.3..........71..39..61.35.2...8.....4...3.64.95..76..58..........8.653.42.
.....59.4.8..9.6.5..6....3..3.7.145...8.4.7...742.6.9..6....3..8.1.6..7.3.98.....
...6...513....2..66...3..89..4.2.6...3.418.2...8.7.1..59..6...38..3....241...9...
Vurdering
Oppgaven blir vurdert etter hvorvidt spillet kan
- Nivå 0 (10%): Skrive ut brettet ved oppstart
- Nivå 1 (30%): Fylle ut ruter (med input fra brukeren) uten hensyn til regler.
- Nivå 2 (40%): Tillate endringer kun i originalt tomme ruter. (Tall satt av spilleren må kunne kunne endres i tillegg til tomme ruter.)
- Nivå 3 (100%): Markere inkonsistente tall (dvs. tallene som dukker opp men enn en gang i kollone/rad/område).
Hvert nivå innbærer at all funksjonalitet i lavere nivåene fungerer som beskrevet.