module Exercise01 where import Test.QuickCheck {-H1.1a)-} myPair :: Integer -> Integer -> Integer myPair x y = 2^y*(2*x+1)-1 {-H1.1b)-} mySnd :: Integer -> Integer mySnd n | mod n 2 == 0 = 0 | otherwise = mySnd (div n 2) + 1 {-H1.1c)-} myFst :: Integer -> Integer myFst n | mod n 2 == 0 = div n 2 | otherwise = myFst (div n 2) {-H1.1d)-} prop_myPair :: Integer -> Integer -> Integer -> Property prop_myPair p x y = p >= 0 && x >= 0 && y >= 0 ==> myPair x y == p --prop_myF :: Integer -> Integer -> Property --prop_myF x y = x >= 0 && y >= 0 ==> myFst (myPair x y) == x -- --prop_myS :: Integer -> Integer -> Property --prop_myS x y = x >= 0 && y >= 0 ==> mySnd (myPair x y) == y {-H2-} digitToEo :: Integer -> String digitToEo 0 = "nul" digitToEo 1 = "unu" digitToEo 2 = "du" digitToEo 3 = "tri" digitToEo 4 = "kvar" digitToEo 5 = "kvin" digitToEo 6 = "ses" digitToEo 7 = "sep" digitToEo 8 = "ok" digitToEo 9 = "nau" {-WETT-} pwToEo :: Integer -> String pwToEo n | n == 0 = "" | n == 1 = "dek" | n == 2 = "cent" | n == 3 = "mil" | n == 6 = "miliono" | n == 9 = "miliardo" | mod n 6 == 0 = x ++ "iliono" | otherwise = x ++ "iliardo" where x = numberToEo (div n 6) helper1 :: Integer -> Integer -> String -> String helper1 a s c | c == "" = "" | s == 0 = c | a < 2 && s < 6 = "" | otherwise = c ++ " " helper2 :: Integer -> Integer -> String helper2 a s | (s == 0 && a > 0) || (a > 1) = digitToEo a | otherwise = "" numberToEoB :: Integer -> Integer -> Integer -> Integer -> String numberToEoB n s mm dd | n == 0 = "" | a == 0 = x | x == "" = b | otherwise = x ++ " " ++ b where x = numberToEoB (div n mm) (s+dd) mm dd a = mod n mm c = numberToEoB a 0 10 1 addJ | a > 1 && s > 3 && dd > 1 = "j" | otherwise = "" d | dd == 3 = helper1 a s c | otherwise = helper2 a s b = d ++ pwToEo s ++ addJ numberToEo :: Integer -> String numberToEo n | n < 10 = digitToEo n | otherwise = numberToEoB n 0 1000 3 {-TTEW-}