Hogyan kell megoldani a következő feladatot Haskellben?
Tudod, hogy ez nem így szokott menni :)
Meddig jutottál? Hol akadtál el? Mutasd az eddigi kódod. Hol van probléma pontosan? Melyik rész nem akar menni?
Külön gratulálnék a képként megosztásért, hogy még véletlenül se tudjuk kipróbálni, módosítani.
Hogy akar valaki szoftverfejlesztő lenni, ha ennyire fogalmatlan?
type Cell = Char
type Table = [[Cell]]
type ClueLine = [Int]
type Clues = ([ClueLine], [ClueLine])
unknown = 'u'
empty = 'e'
full = 'f'
duckClues = (duckRows, duckCols) :: Clues
poundClues = (poundRows, poundCols) :: Clues
duckRows = [[3], [5], [4,3], [7], [5], [3], [5], [1,8], [3,3,3], [7,3,2], [5,4,2], [8,2], [10], [2,3], [6]]
duckCols = [[3], [4], [5], [4], [5], [6], [3,2,1], [2,2,5], [4,2,6], [8,2,3], [8,2,1,1], [2,6,2,1], [4,6], [2,4], [1]]
poundRows = [[4], [2,1], [1,2], [2,2], [2], [8], [2], [8], [2], [2], [2,2,2], [6,3], [2,5,3], [2,2,6], [4,4]]
poundCols = [[2],[4],[2,1],[1,1,2,1],[1,1,4],[11],[12],[2,1,1,2],[1,1,1,3],[1,1,1,2],[1,1,1,2],[3,3],[2,3],[3],[2]]
yinYangClues :: Clues
yinYangClues = (yinYangRows, yinYangCols)
yinYangRows = [[8],[4,4],[2,6],[1,3,2],[3,3],[8],[6],[2,5],[1,2,4],[2,5],[4,5],[8]]
yinYangCols = [[4,4],[3,3],[2,2],[2,2,2],[1,3,2,1],[1,4,2],[7,3],[3,7],[2,6],[10],[8],[4]]
flowerClues :: Clues
flowerClues = (flowerRows, flowerCols)
flowerRows = [[2,2],[1,1,1],[1,1,1],[1,5,2],[1,2,2,1],[1,5,1],[2,1,3],[2,2],[1],[2,1,2],[3],[1]]
flowerCols = [[2],[1,1],[2,1],[1,3,1,1],[1,3,1,1],[3,2,1],[1,3,5],[1,3,1,1],[2,1,1],[1,1,1],[1,1],[2]]
showCell :: Cell -> Char
showCell a
| a == 'u' = '?'
| a == 'e' = ' '
| a == 'f' = '#'
showRow :: [Cell] -> String
showRow r = '|' : addCell r where
addCell [] = "|\n"
addCell (x:xs) = showCell x : addCell xs
showTable :: Table -> String
showTable [] = []
showTable (x:xs) = showRow x ++ showTable xs
empties :: Int -> [Cell]
empties a
| a <= 0 = []
| otherwise = 'e' : empties (a-1)
fulls :: Int -> [Cell]
fulls a
| a <= 0 = []
| otherwise = 'f' : fulls (a-1)
placeOneBlock :: Int -> Int -> [[Cell]]
placeOneBlock f e = options e where
options 0 = []
options a
| length(empties (e-a) ++ fulls f ++ empties (a-f)) > e = []
| otherwise = (empties (e-a) ++ fulls f ++ empties (a-f)) : options (a-1)
emptyLineOptions :: ClueLine -> Int -> [[Cell]]
emptyLineOptions [] 0 = [[]]
emptyLineOptions [] x = [empties x]
emptyLineOptions (x:xs) n
| length (x:xs) == 1 = placeOneBlock x n
| sum (x:xs) + length (x:xs) - 1 > n = []
| otherwise = (fulls x : empties 1 : emptyLineOptions xs (n-x-1)) : emptyLineOptions xs n
isMatching :: Cell -> Cell -> Bool
isMatching a b
| a == 'f' && b /= 'f' = False
| a == 'e' && b /= 'e' = False
| otherwise = True
combineOption :: Cell -> Cell -> Cell
combineOption 'f' 'f' = 'f'
combineOption 'e' 'e' = 'e'
combineOption _ _ = 'u'
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!