{-# LANGUAGE ScopedTypeVariables,GeneralizedNewtypeDeriving #-} module Main (main) where{ ; main :: IO(()); main = (getContents >>= (putStrLn . bubble_babble)); one_index :: [](a) -> Int -> a; one_index l i = ((!!) l (pred i)); checksum_series :: [](Int) -> [](Int); checksum_series d = (let { c :: [](Int); c = ((:) 1 (map f (enumFrom 2))); f :: Int -> Int; f n = (mod_flip 36 (sum [((*) 5 (one_index c (pred n))), ((*) 7 (one_index d ((-) ((*) 2 n) 3))), (one_index d ((-) ((*) 2 n) 2))])) } in c); mod_flip :: (Int -> Int -> Int); mod_flip = (flip mod); shr_flip :: Int -> Int -> Int; shr_flip x y = (div y ((^) 2 x)); fa :: Int -> Int -> Int; fa d c = ((mod_flip 6)(((+) c)((mod_flip 8)((shr_flip 6)(d))))); fb :: Int -> Int -> Int; fb d c = ((mod_flip 16)((shr_flip 2)(d))); fc :: Int -> Int -> Int; fc d c = ((mod_flip 6)(((+) (div c 6))((mod_flip 4)(d)))); full_tuple :: Int -> Int -> Int -> [](Int); full_tuple d3 d2 c = [(fa d3 c), (fb d3 c), (fc d3 c), ((mod_flip 16)((shr_flip 4)(d2))), ((mod_flip 16)(d2))]; even_partial_tuple :: Int -> [](Int); even_partial_tuple c = [(fa 0 c), 16, (fc 0 c)]; odd_partial_tuple :: Int -> Int -> [](Int); odd_partial_tuple d c = [(fa d c), (fb d c), (fc d c)]; vowel :: String; vowel = "aeiouy"; conso :: String; conso = "bcdfghklmnprstvzx"; encode_tuple :: [](Int) -> String; encode_tuple t = (case t of { [(a ), (b ), (c ), (d ), (e )]-> [((!!) vowel a), ((!!) conso b), ((!!) vowel c), ((!!) conso d), (head "-"), ((!!) conso e)]; [(a ), (b ), (c )]-> [((!!) vowel a), ((!!) conso b), ((!!) vowel c)] }); make_t :: [](Int) -> []([](Int)); make_t d = (let { k :: Int; k = (length d); c :: [](Int); c = (checksum_series d); partial_tuple :: [](Int); partial_tuple = (let { lastc :: Int; lastc = (one_index c ((+) 1 (div k 2))) } in (case (mod k 2) of { 0-> (even_partial_tuple lastc); 1-> (odd_partial_tuple (last d) lastc) })); t :: Int -> [](Int); t i_half = (let { i2 :: Int; i2 = ((*) 2 i_half) } in (full_tuple (one_index d ((-) i2 1)) (one_index d ((-) i2 0)) (one_index c i_half))) } in ((++) (map t (enumFromTo 1 (div k 2))) [partial_tuple])); bubble_babble :: String -> String; bubble_babble d = ("x" ++ (concat((map encode_tuple)(make_t((map fromEnum)(d))))) ++ "x") }