Definiálj prímfaktorizáló függvényt:
factors :: Integer -> [Integer]
A függvény növekvő sorrendben sorolja fel a szám prímtényezőit, multiplicitással.
factors 1000 ↦ [2,2,2,5,5,5]
factors 1234567890 ↦ [2,3,3,5,3607,3803]
Állítsd elő egy lista összes prefixét.
inits :: [a] -> [[a]]
inits [1,2,3] ↦ [[],[1],[1,2],[1,2,3]]
Készíts párokat egy lista szomszédos elemeiből.
pairs :: [a] -> [(a, a)]
pairs [3,45,2,1] ↦ [(3,45),(45,2),(2,1)]
Egy szövegben számold meg, hány szó kezdődik azzal a betűvel, amelyikkel az előző végződött.
wordCont :: String -> Int
wordCont "ab ba aa ba" ↦ 2
Találd meg elemek listájának minimumát.
minimum :: Ord a => [a]{-véges, nemüres-} -> a
true = minimum [3,4,1,2] == 1
Készítsd el egy listából az elemet megelőző elemek maximumának listáját.
maximums :: Ord a => [a] -> [a]
maximums [1,3,2,8,0] ↦ [1,3,3,8,8]
Add meg egy lista összes részlistáját.
sublists :: [a] -> [[a]]
sublists "abcd"
↦ ["a","ab","b","abc","bc",
"c","abcd","bcd","cd","d"]
sublists [1..]
↦ [[1],[1,2],[2],[1,2,3],[2,3],[3], ...]
Add meg egy lista összes adott hosszúságú részlistáját, illetve adott számnál nem hosszabb részlistáit.
subListWithLength :: Int -> [a] -> [[a]]
subListWithMaxLength :: Int -> [a] -> [[a]]
subListWithLength 3 "eiaou"
↦ ["eia","iao","aou"]
subListWithMaxLength 3 "eiaou"
↦ ["e","ei","eia","i","ia","iao",
"a","ao","aou","o","ou","u"]
Add meg a listában leggyakrabban előforduló karaktert.
mostFrequentChar :: String -> Char
mostFrequentChar "abrakadabra" ↦ 'a'
Keresd meg egy szöveg egyik leghosszabb szavát.
longestWord :: String -> String
Keresd meg egy koordinátákkal adott pontsorozatban az origóhoz legközelebbi pontot.
closestToOrigo :: Real a => [(a, a)] -> (a, a)
Állítsd elő a következő sorozatot:
0,1,0,-1,0,1,2,1,0,-1,-2,-1,0,1,2,3,2,1,0,-1,...
sequence010 :: [Int]
Állítsd elő azt a listát, amely a természetes számokat tartalmazza a négyzetszámok elhagyásával.
natWithoutSquares :: [Int]
natWithoutSquares !! 999 == 1032
natWithoutSquares !! 99999 == 100316
Keressük meg azokat az a
, b
, c
logikai értékeket, amelyekre teljesül az alábbi képlet.
(a || b && c) /= ((a || b) && c)
A megoldás legyen könnyen átírható tetszőleges képletre, amely tetszőleges számú változót tartalmazhat.
Állítsd elő a következő végtelen szöveget:
"* ** *** **** *****
..."
.
stars :: String
[(0,10),(1,9),
...,(10,0)]
listát.[(0,0),(0,1),(1,0),(0,2),(1,1),(2,0), ...]
Add vissza azt a listát, amely a megkapottól abban tér el, hogy a megadott elem nem szerepel benne.
delete :: Eq a => a -> [a] -> [a]
Számold kis sok egymás utáni szám különbségét.
differences :: Num a => [a] -> [a]
differences [1,4,5,6] ↦ [3,1,1]
Állítsunk elő egy n*n
-es sakktáblát mint logikai értékek listájának listáját és szövegesen is.
boolChessTable :: Int -> [[Bool]]
chessTable :: Int -> [String]
boolChessTable 4 ↦ [[True, False, True, False]
,[False, True, False, True]
,[True, False, True, False]
,[False, True, False, True]]
chessTable 4 ↦ [ " x x"
, "x x "
, " x x"
, "x x "]
Adott listából válaszd le az elemeket egy adott tulajdonságot nem teljesítő elemig (az elemmel bezárólag).
takeWhileNext :: (a -> Bool) -> [a] -> [a]
takeWhileNext even [2,4,6,7,8] ↦ [2,4,6,7]
takeWhileNext even [7,8] ↦ [7]
takeWhileNext even [6,8] ↦ [6,8]
Állapítsd meg, hogy egy lista utótagja-e egy másiknak.
isSuffixOf :: Eq a => [a]{-véges-} -> [a]{-véges-} -> Bool
Igaz:
"alma" `isSuffixOf` "alma"
"alma" `isSuffixOf` "vadalma"
Nem igaz:
"alma" `isSuffixOf` "almafa"
"alma" `isSuffixOf` "alm"
Definiáld két lista rendezett összefésülését. A két lista elejéről mindig a kisebb elemet választjuk következőnek.
sortMerge :: Ord a => [a] -> [a] -> [a]
sortMerge [1,2,8] [3,4,10] ↦ [1,2,3,4,8,10]
sortMerge [] [3,4,10] ↦ [3,4,10]