module Exercise01 where import Test.QuickCheck {-H1.1a)-} myPair :: Integer -> Integer -> Integer myPair x y | x >= 0 && y >= 0 = (2 ^ y) * (2 * x + 1) - 1 {-H1.1b)-} whichPowOf2 :: Integer -> Integer whichPowOf2 1 = 0 whichPowOf2 2 = 1 whichPowOf2 n = 1 + whichPowOf2 (div n 2) mySnd :: Integer -> Integer mySnd p | p >= 0 = whichPowOf2 (div (p + 1) (2 * myFst p + 1)) {-H1.1c)-} myFst :: Integer -> Integer myFst p | p >= 0 = if r == 0 then x else myFst x where x = div p 2 r = rem p 2 prop_myPair2 x y = x >= 0 && y >= 0 ==> myFst p == x && mySnd p == y where p = myPair x y {-H1.1d)-} prop_myPair :: Integer -> Integer -> Integer -> Property prop_myPair p x y = p >= 0 && x >= 0 && y >= 0 ==> myFst p == x && mySnd p == 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-} str = "nul unu du tri kvar kvin ses sep ok nau dek dek_unu dek_du dek_tri dek_kvar dek_kvin dek_ses dek_sep dek_ok dek_nau dudek dudek_unu dudek_du dudek_tri dudek_kvar dudek_kvin dudek_ses dudek_sep dudek_ok dudek_nau tridek tridek_unu tridek_du tridek_tri tridek_kvar tridek_kvin tridek_ses tridek_sep tridek_ok tridek_nau kvardek kvardek_unu kvardek_du kvardek_tri kvardek_kvar kvardek_kvin kvardek_ses kvardek_sep kvardek_ok kvardek_nau kvindek kvindek_unu kvindek_du kvindek_tri kvindek_kvar kvindek_kvin kvindek_ses kvindek_sep kvindek_ok kvindek_nau sesdek sesdek_unu sesdek_du sesdek_tri sesdek_kvar sesdek_kvin sesdek_ses sesdek_sep sesdek_ok sesdek_nau sepdek sepdek_unu sepdek_du sepdek_tri sepdek_kvar sepdek_kvin sepdek_ses sepdek_sep sepdek_ok sepdek_nau okdek okdek_unu okdek_du okdek_tri okdek_kvar okdek_kvin okdek_ses okdek_sep okdek_ok okdek_nau naudek naudek_unu naudek_du naudek_tri naudek_kvar naudek_kvin naudek_ses naudek_sep naudek_ok naudek_nau cent cent_unu cent_du cent_tri cent_kvar cent_kvin cent_ses cent_sep cent_ok cent_nau cent_dek cent_dek_unu cent_dek_du cent_dek_tri cent_dek_kvar cent_dek_kvin cent_dek_ses cent_dek_sep cent_dek_ok cent_dek_nau cent_dudek cent_dudek_unu cent_dudek_du cent_dudek_tri cent_dudek_kvar cent_dudek_kvin cent_dudek_ses cent_dudek_sep cent_dudek_ok cent_dudek_nau cent_tridek cent_tridek_unu cent_tridek_du cent_tridek_tri cent_tridek_kvar cent_tridek_kvin cent_tridek_ses cent_tridek_sep cent_tridek_ok cent_tridek_nau cent_kvardek cent_kvardek_unu cent_kvardek_du cent_kvardek_tri cent_kvardek_kvar cent_kvardek_kvin cent_kvardek_ses cent_kvardek_sep cent_kvardek_ok cent_kvardek_nau cent_kvindek cent_kvindek_unu cent_kvindek_du cent_kvindek_tri cent_kvindek_kvar cent_kvindek_kvin cent_kvindek_ses cent_kvindek_sep cent_kvindek_ok cent_kvindek_nau cent_sesdek cent_sesdek_unu cent_sesdek_du cent_sesdek_tri cent_sesdek_kvar cent_sesdek_kvin cent_sesdek_ses cent_sesdek_sep cent_sesdek_ok cent_sesdek_nau cent_sepdek cent_sepdek_unu cent_sepdek_du cent_sepdek_tri cent_sepdek_kvar cent_sepdek_kvin cent_sepdek_ses cent_sepdek_sep cent_sepdek_ok cent_sepdek_nau cent_okdek cent_okdek_unu cent_okdek_du cent_okdek_tri cent_okdek_kvar cent_okdek_kvin cent_okdek_ses cent_okdek_sep cent_okdek_ok cent_okdek_nau cent_naudek cent_naudek_unu cent_naudek_du cent_naudek_tri cent_naudek_kvar cent_naudek_kvin cent_naudek_ses cent_naudek_sep cent_naudek_ok cent_naudek_nau ducent ducent_unu ducent_du ducent_tri ducent_kvar ducent_kvin ducent_ses ducent_sep ducent_ok ducent_nau ducent_dek ducent_dek_unu ducent_dek_du ducent_dek_tri ducent_dek_kvar ducent_dek_kvin ducent_dek_ses ducent_dek_sep ducent_dek_ok ducent_dek_nau ducent_dudek ducent_dudek_unu ducent_dudek_du ducent_dudek_tri ducent_dudek_kvar ducent_dudek_kvin ducent_dudek_ses ducent_dudek_sep ducent_dudek_ok ducent_dudek_nau ducent_tridek ducent_tridek_unu ducent_tridek_du ducent_tridek_tri ducent_tridek_kvar ducent_tridek_kvin ducent_tridek_ses ducent_tridek_sep ducent_tridek_ok ducent_tridek_nau ducent_kvardek ducent_kvardek_unu ducent_kvardek_du ducent_kvardek_tri ducent_kvardek_kvar ducent_kvardek_kvin ducent_kvardek_ses ducent_kvardek_sep ducent_kvardek_ok ducent_kvardek_nau ducent_kvindek ducent_kvindek_unu ducent_kvindek_du ducent_kvindek_tri ducent_kvindek_kvar ducent_kvindek_kvin ducent_kvindek_ses ducent_kvindek_sep ducent_kvindek_ok ducent_kvindek_nau ducent_sesdek ducent_sesdek_unu ducent_sesdek_du ducent_sesdek_tri ducent_sesdek_kvar ducent_sesdek_kvin ducent_sesdek_ses ducent_sesdek_sep ducent_sesdek_ok ducent_sesdek_nau ducent_sepdek ducent_sepdek_unu ducent_sepdek_du ducent_sepdek_tri ducent_sepdek_kvar ducent_sepdek_kvin ducent_sepdek_ses ducent_sepdek_sep ducent_sepdek_ok ducent_sepdek_nau ducent_okdek ducent_okdek_unu ducent_okdek_du ducent_okdek_tri ducent_okdek_kvar ducent_okdek_kvin ducent_okdek_ses ducent_okdek_sep ducent_okdek_ok ducent_okdek_nau ducent_naudek ducent_naudek_unu ducent_naudek_du ducent_naudek_tri ducent_naudek_kvar ducent_naudek_kvin ducent_naudek_ses ducent_naudek_sep ducent_naudek_ok ducent_naudek_nau tricent tricent_unu tricent_du tricent_tri tricent_kvar tricent_kvin tricent_ses tricent_sep tricent_ok tricent_nau tricent_dek tricent_dek_unu tricent_dek_du tricent_dek_tri tricent_dek_kvar tricent_dek_kvin tricent_dek_ses tricent_dek_sep tricent_dek_ok tricent_dek_nau tricent_dudek tricent_dudek_unu tricent_dudek_du tricent_dudek_tri tricent_dudek_kvar tricent_dudek_kvin tricent_dudek_ses tricent_dudek_sep tricent_dudek_ok tricent_dudek_nau tricent_tridek tricent_tridek_unu tricent_tridek_du tricent_tridek_tri tricent_tridek_kvar tricent_tridek_kvin tricent_tridek_ses tricent_tridek_sep tricent_tridek_ok tricent_tridek_nau tricent_kvardek tricent_kvardek_unu tricent_kvardek_du tricent_kvardek_tri tricent_kvardek_kvar tricent_kvardek_kvin tricent_kvardek_ses tricent_kvardek_sep tricent_kvardek_ok tricent_kvardek_nau tricent_kvindek tricent_kvindek_unu tricent_kvindek_du tricent_kvindek_tri tricent_kvindek_kvar tricent_kvindek_kvin tricent_kvindek_ses tricent_kvindek_sep tricent_kvindek_ok tricent_kvindek_nau tricent_sesdek tricent_sesdek_unu tricent_sesdek_du tricent_sesdek_tri tricent_sesdek_kvar tricent_sesdek_kvin tricent_sesdek_ses tricent_sesdek_sep tricent_sesdek_ok tricent_sesdek_nau tricent_sepdek tricent_sepdek_unu tricent_sepdek_du tricent_sepdek_tri tricent_sepdek_kvar tricent_sepdek_kvin tricent_sepdek_ses tricent_sepdek_sep tricent_sepdek_ok tricent_sepdek_nau tricent_okdek tricent_okdek_unu tricent_okdek_du tricent_okdek_tri tricent_okdek_kvar tricent_okdek_kvin tricent_okdek_ses tricent_okdek_sep tricent_okdek_ok tricent_okdek_nau tricent_naudek tricent_naudek_unu tricent_naudek_du tricent_naudek_tri tricent_naudek_kvar tricent_naudek_kvin tricent_naudek_ses tricent_naudek_sep tricent_naudek_ok tricent_naudek_nau kvarcent kvarcent_unu kvarcent_du kvarcent_tri kvarcent_kvar kvarcent_kvin kvarcent_ses kvarcent_sep kvarcent_ok kvarcent_nau kvarcent_dek kvarcent_dek_unu kvarcent_dek_du kvarcent_dek_tri kvarcent_dek_kvar kvarcent_dek_kvin kvarcent_dek_ses kvarcent_dek_sep kvarcent_dek_ok kvarcent_dek_nau kvarcent_dudek kvarcent_dudek_unu kvarcent_dudek_du kvarcent_dudek_tri kvarcent_dudek_kvar kvarcent_dudek_kvin kvarcent_dudek_ses kvarcent_dudek_sep kvarcent_dudek_ok kvarcent_dudek_nau kvarcent_tridek kvarcent_tridek_unu kvarcent_tridek_du kvarcent_tridek_tri kvarcent_tridek_kvar kvarcent_tridek_kvin kvarcent_tridek_ses kvarcent_tridek_sep kvarcent_tridek_ok kvarcent_tridek_nau kvarcent_kvardek kvarcent_kvardek_unu kvarcent_kvardek_du kvarcent_kvardek_tri kvarcent_kvardek_kvar kvarcent_kvardek_kvin kvarcent_kvardek_ses kvarcent_kvardek_sep kvarcent_kvardek_ok kvarcent_kvardek_nau kvarcent_kvindek kvarcent_kvindek_unu kvarcent_kvindek_du kvarcent_kvindek_tri kvarcent_kvindek_kvar kvarcent_kvindek_kvin kvarcent_kvindek_ses kvarcent_kvindek_sep kvarcent_kvindek_ok kvarcent_kvindek_nau kvarcent_sesdek kvarcent_sesdek_unu kvarcent_sesdek_du kvarcent_sesdek_tri kvarcent_sesdek_kvar kvarcent_sesdek_kvin kvarcent_sesdek_ses kvarcent_sesdek_sep kvarcent_sesdek_ok kvarcent_sesdek_nau kvarcent_sepdek kvarcent_sepdek_unu kvarcent_sepdek_du kvarcent_sepdek_tri kvarcent_sepdek_kvar kvarcent_sepdek_kvin kvarcent_sepdek_ses kvarcent_sepdek_sep kvarcent_sepdek_ok kvarcent_sepdek_nau kvarcent_okdek kvarcent_okdek_unu kvarcent_okdek_du kvarcent_okdek_tri kvarcent_okdek_kvar kvarcent_okdek_kvin kvarcent_okdek_ses kvarcent_okdek_sep kvarcent_okdek_ok kvarcent_okdek_nau kvarcent_naudek kvarcent_naudek_unu kvarcent_naudek_du kvarcent_naudek_tri kvarcent_naudek_kvar kvarcent_naudek_kvin kvarcent_naudek_ses kvarcent_naudek_sep kvarcent_naudek_ok kvarcent_naudek_nau kvincent kvincent_unu kvincent_du kvincent_tri kvincent_kvar kvincent_kvin kvincent_ses kvincent_sep kvincent_ok kvincent_nau kvincent_dek kvincent_dek_unu kvincent_dek_du kvincent_dek_tri kvincent_dek_kvar kvincent_dek_kvin kvincent_dek_ses kvincent_dek_sep kvincent_dek_ok kvincent_dek_nau kvincent_dudek kvincent_dudek_unu kvincent_dudek_du kvincent_dudek_tri kvincent_dudek_kvar kvincent_dudek_kvin kvincent_dudek_ses kvincent_dudek_sep kvincent_dudek_ok kvincent_dudek_nau kvincent_tridek kvincent_tridek_unu kvincent_tridek_du kvincent_tridek_tri kvincent_tridek_kvar kvincent_tridek_kvin kvincent_tridek_ses kvincent_tridek_sep kvincent_tridek_ok kvincent_tridek_nau kvincent_kvardek kvincent_kvardek_unu kvincent_kvardek_du kvincent_kvardek_tri kvincent_kvardek_kvar kvincent_kvardek_kvin kvincent_kvardek_ses kvincent_kvardek_sep kvincent_kvardek_ok kvincent_kvardek_nau kvincent_kvindek kvincent_kvindek_unu kvincent_kvindek_du kvincent_kvindek_tri kvincent_kvindek_kvar kvincent_kvindek_kvin kvincent_kvindek_ses kvincent_kvindek_sep kvincent_kvindek_ok kvincent_kvindek_nau kvincent_sesdek kvincent_sesdek_unu kvincent_sesdek_du kvincent_sesdek_tri kvincent_sesdek_kvar kvincent_sesdek_kvin kvincent_sesdek_ses kvincent_sesdek_sep kvincent_sesdek_ok kvincent_sesdek_nau kvincent_sepdek kvincent_sepdek_unu kvincent_sepdek_du kvincent_sepdek_tri kvincent_sepdek_kvar kvincent_sepdek_kvin kvincent_sepdek_ses kvincent_sepdek_sep kvincent_sepdek_ok kvincent_sepdek_nau kvincent_okdek kvincent_okdek_unu kvincent_okdek_du kvincent_okdek_tri kvincent_okdek_kvar kvincent_okdek_kvin kvincent_okdek_ses kvincent_okdek_sep kvincent_okdek_ok kvincent_okdek_nau kvincent_naudek kvincent_naudek_unu kvincent_naudek_du kvincent_naudek_tri kvincent_naudek_kvar kvincent_naudek_kvin kvincent_naudek_ses kvincent_naudek_sep kvincent_naudek_ok kvincent_naudek_nau sescent sescent_unu sescent_du sescent_tri sescent_kvar sescent_kvin sescent_ses sescent_sep sescent_ok sescent_nau sescent_dek sescent_dek_unu sescent_dek_du sescent_dek_tri sescent_dek_kvar sescent_dek_kvin sescent_dek_ses sescent_dek_sep sescent_dek_ok sescent_dek_nau sescent_dudek sescent_dudek_unu sescent_dudek_du sescent_dudek_tri sescent_dudek_kvar sescent_dudek_kvin sescent_dudek_ses sescent_dudek_sep sescent_dudek_ok sescent_dudek_nau sescent_tridek sescent_tridek_unu sescent_tridek_du sescent_tridek_tri sescent_tridek_kvar sescent_tridek_kvin sescent_tridek_ses sescent_tridek_sep sescent_tridek_ok sescent_tridek_nau sescent_kvardek sescent_kvardek_unu sescent_kvardek_du sescent_kvardek_tri sescent_kvardek_kvar sescent_kvardek_kvin sescent_kvardek_ses sescent_kvardek_sep sescent_kvardek_ok sescent_kvardek_nau sescent_kvindek sescent_kvindek_unu sescent_kvindek_du sescent_kvindek_tri sescent_kvindek_kvar sescent_kvindek_kvin sescent_kvindek_ses sescent_kvindek_sep sescent_kvindek_ok sescent_kvindek_nau sescent_sesdek sescent_sesdek_unu sescent_sesdek_du sescent_sesdek_tri sescent_sesdek_kvar sescent_sesdek_kvin sescent_sesdek_ses sescent_sesdek_sep sescent_sesdek_ok sescent_sesdek_nau sescent_sepdek sescent_sepdek_unu sescent_sepdek_du sescent_sepdek_tri sescent_sepdek_kvar sescent_sepdek_kvin sescent_sepdek_ses sescent_sepdek_sep sescent_sepdek_ok sescent_sepdek_nau sescent_okdek sescent_okdek_unu sescent_okdek_du sescent_okdek_tri sescent_okdek_kvar sescent_okdek_kvin sescent_okdek_ses sescent_okdek_sep sescent_okdek_ok sescent_okdek_nau sescent_naudek sescent_naudek_unu sescent_naudek_du sescent_naudek_tri sescent_naudek_kvar sescent_naudek_kvin sescent_naudek_ses sescent_naudek_sep sescent_naudek_ok sescent_naudek_nau sepcent sepcent_unu sepcent_du sepcent_tri sepcent_kvar sepcent_kvin sepcent_ses sepcent_sep sepcent_ok sepcent_nau sepcent_dek sepcent_dek_unu sepcent_dek_du sepcent_dek_tri sepcent_dek_kvar sepcent_dek_kvin sepcent_dek_ses sepcent_dek_sep sepcent_dek_ok sepcent_dek_nau sepcent_dudek sepcent_dudek_unu sepcent_dudek_du sepcent_dudek_tri sepcent_dudek_kvar sepcent_dudek_kvin sepcent_dudek_ses sepcent_dudek_sep sepcent_dudek_ok sepcent_dudek_nau sepcent_tridek sepcent_tridek_unu sepcent_tridek_du sepcent_tridek_tri sepcent_tridek_kvar sepcent_tridek_kvin sepcent_tridek_ses sepcent_tridek_sep sepcent_tridek_ok sepcent_tridek_nau sepcent_kvardek sepcent_kvardek_unu sepcent_kvardek_du sepcent_kvardek_tri sepcent_kvardek_kvar sepcent_kvardek_kvin sepcent_kvardek_ses sepcent_kvardek_sep sepcent_kvardek_ok sepcent_kvardek_nau sepcent_kvindek sepcent_kvindek_unu sepcent_kvindek_du sepcent_kvindek_tri sepcent_kvindek_kvar sepcent_kvindek_kvin sepcent_kvindek_ses sepcent_kvindek_sep sepcent_kvindek_ok sepcent_kvindek_nau sepcent_sesdek sepcent_sesdek_unu sepcent_sesdek_du sepcent_sesdek_tri sepcent_sesdek_kvar sepcent_sesdek_kvin sepcent_sesdek_ses sepcent_sesdek_sep sepcent_sesdek_ok sepcent_sesdek_nau sepcent_sepdek sepcent_sepdek_unu sepcent_sepdek_du sepcent_sepdek_tri sepcent_sepdek_kvar sepcent_sepdek_kvin sepcent_sepdek_ses sepcent_sepdek_sep sepcent_sepdek_ok sepcent_sepdek_nau sepcent_okdek sepcent_okdek_unu sepcent_okdek_du sepcent_okdek_tri sepcent_okdek_kvar sepcent_okdek_kvin sepcent_okdek_ses sepcent_okdek_sep sepcent_okdek_ok sepcent_okdek_nau sepcent_naudek sepcent_naudek_unu sepcent_naudek_du sepcent_naudek_tri sepcent_naudek_kvar sepcent_naudek_kvin sepcent_naudek_ses sepcent_naudek_sep sepcent_naudek_ok sepcent_naudek_nau okcent okcent_unu okcent_du okcent_tri okcent_kvar okcent_kvin okcent_ses okcent_sep okcent_ok okcent_nau okcent_dek okcent_dek_unu okcent_dek_du okcent_dek_tri okcent_dek_kvar okcent_dek_kvin okcent_dek_ses okcent_dek_sep okcent_dek_ok okcent_dek_nau okcent_dudek okcent_dudek_unu okcent_dudek_du okcent_dudek_tri okcent_dudek_kvar okcent_dudek_kvin okcent_dudek_ses okcent_dudek_sep okcent_dudek_ok okcent_dudek_nau okcent_tridek okcent_tridek_unu okcent_tridek_du okcent_tridek_tri okcent_tridek_kvar okcent_tridek_kvin okcent_tridek_ses okcent_tridek_sep okcent_tridek_ok okcent_tridek_nau okcent_kvardek okcent_kvardek_unu okcent_kvardek_du okcent_kvardek_tri okcent_kvardek_kvar okcent_kvardek_kvin okcent_kvardek_ses okcent_kvardek_sep okcent_kvardek_ok okcent_kvardek_nau okcent_kvindek okcent_kvindek_unu okcent_kvindek_du okcent_kvindek_tri okcent_kvindek_kvar okcent_kvindek_kvin okcent_kvindek_ses okcent_kvindek_sep okcent_kvindek_ok okcent_kvindek_nau okcent_sesdek okcent_sesdek_unu okcent_sesdek_du okcent_sesdek_tri okcent_sesdek_kvar okcent_sesdek_kvin okcent_sesdek_ses okcent_sesdek_sep okcent_sesdek_ok okcent_sesdek_nau okcent_sepdek okcent_sepdek_unu okcent_sepdek_du okcent_sepdek_tri okcent_sepdek_kvar okcent_sepdek_kvin okcent_sepdek_ses okcent_sepdek_sep okcent_sepdek_ok okcent_sepdek_nau okcent_okdek okcent_okdek_unu okcent_okdek_du okcent_okdek_tri okcent_okdek_kvar okcent_okdek_kvin okcent_okdek_ses okcent_okdek_sep okcent_okdek_ok okcent_okdek_nau okcent_naudek okcent_naudek_unu okcent_naudek_du okcent_naudek_tri okcent_naudek_kvar okcent_naudek_kvin okcent_naudek_ses okcent_naudek_sep okcent_naudek_ok okcent_naudek_nau naucent naucent_unu naucent_du naucent_tri naucent_kvar naucent_kvin naucent_ses naucent_sep naucent_ok naucent_nau naucent_dek naucent_dek_unu naucent_dek_du naucent_dek_tri naucent_dek_kvar naucent_dek_kvin naucent_dek_ses naucent_dek_sep naucent_dek_ok naucent_dek_nau naucent_dudek naucent_dudek_unu naucent_dudek_du naucent_dudek_tri naucent_dudek_kvar naucent_dudek_kvin naucent_dudek_ses naucent_dudek_sep naucent_dudek_ok naucent_dudek_nau naucent_tridek naucent_tridek_unu naucent_tridek_du naucent_tridek_tri naucent_tridek_kvar naucent_tridek_kvin naucent_tridek_ses naucent_tridek_sep naucent_tridek_ok naucent_tridek_nau naucent_kvardek naucent_kvardek_unu naucent_kvardek_du naucent_kvardek_tri naucent_kvardek_kvar naucent_kvardek_kvin naucent_kvardek_ses naucent_kvardek_sep naucent_kvardek_ok naucent_kvardek_nau naucent_kvindek naucent_kvindek_unu naucent_kvindek_du naucent_kvindek_tri naucent_kvindek_kvar naucent_kvindek_kvin naucent_kvindek_ses naucent_kvindek_sep naucent_kvindek_ok naucent_kvindek_nau naucent_sesdek naucent_sesdek_unu naucent_sesdek_du naucent_sesdek_tri naucent_sesdek_kvar naucent_sesdek_kvin naucent_sesdek_ses naucent_sesdek_sep naucent_sesdek_ok naucent_sesdek_nau naucent_sepdek naucent_sepdek_unu naucent_sepdek_du naucent_sepdek_tri naucent_sepdek_kvar naucent_sepdek_kvin naucent_sepdek_ses naucent_sepdek_sep naucent_sepdek_ok naucent_sepdek_nau naucent_okdek naucent_okdek_unu naucent_okdek_du naucent_okdek_tri naucent_okdek_kvar naucent_okdek_kvin naucent_okdek_ses naucent_okdek_sep naucent_okdek_ok naucent_okdek_nau naucent_naudek naucent_naudek_unu naucent_naudek_du naucent_naudek_tri naucent_naudek_kvar naucent_naudek_kvin naucent_naudek_ses naucent_naudek_sep naucent_naudek_ok naucent_naudek_nau" pStrs = "mil mil miliono milionoj miliardo miliardoj duiliono duilionoj duiliardo duiliardoj triiliono triilionoj triiliardo triiliardoj kvariliono kvarilionoj kvariliardo kvariliardoj kviniliono kvinilionoj kviniliardo kviniliardoj sesiliono sesilionoj sesiliardo sesiliardoj sepiliono sepilionoj sepiliardo sepiliardoj okiliono okilionoj okiliardo okiliardoj nauiliono nauilionoj nauiliardo nauiliardoj dekiliono dekilionoj dekiliardo dekiliardoj" trip :: Integer -> Bool -> String trip n withOne | n == 0 || (n == 1 && not withOne) = "" | otherwise = map repl (words str !! fromInteger n) where repl '_' = ' ' repl x = x nPotStr :: Integer -> Integer -> String nPotStr x n | n * x == 0 = "" | otherwise = words pStrs !! fromInteger (n `div` 3 * 2 - 2 + min (x - 1) 1) ++ " " wOne :: Integer -> Bool wOne x = x /= 3 pot :: Integer -> Integer -> String pot n p | n < (10 ^ p) = "" | otherwise = pot n (p + 3) ++ trip x (wOne p) ++ take (fromInteger (if wOne p then x else x - 1)) " " ++ nPotStr x p where x = n `div` (10 ^ p) `mod` 1000 numberToEo :: Integer -> String numberToEo 0 = "nul" numberToEo n = init (pot n 0) {-TTEW-} -- HELPERS nToEo 0 = length (numberToEo 0) nToEo n = length (numberToEo n) + nToEo (n - 1) nStr 0 = numberToEo 0 nStr n = nStr (n - 1) ++ " " ++ map repl (numberToEo n) where repl ' ' = '_' repl x = x {- pStr 0 = potStr 1 0 ++ potStr 2 0 pStr n = pStr (n - 3) ++ potStr 1 n ++ potStr 2 n -} {- digitToEo 10 = "dek" digitToEo 100 = "cent" triple :: Integer -> Bool -> String triple n withOne | n == 0 || (n == 1 && not withOne) = "" | n < 10 = digitToEo n | otherwise = triple (n `div` p) False ++ s ++ triple (n `mod` p) True where p = if n >= 100 then 100 else 10 s = digitToEo p ++ " " -- if p == 100 then "cent " else "dek " -}