Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

laba4

.hs
Скачиваний:
21
Добавлен:
31.03.2021
Размер:
2 Кб
Скачать
-- Вариант 5
import Data.Char
import Data.List
import Debug.Trace

-- 1
-- Число торта
tort :: [Integer]
tort = [(n^3 + 5*n + 6) `div` 6 | n<-[0..]]

-- количество чисел кратных 6, меньших 500 среди чисел торта
tortVal :: Int
tortVal =  length [x | x <- take 1000 tort, x < 500, x `mod` 6 == 0]

-- 2
-- Написать функцию, которая читает входной текстовой файл 
-- и выводит в выходной файл указанную информацию

-- Слова исходного файла, не начинающиеся с заглавной буквы 
-- и не повторяющиеся
task2 :: FilePath -> IO ()
task2 fileName = do
    text <- readFile fileName
    putStrLn (unwords (getMyWords text))
    writeFile "out.txt" (unwords (getMyWords text))
    where
        getMyWords text = nub (filter isLowerFirst (words text))
        isLowerFirst s = isLower (head s)

-- 3
-- Сумма цифр факториала 100
task3 :: Int
task3 = 
    sum (map digitToInt (strFac 100))
    where
        strFac n = show (fac n)
        fac 1 = 1
        fac n = n * fac (n-1)

-- 4
-- Для натуральных n
-- f(n) - наименьшее кратное n, которое записано цифрами <=2
task4 :: Integer -> Integer
task4 n = 
    foldl1 (\acc x -> f x `div` x + acc) [1..n]
    where
        f :: Integer -> Integer
        f n = 
            head [intTo3 a | a<-[1..], intTo3 a `mod` n == 0]
            -- генерируем из 10 чисел троичные и используем как 10
        intTo3 n = to3system n 0
        to3system 0 _ = 0
        to3system n deep =
            to3system (n `div` 3) (deep + 1) + (n `mod` 3) * (10^deep)  
        
Соседние файлы в предмете Функциональное и логическое программирование