47 lines
No EOL
1.4 KiB
Haskell
47 lines
No EOL
1.4 KiB
Haskell
aand :: [Bool] -> Bool
|
|
aand x = aandImpl x True
|
|
|
|
aandImpl :: [Bool] -> Bool -> Bool
|
|
aandImpl (x:xs) cursor = aandImpl xs (cursor && x)
|
|
aandImpl _ cursor = cursor
|
|
|
|
cconcat :: [[a]] -> [a]
|
|
cconcat [] = []
|
|
cconcat (x:xs) = x ++ (cconcat xs)
|
|
|
|
rreplicate :: Int -> a -> [a]
|
|
rreplicate 1 t = [t]
|
|
rreplicate n t = [t] ++ (rreplicate (n-1) t)
|
|
|
|
(!!!) :: [a] -> Int -> a
|
|
(!!!) (x:_) 0 = x
|
|
(!!!) (x:xs) n = xs !!! (n-1)
|
|
|
|
isElem :: Eq a => a -> [a] -> Bool
|
|
isElem y [x] = x == y
|
|
isElem y (x:xs) = x == y || (isElem y xs)
|
|
|
|
merge :: Ord a => [a] -> [a] -> [a]
|
|
merge [a] [b] | a < b = [a, b]
|
|
| otherwise = [b, a]
|
|
merge [a] (b:bs) | a < b = [a] ++ ([b] ++ bs)
|
|
| otherwise = [b] ++ (merge [a] bs)
|
|
merge (a:as) [b] | a < b = [a] ++ (merge as [b])
|
|
| otherwise = [b] ++ ([a] ++ as)
|
|
merge (a:as) (b:bs) | a < b = [a] ++ (merge as ([b] ++ bs))
|
|
| otherwise = [b] ++ (merge ([a] ++ as) bs)
|
|
|
|
isPythTriple :: (Int, Int, Int) -> Bool
|
|
isPythTriple (x, y, z) = x^2 + y^2 == z^2
|
|
|
|
pyths :: Int -> [(Int, Int, Int)]
|
|
pyths n = [(x, y, z) | x <- [1..n], y <- [1..n], z <- [1..n], isPythTriple (x, y, z)]
|
|
|
|
factors :: Int -> [Int]
|
|
factors n = [x | x <- [1..n], n `mod` x == 0]
|
|
|
|
perfects :: Int -> [Int]
|
|
perfects n = [x | x <- [1..n], (sum (tail (reverse (factors x)))) == x]
|
|
|
|
scalarProduct :: [Int] -> [Int] -> Int -> Int
|
|
scalarProduct a b n = sum ([(a!!i)*(b!!i) | i <- [0..n-1]]) |