Informatika2-2013/PotHazi2

A MathWikiből
(Változatok közti eltérés)
48. sor: 48. sor:
 
  1 6 9 7 5 4 3 2 8  
 
  1 6 9 7 5 4 3 2 8  
 
   8 3 2 1 9 7 6 5  
 
   8 3 2 1 9 7 6 5  
 
 
  Nyertel!
 
  Nyertel!

A lap 2013. május 19., 23:24-kori változata

Írj Sudoku osztályt, elég minimalista lesz, de kibõvíthetitek piros pontért.

  • Létrehozáskor kelljen megadni neki egy listák listáját, melyben egy sudoku feladvány van megadva, a belsõ listák a sudoku sorai.
    • 0 jelöli az üres mezõket.
    • Az __init__ másolja le a kapott listát és tárolja adattagként a másolatot, másoláshoz lehet használni a deepcopy-t (kell hozzá: import copy)
    • Az __init__ számolja ki hány üres mezõ van a megadott sudoku-ban és tárolja ezt egy uresek adattagban.
import copy
l_masolat = copy.deepcopy(l_eredeti)
  • Legyen __repr__ metódusa, mely kiírja a sudoku-t, az üres helyekre szóközt tegyen ne az ott levõ 0-t.
  • Legyen set metódusa, mely két (i, j) indexet (sort, oszlopot) és egy 1-9 közti x számot kap (nem kell ellenõrizni, hogy tényleg jót adunk-e meg).
    • A metódus állítsa a sudoku i. sorának j. elemét x-re.
    • Ha 0 azaz üres elemet állít át akkor az uresek adattagot csökkentse eggyel.
    • Ha ezzel a mûvelettel az üres mezõk száma 0-ra csökkent írja ki, hogy "Nyertel!"

Egy példa futtatás:

s = Sudoku([ \
    [5, 4, 2, 9, 7, 1, 8, 3, 6], \
    [9, 3, 6, 5, 4, 8, 2, 0, 1], \
    [7, 1, 8, 3, 6, 2, 5, 9, 4], \
    [8, 2, 5, 6, 9, 3, 4, 1, 0], \
    [6, 7, 4, 1, 0, 5, 9, 8, 3], \
    [3, 9, 1, 4, 8, 7, 6, 5, 2], \
    [2, 5, 7, 8, 3, 6, 1, 4, 9], \
    [1, 6, 9, 7, 5, 4, 3, 2, 8], \
    [0, 8, 3, 2, 1, 9, 7, 6, 5]])
 
print s
 
s.set(4, 4, 2)
s.set(1, 7, 7)
s.set(8, 0, 4)
s.set(4, 8, 7)

Erre a kimenet:

5 4 2 9 7 1 8 3 6 
9 3 6 5 4 8 2   1 
7 1 8 3 6 2 5 9 4 
8 2 5 6 9 3 4 1   
6 7 4 1   5 9 8 3 
3 9 1 4 8 7 6 5 2 
2 5 7 8 3 6 1 4 9 
1 6 9 7 5 4 3 2 8 
  8 3 2 1 9 7 6 5 
Nyertel!
Személyes eszközök