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

laba4

.hs
Скачиваний:
15
Добавлен:
31.03.2021
Размер:
1.88 Кб
Скачать
-- Вариант 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)

Соседние файлы в предмете Функциональное и логическое программирование