Opgepast! Het lijkt erop dat je Dodona gebruikt binnen een andere webpagina waardoor mogelijk niet alles goed werkt. Laat dit weten aan je lesgever zodat hij het probleem kan oplossen door een instelling in de leeromgeving aan te passen. Ondertussen kan je op deze link klikken om Dodona te openen in een nieuw venster.
Sudoku puzzel
Log in om je oplossingen te testen.
{-|
Een sudoku wordt voorgesteld door een tweedimensionaal rooster van getallen.
We gebruiken geneste lijsten "row-first", zoals in onderstaande tekening.
o---0-1-2--3-4-5--6-7-8-----> x
|
0| [[0,0,0|,0,0,0,|0,0,0],
1| [0,0,0|,0,0,0,|0,0,0],
2| [0,0,0|,0,0,0,|0,0,0],
| ------+-------+------
3| [0,0,0|,0,0,0,|0,0,0],
4| [0,0,0|,0,0,0,|0,0,0],
5| [0,0,0|,0,0,0,|0,0,0],
| ------+-------+------
6| [0,0,0|,0,0,0,|0,0,0],
7| [0,0,0|,0,0,0,|0,0,0],
8| [0,0,0|,0,0,0,|0,0,0]]
|
V
y
-}
type Board = [[Int]]
-- Enkele type-synoniemen
type Row = [Int] -- ^ Een rij in een sudoku.
type Col = [Int] -- ^ Een kolom in een sudoku.
type X = Int -- ^ De x van een coördinaat.
type Y = Int -- ^ De y van een coördinaat.
-- Enkele constanten
empty, width, height :: Int
empty = 0 -- ^ Een leeg vakje.
width = 9 -- ^ De breedte van een sudoku.
height = 9 -- ^ De hoogte van een sudoku.
-- | Een lege rij.
emptyRow :: Row
emptyRow = undefined
-- | Een leeg bord.
emptyBoard :: Board
emptyBoard = undefined
-- | Neem een rij uit een sudoku.
getRow :: Board -> Y -> Row
getRow = undefined
-- | Neem een kolom uit een sudoku.
getCol :: Board -> X -> Col
getCol = undefined
-- | Controleert of een gegeven getal voorkomt in een gegeven rij.
contains :: Int -> [Int] -> Bool
contains = undefined
-- | Bereken een deellijst.
getSubList :: Int -- ^ Start-index (inclusief).
-> Int -- ^ Eind-index (inclusief).
-> [a] -- ^ Volledige lijst.
-> [a] -- ^ Deellijst.
getSubList = undefined
{-
Met de volgende drie functies zullen we kijken of een vierkantje van 3 op 3
een gegeven getal bevat. We omschrijven het vierkantje door 1 van zijn 9
coördinaten in het volledige rooster. Gegeven bijvoorbeeld coördinaat (1,1)
zoeken we in het vierkantje linksboven, met grenzen (0:2, 0:2). Coördinaat (7, 4) wijst van weer op
het vierkantje links in het midden (6:8, 3:5).
De indexmethode zal deze grenzen teruggeven, maar in 1 as tegelijk:
- index 1 = (0, 2)
- index 7 = (6, 8)
- index 4 = (3, 5)
-}
-- | De grenzen van het vierkantje waar gegeven getal in ligt (in 1 as).
index :: Int -> (Int, Int)
index = undefined
-- | De lijst van getallen die in het vierkantje van gegeven coördinaat liggen.
-- Hint: gebruik tweemaal `getSubList`.
getSubSquare :: Board -> X -> Y -> [Int]
getSubSquare = undefined
-- | Of in een rooster een getal in het vierkantje van gegeven coördinaten ligt.
containedInSquare :: Board -> Int -> X -> Y -> Bool
containedInSquare = undefined
-- | Of in een rooster een getal op gegeven coördinaat past. Dit is het geval
-- als de omvattende rij, kolom of vakje van die coördinaat dat getal nog niet
-- bevatten.
canPlaceNumber :: Board -> Int -> X -> Y -> Bool
canPlaceNumber = undefined
-- | Vervangt het element op gegeven coördinaat door het gegeven element.
replace :: a -> Int -> [a] -> [a]
replace = undefined
-- | Vervangt het element op gegeven coördinaat door het gegeven element.
update :: Int -> X -> Y -> Board -> Board
update = undefined
-- | De eerste (in leesvolgorde) lege coördinaat in een bord.
findFirstEmpty :: Board -> (X, Y)
findFirstEmpty = undefined
-- | Of dit bord geen lege vakjes meer bevat.
noneEmpty :: Board -> Bool
noneEmpty = undefined
-- | De lijst van getallen die past op een locatie op een bord.
options :: Board -> X -> Y -> [Int]
options = undefined
-- | De lijst van mogelijke borden die 1 vakje verder ingevuld zijn.
nextBoards :: Board -> [Board]
nextBoards = undefined
-- | Los een sudoku-puzzel op.
solve :: Board -- ^ De focus, de huidige oplossing.
-> [Board] -- ^ De borden die we nog verder kunnen uitwerken.
-> Board -- ^ De opgeloste sudoku.
solve = undefined
Je kunt zo vaak indienen als je wenst. Er wordt enkel rekening gehouden met je laatst ingediende oplossing.
Log in om je oplossingen te testen.