qweasd

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- Функция декодирования двоичной записи числа
-- (аналогично декодированию азбуки Морзе, но
-- учтите бесконечность дерева -- нужна ленивость)
decodeBinary :: String -> Int
decodeBinary str = decode' 0 str
where decode' num ('1':xs) = decode' (num * 2 + 1) xs
decode' num ('0':xs) = decode' (num * 2) xs
decode' num [] = num
-- Функция декодирования записи числа в системе
-- Фибоначчи: разряды -- числа Фибоначчи, нет
-- двух единиц подряд:
-- 0f = 0
-- 1f = 1
-- 10f = 2
-- 100f = 3
-- 101f = 4
-- 1000f = 5
-- 1001f = 6
-- 1010f = 7
-- .....
-- (аналогично декодированию азбуки Морзе, но
-- учтите бесконечность дерева -- нужна ленивость)
decodeFibo :: String -> Int
decodeFibo str = decode' 0 1 (reverse str)
where decode' prev curr ('1':xs) = prev + curr + decode' curr (prev + curr) xs
decode' prev curr ('0':xs) = decode' curr (prev + curr) xs
decode' _ _ [] = 0