packages feed

ordinal 0.1.2.0 → 0.2.0.0

raw patch · 16 files changed

+1065/−30 lines, 16 filesdep +regexPVP ok

version bump matches the API change (PVP)

Dependencies added: regex

API changes (from Hackage documentation)

+ Text.Numerals.Algorithm: longScaleTitle :: Text -> Text -> FreeValueSplitter
+ Text.Numerals.Algorithm: shortScaleTitle :: Text -> FreeValueSplitter
+ Text.Numerals.Algorithm: valueSplit' :: (Text -> Text) -> HighNumberAlgorithm -> FreeValueSplitter
+ Text.Numerals.Languages: german :: NumeralsAlgorithm
+ Text.Numerals.Languages.German: german :: NumeralsAlgorithm
+ Text.Numerals.Languages.German: highWords' :: HighNumberAlgorithm
+ Text.Numerals.Languages.German: lowWords' :: Vector Text
+ Text.Numerals.Languages.German: merge' :: FreeMergerFunction
+ Text.Numerals.Languages.German: midWords' :: [(Integer, Text)]
+ Text.Numerals.Languages.German: negativeWord' :: Text
+ Text.Numerals.Languages.German: oneWord' :: Text
+ Text.Numerals.Languages.German: ordinize' :: Text -> Text
+ Text.Numerals.Languages.German: zeroWord' :: Text
- Text.Numerals.Algorithm.Template: ordinizeFromDict :: String -> [(String, String)] -> Name -> Dec
+ Text.Numerals.Algorithm.Template: ordinizeFromDict :: String -> [(String, String)] -> Name -> [Dec]

Files

CHANGELOG.md view
@@ -2,6 +2,10 @@  For a full list of changes, see the history on [GitHub](https://github.com/hapytex/ordinal). +## Version 0.2.0.0++Added support for the *German* language.+ ## Version 0.1.0.0  The first version that is deployed on Hackage. This version contains
README.md view
@@ -13,8 +13,9 @@ The following languages are currently supported (in *alphabetical* order):   1. Dutch (nl);- 2. English (en); and- 3. French (fr)+ 2. English (en);+ 3. French (fr); and+ 4. German (de)  ## Usage @@ -59,6 +60,15 @@ The package uses the `Data.Vector` module which is not safe, and therefore `ordinal` is not safe either. +## Continuous Integration++The commits on GitHub are validated by [*Travis*](https://travis-ci.com/hapytex/ordinal).+The build will validate that the system is building, that the compiler does not+generate any *errors* or *warnings*. It will also run the test-suite and will+run `hlint` on the source code to check for improvements. Finally it will run+`grep` on the Haskell files in the `src/` directory to check for missing+elements (`???`) and `TODO`s.+ ## Contribute  You can contribute by making a pull request on the [*GitHub@@ -66,6 +76,41 @@  You can contact the package maintainer by sending a mail to [`hapytexeu+gh@gmail.com`](mailto:hapytexeu+gh@gmail.com).++### Adding a new language++There is a `src/Text/Numerals/Languages/Language.hs.template` template file to+include a new language. This includes a list of tasks to do in order to add the+language. The `test/` directory contains a `test/Text/Numerals/Languages/LanguageSpec.hs.template`+file to test the new language. In these templates, one needs to fill in the+`???` parts.++Normally the languages are tested for all numbers in the 0-200 range, and the+first hundred Fibonacci numbers greater than 200, so:+```+[+  233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393+ ,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352+ ,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733+ ,1134903170,1836311903,2971215073,4807526976,7778742049,12586269025,20365011074+ ,32951280099,53316291173,86267571272,139583862445,225851433717,365435296162+ ,591286729879,956722026041,1548008755920,2504730781961,4052739537881,6557470319842+ ,10610209857723,17167680177565,27777890035288,44945570212853,72723460248141+ ,117669030460994,190392490709135,308061521170129,498454011879264,806515533049393+ ,1304969544928657,2111485077978050,3416454622906707,5527939700884757,8944394323791464+ ,14472334024676221,23416728348467685,37889062373143906,61305790721611591,99194853094755497+ ,160500643816367088,259695496911122585,420196140727489673,679891637638612258+ ,1100087778366101931,1779979416004714189,2880067194370816120,4660046610375530309+ ,7540113804746346429,12200160415121876738,19740274219868223167,31940434634990099905+ ,51680708854858323072,83621143489848422977,135301852344706746049,218922995834555169026+ ,354224848179261915075,573147844013817084101,927372692193078999176,1500520536206896083277+ ,2427893228399975082453,3928413764606871165730,6356306993006846248183,10284720757613717413913+ ,16641027750620563662096,26925748508234281076009,43566776258854844738105+ ,70492524767089125814114,114059301025943970552219+]+```++and powers of ten until *10<sup>24</sup>*.  --- 
ordinal.cabal view
@@ -1,5 +1,5 @@ name:                ordinal-version:             0.1.2.0+version:             0.2.0.0 synopsis:            Convert numbers to words in different languages. description:     A package based on Python's num2words package that converts numbers@@ -32,14 +32,16 @@     , Text.Numerals.Languages.Dutch     , Text.Numerals.Languages.English     , Text.Numerals.Languages.French+    , Text.Numerals.Languages.German     , Text.Numerals.Prefix   other-modules:       Text.Numerals.Internal   build-depends:       base >= 4.7 && < 5+    , containers >=0.5+    , regex >=1.0     , text >= 0.1     , template-haskell >=2.2.0.0-    , containers >=0.5     , vector >= 0.7   default-language:    Haskell2010 @@ -52,6 +54,7 @@       Text.Numerals.Languages.DutchSpec       Text.Numerals.Languages.EnglishSpec       Text.Numerals.Languages.FrenchSpec+      Text.Numerals.Languages.GermanSpec   build-depends:       base     , ordinal
src/Text/Numerals/Algorithm.hs view
@@ -18,6 +18,8 @@     -- * Large number algorithms   , HighNumberAlgorithm(ShortScale, LongScale)   , shortScale, longScale+  , shortScaleTitle, longScaleTitle+  , valueSplit'     -- * Conversion to a 'NumberSegment'   , toSegments   , toSegmentLow, toSegmentMid, toSegmentHigh@@ -27,8 +29,7 @@  import Data.Foldable(toList) import Data.List(sortOn)-import Data.Maybe(maybe)-import Data.Text(Text, cons)+import Data.Text(Text, cons, toTitle) import Data.Vector(Vector, (!), (!?), fromList) import qualified Data.Vector as V @@ -50,14 +51,14 @@   instance NumToWord NumeralsAlgorithm where-    toCardinal NumeralsAlgorithm { minusWord=minusWord, oneWord=oneWord, lowWords=lowWords, midWords=midWords, highWords=highWords, mergeFunction=mergeFunction } = cardinal+    toCardinal NumeralsAlgorithm { minusWord=_minusWord, oneWord=_oneWord, lowWords=_lowWords, midWords=_midWords, highWords=_highWords, mergeFunction=_mergeFunction } = cardinal        where cardinal i-                  | i < 0 = minusWord <> cons ' ' (go (-j))+                  | i < 0 = _minusWord <> cons ' ' (go (-j))                   | otherwise = go j-                  where go = compressSegments oneWord mergeFunction . toSegments lowWords midWords highWords+                  where go = compressSegments _oneWord _mergeFunction . toSegments _lowWords _midWords _highWords                         j = fromIntegral i :: Integer -    toOrdinal na@NumeralsAlgorithm { ordinize=ordinize } = ordinize . toCardinal na+    toOrdinal na@NumeralsAlgorithm { ordinize=_ordinize } = _ordinize . toCardinal na   _toNumberScale :: (Integral i, Integral j) => i -> (j, i)@@ -80,6 +81,15 @@ longScale :: Text -> Text -> FreeValueSplitter longScale suf1 = valueSplit . LongScale suf1 +-- | Construct a 'FreeValueSplitter' function for the given suffix for a /short scale/, the names are written in /title case/.+shortScaleTitle :: Text -> FreeValueSplitter+shortScaleTitle = valueSplit' toTitle . ShortScale++-- | Construct a 'FreeValueSplitter' function for the given suffixes for a /long scale/, the names are written in /title case/.+longScaleTitle :: Text -> Text -> FreeValueSplitter+longScaleTitle suf1 = valueSplit' toTitle . LongScale suf1++ _highWithSuffix :: Text -> Int -> Maybe Text _highWithSuffix suf = fmap (<> suf) . (latinPrefixes !?) @@ -90,15 +100,23 @@     | otherwise = _highWithSuffix suf2 k     where k = div j 2 +-- Generate a /value splitter/ for a 'HighNumberAlgorithm' but where the result+-- is post-processed by a function.+valueSplit'+  :: (Text -> Text)  -- ^ The post-processing function.+  -> HighNumberAlgorithm  -- ^ The 'HighNumberAlgorithm' that is used.+  -> FreeValueSplitter  -- ^ The 'FreeValueSplitter' result.+valueSplit' f vs i = (m,) . f <$> _highToText vs (j-2)+    where ~(j, m) = _toNumberScale i+ instance ValueSplit HighNumberAlgorithm where-    valueSplit vs i = (m,) <$> _highToText vs (j-2)-        where ~(j, m) = _toNumberScale i+    valueSplit = valueSplit' id  -- | A /smart constructor/ for the 'NumeralsAlgorithm' type. This constructor -- allows one to use an arbitrary 'Foldable' type for the low words and mid -- words. It will also order the midwords accordingly. numeralsAlgorithm :: (Foldable f, Foldable g) => Text -> Text -> Text -> f Text -> g (Integer, Text) -> FreeValueSplitter -> FreeMergerFunction -> (Text -> Text) -> NumeralsAlgorithm-numeralsAlgorithm minus zero one lowWords midWords = NumeralsAlgorithm minus one (fromList (zero : one : toList lowWords)) (sortOn (negate . fst) (toList midWords))+numeralsAlgorithm minus zero one _lowWords _midWords = NumeralsAlgorithm minus one (fromList (zero : one : toList _lowWords)) (sortOn (negate . fst) (toList _midWords))  _maybeSegment :: Integral i => (i -> NumberSegment i) -> i -> MNumberSegment i _maybeSegment f = go
src/Text/Numerals/Algorithm/Template.hs view
@@ -16,14 +16,15 @@   ) where  import Data.Map.Strict(Map, elems, fromListWith)-import Data.Text(isSuffixOf, pack, snoc)+import Data.Text(Text, isSuffixOf, pack, snoc)  import Text.Numerals.Internal(_replaceSuffix) -import Language.Haskell.TH(Body(GuardedB), Clause(Clause), Dec(FunD), Exp(AppE, ConE, LitE, VarE), Guard(NormalG), Lit(CharL, IntegerL, StringL), Name, Pat(VarP), mkName)+import Language.Haskell.TH(Body(GuardedB), Clause(Clause), Dec(FunD, SigD), Exp(AppE, ConE, LitE, VarE), Guard(NormalG), Lit(CharL, IntegerL, StringL), Name, Pat(VarP), Type(ConT, AppT, ArrowT), mkName)  _getPrefix :: [Char] -> [Char] -> (Int, [Char]) _getPrefix [] bs = (0, bs)+_getPrefix as [] = (length as, []) _getPrefix aa@(a:as) ba@(b:bs)      | a == b = _getPrefix as bs      | otherwise = (length aa, ba)@@ -59,7 +60,9 @@   :: String  -- ^ The name of the function, often this is just @ordinize'@   -> [(String, String)]  -- ^ The list of suffixes and their corresponding mapping, the suffixes should be non-overlapping.   -> Name  -- ^ The name of the post-processing function in case there was no match, one can for example use 'id'.-  -> Dec  -- ^ The corresponding declaration.-ordinizeFromDict nm ts pp = FunD (mkName nm) [Clause [VarP t] (GuardedB (map _toGuard (elems (_ordinizeMap t' ts)) ++ [(NormalG (ConE 'True), AppE (VarE pp) t')])) []]+  -> [Dec]  -- ^ The corresponding declaration.+ordinizeFromDict nm ts pp = [SigD nnm (tText (tText ArrowT)), FunD nnm [Clause [VarP t] (GuardedB (map _toGuard (elems (_ordinizeMap t' ts)) ++ [(NormalG (ConE 'True), AppE (VarE pp) t')])) []]]     where t = mkName "t"           t' = VarE t+          nnm = mkName nm+          tText = (`AppT` ConT ''Text)
src/Text/Numerals/Internal.hs view
@@ -75,9 +75,9 @@              | Just (q, e) <- go (i*i) = go' i q e              | otherwise = Nothing         go' i q e | q < i = Just (q, 2 * e)-                  | m == 0 = Just (d, 2 * e + 1)+                  | md == 0 = Just (d, 2 * e + 1)                   | otherwise = Nothing-            where (d, m) = divMod q i+            where (d, md) = divMod q i  _replaceSuffix :: Int -> Text -> Text -> Text _replaceSuffix n s = (<> s) . dropEnd n
src/Text/Numerals/Languages.hs view
@@ -9,9 +9,10 @@ -}  module Text.Numerals.Languages (-    dutch, english, french+    dutch, english, french, german   ) where  import Text.Numerals.Languages.Dutch(dutch) import Text.Numerals.Languages.English(english) import Text.Numerals.Languages.French(french)+import Text.Numerals.Languages.German(german)
src/Text/Numerals/Languages/Dutch.hs view
@@ -31,7 +31,7 @@ import Text.Numerals.Class(valueSplit) import Text.Numerals.Internal(_million, _mergeWithSpace) -$(pure [ordinizeFromDict "_ordinize'" [+$(pure (ordinizeFromDict "_ordinize'" [     ("nul", "nuld")   , ("één", "eerst")   , ("twee", "tweed")@@ -50,7 +50,7 @@   , ("end", "endst")   , ("joen", "joenst")   , ("rd", "rdst")-  ] 'id])+  ] 'id))  -- | A function that converts a number in words in /cardinal/ form to /ordinal/ -- form according to the /Dutch/ language rules.
src/Text/Numerals/Languages/English.hs view
@@ -39,7 +39,7 @@  -- | A function that converts a number in words in /cardinal/ form to /ordinal/ -- form according to the /English/ language rules.-$(pure [ordinizeFromDict "ordinize'" [+$(pure (ordinizeFromDict "ordinize'" [     ("one", "first")   , ("two", "second")   , ("three", "third")@@ -52,7 +52,7 @@   , ("ten", "tenth")   , ("eleven", "eleventh")   , ("twelve", "twelfth")-  ] '_ordinizepp])+  ] '_ordinizepp))  -- | A 'NumeralsAlgorithm' to convert numbers to words in the /English/ language. english :: NumeralsAlgorithm  -- ^ A 'NumeralsAlgorithm' that can be used to convert numbers to different formats.
src/Text/Numerals/Languages/French.hs view
@@ -24,7 +24,6 @@   ) where  import Data.Text(Text, isSuffixOf, snoc)-import qualified Data.Text as T import Data.Vector(Vector)  import Text.Numerals.Algorithm(HighNumberAlgorithm(LongScale), NumeralsAlgorithm, numeralsAlgorithm)@@ -32,10 +31,10 @@ import Text.Numerals.Class(FreeMergerFunction, valueSplit) import Text.Numerals.Internal(_divisable100, _mergeWith, _mergeWithSpace, _mergeWithHyphen, _million, _stripLastIf, _thousand) -$(pure [ordinizeFromDict "_ordinize'" [+$(pure (ordinizeFromDict "_ordinize'" [     ("cinq", "cinqu")   , ("neuf", "neuv")-  ] 'id])+  ] 'id))  -- | A 'NumeralsAlgorithm' to convert numbers to words in the /French/ language. french :: NumeralsAlgorithm  -- ^ A 'NumeralsAlgorithm' that can be used to convert numbers to different formats.
+ src/Text/Numerals/Languages/German.hs view
@@ -0,0 +1,144 @@+{-# LANGUAGE OverloadedLists, OverloadedStrings, QuasiQuotes, TemplateHaskell #-}++{-|+Module      : Text.Numerals.Languages.German+Description : A module to convert numbers to words in the /German/ language.+Maintainer  : hapytexeu+gh@gmail.com+Stability   : experimental+Portability : POSIX++This module contains logic to convert numbers to words in the /German/ language.+-}++module Text.Numerals.Languages.German (+    -- * Num to word algorithm+    german+    -- * Convert to ordinal+  , ordinize'+    -- * Constant words+  , negativeWord', zeroWord', oneWord'+    -- * Names for numbers+  , lowWords', midWords', highWords'+    -- * Merge function+  , merge'+  ) where++import Data.Bool(bool)+import Data.Text(Text, isSuffixOf, toLower, toTitle)+import Data.Vector(Vector)++import Text.Numerals.Algorithm(HighNumberAlgorithm(LongScale), NumeralsAlgorithm, numeralsAlgorithm, valueSplit')+import Text.Numerals.Algorithm.Template(ordinizeFromDict)+import Text.Numerals.Class(FreeMergerFunction)+import Text.Numerals.Internal(_mergeWith, _mergeWithSpace, _million)+import Text.RE.TDFA.Text(RE, SearchReplace, (*=~/), ed)++$(pure (ordinizeFromDict "_ordinize'" [+    ("eins", "ers")+  , ("drei", "drit")+  , ("acht", "ach")+  , ("sieben", "sieb")+  , ("ig", "igs")+  , ("ert", "erts")+  , ("end", "ends")+  , ("ion", "ions")+  , ("nen", "ns")+  , ("rde", "rds")+  , ("rden", "rds")+  ] 'id))++-- | A 'NumeralsAlgorithm' to convert numbers to words in the /German/ language.+german :: NumeralsAlgorithm  -- ^ A 'NumeralsAlgorithm' that can be used to convert numbers to different formats.+german = numeralsAlgorithm negativeWord' zeroWord' oneWord' lowWords' midWords' (valueSplit' toTitle highWords') merge' ordinize'++-- | The words used to mark a negative number in the /German/ language.+negativeWord' :: Text+negativeWord' = "minus"++-- | The word used for the number /zero/ in the /German/ language.+zeroWord' :: Text+zeroWord' = "null"++-- | The word used for the number /one/ in the /German/ language.+oneWord' :: Text+oneWord' = "eins"++-- | A 'Vector' that contains the word used for the numbers /two/ to /twenty/ in the /German/ language.+lowWords' :: Vector Text+lowWords' = [+    "zwei"+  , "drei"+  , "vier"+  , "fünf"+  , "sechs"+  , "sieben"+  , "acht"+  , "neun"+  , "zehn"+  , "elf"+  , "zwölf"+  , "dreizehn"+  , "vierzehn"+  , "fünfzehn"+  , "sechzehn"+  , "siebzehn"+  , "achtzehn"+  , "neunzehn"+  , "zwanzig"+  ]++-- | A list of 2-tuples that contains the names of values between /thirty/ and+-- /thousand/ in the /German/ language.+midWords' :: [(Integer, Text)]+midWords' = [+    (1000, "tausend")+  , (100, "hundert")+  , (90, "neunzig")+  , (80, "achtzig")+  , (70, "siebzig")+  , (60, "sechzig")+  , (50, "fünfzig")+  , (40, "vierzig")+  , (30, "dreißig")+  ]++-- | A merge function that is used to combine the names of words together to+-- larger words, according to the /German/ grammar rules.+merge' :: FreeMergerFunction+merge' 1 100 = const ("ein" <>)+merge' 1 1000 = const ("ein" <>)+merge' 1 r | r < _million = const id+merge' 1 r = const (_merge' 1 r "eine")+merge' l r = _merge' l r++_pluralize :: Text -> Text+_pluralize t+    | "e" `isSuffixOf` t = t <> "n"+    | otherwise = t <> "en"++_merge' :: FreeMergerFunction+_merge' l r+    | r > l && r >= _million = (. bool id _pluralize (l > 1)) . _mergeWithSpace+    | r > l = (<>)+_merge' l 1 | 10 < l && l < 100 = const . ("einund" <> )+_merge' l r+    | r < 10 && 10 < l && l < 100 = flip (_mergeWith "und")+    | l >= _million = _mergeWithSpace+    | otherwise = (<>)++_ordinalSuffixRe :: SearchReplace RE Text+_ordinalSuffixRe = [ed|(eine)? ([a-z]+(illion|illiard)ste)$///${2}|]++-- | A function that converts a number in words in /cardinal/ form to /ordinal/+-- form according to the /German/ language rules.+ordinize' :: Text -> Text+ordinize' = postprocess . (<> "te") . _ordinize' . toLower+    where postprocess "eintausendste" = "tausendste"+          postprocess "einhundertste" = "hundertste"+          postprocess t = t *=~/ _ordinalSuffixRe++-- | An algorithm to obtain the names of /large/ numbers (one million or larger)+-- in /German/. German uses a /long scale/ with the @illion@ and @illiard@+-- suffixes.+highWords' :: HighNumberAlgorithm+highWords' =  LongScale "illion" "illiard"
src/Text/Numerals/Prefix.hs view
@@ -37,11 +37,31 @@   , "tredec"   , "quattuordec"   , "quindec"-  , "sexdec"-  , "septended"+  , "sedec"+  , "septendec"   , "octodec"-  , "novemdec"+  , "novendec"   , "vigint"+  , "unvigint"+  , "duovigint"+  , "tresvigint"+  , "quattuorvigint"+  , "quinvigint"+  , "sesvigint"+  , "septemvigint"+  , "octovigint"+  , "novemvigint"+  , "trigint"+  , "untrigint"+  , "duotrigint"+  , "trestrigint"+  , "quattuortrigint"+  , "quintrigint"+  , "sestrigint"+  , "septentrigint"+  , "octotrigint"+  , "noventrigint"+  , "quadragint"   ]  -- | The /Latin/ prefixes in a 'Vector' for /O(1)/ lookup.
test/Text/Numerals/Languages/DutchSpec.hs view
@@ -314,6 +314,28 @@   , (43566776258854844738105, "drieënveertig triljard vijfhonderdzesenzestig triljoen zevenhonderdzesenzeventig biljard tweehonderdachtenvijftig biljoen achthonderdvierenvijftig miljard achthonderdvierenveertig miljoen zevenhonderdachtendertigduizendhonderdvijf")   , (70492524767089125814114, "zeventig triljard vierhonderdtweeënnegentig triljoen vijfhonderdvierentwintig biljard zevenhonderdzevenenzestig biljoen negenentachtig miljard honderdvijfentwintig miljoen achthonderdveertienduizendhonderdveertien")   , (114059301025943970552219, "honderdveertien triljard negenenvijftig triljoen driehonderdéén biljard vijfentwintig biljoen negenhonderddrieënveertig miljard negenhonderdzeventig miljoen vijfhonderdtweeënvijftigduizendtweehonderdnegentien")+  , (1000, "duizend")+  , (10000, "tienduizend")+  , (100000, "honderdduizend")+  , (1000000, "een miljoen")+  , (10000000, "tien miljoen")+  , (100000000, "honderd miljoen")+  , (1000000000, "een miljard")+  , (10000000000, "tien miljard")+  , (100000000000, "honderd miljard")+  , (1000000000000, "een biljoen")+  , (10000000000000, "tien biljoen")+  , (100000000000000, "honderd biljoen")+  , (1000000000000000, "een biljard")+  , (10000000000000000, "tien biljard")+  , (100000000000000000, "honderd biljard")+  , (1000000000000000000, "een triljoen")+  , (10000000000000000000, "tien triljoen")+  , (100000000000000000000, "honderd triljoen")+  , (1000000000000000000000, "een triljard")+  , (10000000000000000000000, "tien triljard")+  , (100000000000000000000000, "honderd triljard")+  , (1000000000000000000000000, "een quadriljoen")   ]  ordinals :: [(Integer, Text)]@@ -619,4 +641,26 @@   , (43566776258854844738105, "drieënveertig triljard vijfhonderdzesenzestig triljoen zevenhonderdzesenzeventig biljard tweehonderdachtenvijftig biljoen achthonderdvierenvijftig miljard achthonderdvierenveertig miljoen zevenhonderdachtendertigduizendhonderdvijfde")   , (70492524767089125814114, "zeventig triljard vierhonderdtweeënnegentig triljoen vijfhonderdvierentwintig biljard zevenhonderdzevenenzestig biljoen negenentachtig miljard honderdvijfentwintig miljoen achthonderdveertienduizendhonderdveertiende")   , (114059301025943970552219, "honderdveertien triljard negenenvijftig triljoen driehonderdéén biljard vijfentwintig biljoen negenhonderddrieënveertig miljard negenhonderdzeventig miljoen vijfhonderdtweeënvijftigduizendtweehonderdnegentiende")+  , (1000, "duizendste")+  , (10000, "tienduizendste")+  , (100000, "honderdduizendste")+  , (1000000, "een miljoenste")+  , (10000000, "tien miljoenste")+  , (100000000, "honderd miljoenste")+  , (1000000000, "een miljardste")+  , (10000000000, "tien miljardste")+  , (100000000000, "honderd miljardste")+  , (1000000000000, "een biljoenste")+  , (10000000000000, "tien biljoenste")+  , (100000000000000, "honderd biljoenste")+  , (1000000000000000, "een biljardste")+  , (10000000000000000, "tien biljardste")+  , (100000000000000000, "honderd biljardste")+  , (1000000000000000000, "een triljoenste")+  , (10000000000000000000, "tien triljoenste")+  , (100000000000000000000, "honderd triljoenste")+  , (1000000000000000000000, "een triljardste")+  , (10000000000000000000000, "tien triljardste")+  , (100000000000000000000000, "honderd triljardste")+  , (1000000000000000000000000, "een quadriljoenste")   ]
test/Text/Numerals/Languages/EnglishSpec.hs view
@@ -314,6 +314,28 @@   , (43566776258854844738105, "forty-three sextillion, five hundred and sixty-six quintillion, seven hundred and seventy-six quadrillion, two hundred and fifty-eight trillion, eight hundred and fifty-four billion, eight hundred and forty-four million, seven hundred and thirty-eight thousand, one hundred and five")   , (70492524767089125814114, "seventy sextillion, four hundred and ninety-two quintillion, five hundred and twenty-four quadrillion, seven hundred and sixty-seven trillion, eighty-nine billion, one hundred and twenty-five million, eight hundred and fourteen thousand, one hundred and fourteen")   , (114059301025943970552219, "one hundred and fourteen sextillion, fifty-nine quintillion, three hundred and one quadrillion, twenty-five trillion, nine hundred and forty-three billion, nine hundred and seventy million, five hundred and fifty-two thousand, two hundred and nineteen")+  , (1000, "one thousand")+  , (10000, "ten thousand")+  , (100000, "one hundred thousand")+  , (1000000, "one million")+  , (10000000, "ten million")+  , (100000000, "one hundred million")+  , (1000000000, "one billion")+  , (10000000000, "ten billion")+  , (100000000000, "one hundred billion")+  , (1000000000000, "one trillion")+  , (10000000000000, "ten trillion")+  , (100000000000000, "one hundred trillion")+  , (1000000000000000, "one quadrillion")+  , (10000000000000000, "ten quadrillion")+  , (100000000000000000, "one hundred quadrillion")+  , (1000000000000000000, "one quintillion")+  , (10000000000000000000, "ten quintillion")+  , (100000000000000000000, "one hundred quintillion")+  , (1000000000000000000000, "one sextillion")+  , (10000000000000000000000, "ten sextillion")+  , (100000000000000000000000, "one hundred sextillion")+  , (1000000000000000000000000, "one septillion")   ]  ordinals :: [(Integer, Text)]@@ -619,4 +641,26 @@   , (43566776258854844738105, "forty-three sextillion, five hundred and sixty-six quintillion, seven hundred and seventy-six quadrillion, two hundred and fifty-eight trillion, eight hundred and fifty-four billion, eight hundred and forty-four million, seven hundred and thirty-eight thousand, one hundred and fifth")   , (70492524767089125814114, "seventy sextillion, four hundred and ninety-two quintillion, five hundred and twenty-four quadrillion, seven hundred and sixty-seven trillion, eighty-nine billion, one hundred and twenty-five million, eight hundred and fourteen thousand, one hundred and fourteenth")   , (114059301025943970552219, "one hundred and fourteen sextillion, fifty-nine quintillion, three hundred and one quadrillion, twenty-five trillion, nine hundred and forty-three billion, nine hundred and seventy million, five hundred and fifty-two thousand, two hundred and nineteenth")+  , (1000, "one thousandth")+  , (10000, "ten thousandth")+  , (100000, "one hundred thousandth")+  , (1000000, "one millionth")+  , (10000000, "ten millionth")+  , (100000000, "one hundred millionth")+  , (1000000000, "one billionth")+  , (10000000000, "ten billionth")+  , (100000000000, "one hundred billionth")+  , (1000000000000, "one trillionth")+  , (10000000000000, "ten trillionth")+  , (100000000000000, "one hundred trillionth")+  , (1000000000000000, "one quadrillionth")+  , (10000000000000000, "ten quadrillionth")+  , (100000000000000000, "one hundred quadrillionth")+  , (1000000000000000000, "one quintillionth")+  , (10000000000000000000, "ten quintillionth")+  , (100000000000000000000, "one hundred quintillionth")+  , (1000000000000000000000, "one sextillionth")+  , (10000000000000000000000, "ten sextillionth")+  , (100000000000000000000000, "one hundred sextillionth")+  , (1000000000000000000000000, "one septillionth")   ]
test/Text/Numerals/Languages/FrenchSpec.hs view
@@ -314,6 +314,28 @@   , (43566776258854844738105, "quarante-trois trilliards cinq cent soixante-six trillions sept cent soixante-seize billiards deux cent cinquante-huit billions huit cent cinquante-quatre milliards huit cent quarante-quatre millions sept cent trente-huit mille cent cinq")   , (70492524767089125814114, "soixante-dix trilliards quatre cent quatre-vingt-douze trillions cinq cent vingt-quatre billiards sept cent soixante-sept billions quatre-vingt-neuf milliards cent vingt-cinq millions huit cent quatorze mille cent quatorze")   , (114059301025943970552219, "cent quatorze trilliards cinquante-neuf trillions trois cent un billiards vingt-cinq billions neuf cent quarante-trois milliards neuf cent soixante-dix millions cinq cent cinquante-deux mille deux cent dix-neuf")+  , (1000, "mille")+  , (10000, "dix mille")+  , (100000, "cent mille")+  , (1000000, "un million")+  , (10000000, "dix millions")+  , (100000000, "cent millions")+  , (1000000000, "un milliard")+  , (10000000000, "dix milliards")+  , (100000000000, "cent milliards")+  , (1000000000000, "un billion")+  , (10000000000000, "dix billions")+  , (100000000000000, "cent billions")+  , (1000000000000000, "un billiard")+  , (10000000000000000, "dix billiards")+  , (100000000000000000, "cent billiards")+  , (1000000000000000000, "un trillion")+  , (10000000000000000000, "dix trillions")+  , (100000000000000000000, "cent trillions")+  , (1000000000000000000000, "un trilliard")+  , (10000000000000000000000, "dix trilliards")+  , (100000000000000000000000, "cent trilliards")+  , (1000000000000000000000000, "un quadrillion")   ]  ordinals :: [(Integer, Text)]@@ -619,4 +641,26 @@   , (43566776258854844738105, "quarante-trois trilliards cinq cent soixante-six trillions sept cent soixante-seize billiards deux cent cinquante-huit billions huit cent cinquante-quatre milliards huit cent quarante-quatre millions sept cent trente-huit mille cent cinquième")   , (70492524767089125814114, "soixante-dix trilliards quatre cent quatre-vingt-douze trillions cinq cent vingt-quatre billiards sept cent soixante-sept billions quatre-vingt-neuf milliards cent vingt-cinq millions huit cent quatorze mille cent quatorzième")   , (114059301025943970552219, "cent quatorze trilliards cinquante-neuf trillions trois cent un billiards vingt-cinq billions neuf cent quarante-trois milliards neuf cent soixante-dix millions cinq cent cinquante-deux mille deux cent dix-neuvième")+  , (1000, "millième")+  , (10000, "dix millième")+  , (100000, "cent millième")+  , (1000000, "un millionième")+  , (10000000, "dix millionsième")+  , (100000000, "cent millionsième")+  , (1000000000, "un milliardième")+  , (10000000000, "dix milliardsième")+  , (100000000000, "cent milliardsième")+  , (1000000000000, "un billionième")+  , (10000000000000, "dix billionsième")+  , (100000000000000, "cent billionsième")+  , (1000000000000000, "un billiardième")+  , (10000000000000000, "dix billiardsième")+  , (100000000000000000, "cent billiardsième")+  , (1000000000000000000, "un trillionième")+  , (10000000000000000000, "dix trillionsième")+  , (100000000000000000000, "cent trillionsième")+  , (1000000000000000000000, "un trilliardième")+  , (10000000000000000000000, "dix trilliardsième")+  , (100000000000000000000000, "cent trilliardsième")+  , (1000000000000000000000000, "un quadrillionième")   ]
+ test/Text/Numerals/Languages/GermanSpec.hs view
@@ -0,0 +1,666 @@+module Text.Numerals.Languages.GermanSpec (+    spec+  ) where++import Data.Text(Text)++import Test.Hspec(Spec)+import Text.Numerals.Languages.German(german)+import Text.Numerals.LanguageTest(testLanguage)++spec :: Spec+spec = testLanguage "German" german cardinals ordinals++cardinals :: [(Integer, Text)]+cardinals = [+    (0, "null")+  , (1, "eins")+  , (2, "zwei")+  , (3, "drei")+  , (4, "vier")+  , (5, "fünf")+  , (6, "sechs")+  , (7, "sieben")+  , (8, "acht")+  , (9, "neun")+  , (10, "zehn")+  , (11, "elf")+  , (12, "zwölf")+  , (13, "dreizehn")+  , (14, "vierzehn")+  , (15, "fünfzehn")+  , (16, "sechzehn")+  , (17, "siebzehn")+  , (18, "achtzehn")+  , (19, "neunzehn")+  , (20, "zwanzig")+  , (21, "einundzwanzig")+  , (22, "zweiundzwanzig")+  , (23, "dreiundzwanzig")+  , (24, "vierundzwanzig")+  , (25, "fünfundzwanzig")+  , (26, "sechsundzwanzig")+  , (27, "siebenundzwanzig")+  , (28, "achtundzwanzig")+  , (29, "neunundzwanzig")+  , (30, "dreißig")+  , (31, "einunddreißig")+  , (32, "zweiunddreißig")+  , (33, "dreiunddreißig")+  , (34, "vierunddreißig")+  , (35, "fünfunddreißig")+  , (36, "sechsunddreißig")+  , (37, "siebenunddreißig")+  , (38, "achtunddreißig")+  , (39, "neununddreißig")+  , (40, "vierzig")+  , (41, "einundvierzig")+  , (42, "zweiundvierzig")+  , (43, "dreiundvierzig")+  , (44, "vierundvierzig")+  , (45, "fünfundvierzig")+  , (46, "sechsundvierzig")+  , (47, "siebenundvierzig")+  , (48, "achtundvierzig")+  , (49, "neunundvierzig")+  , (50, "fünfzig")+  , (51, "einundfünfzig")+  , (52, "zweiundfünfzig")+  , (53, "dreiundfünfzig")+  , (54, "vierundfünfzig")+  , (55, "fünfundfünfzig")+  , (56, "sechsundfünfzig")+  , (57, "siebenundfünfzig")+  , (58, "achtundfünfzig")+  , (59, "neunundfünfzig")+  , (60, "sechzig")+  , (61, "einundsechzig")+  , (62, "zweiundsechzig")+  , (63, "dreiundsechzig")+  , (64, "vierundsechzig")+  , (65, "fünfundsechzig")+  , (66, "sechsundsechzig")+  , (67, "siebenundsechzig")+  , (68, "achtundsechzig")+  , (69, "neunundsechzig")+  , (70, "siebzig")+  , (71, "einundsiebzig")+  , (72, "zweiundsiebzig")+  , (73, "dreiundsiebzig")+  , (74, "vierundsiebzig")+  , (75, "fünfundsiebzig")+  , (76, "sechsundsiebzig")+  , (77, "siebenundsiebzig")+  , (78, "achtundsiebzig")+  , (79, "neunundsiebzig")+  , (80, "achtzig")+  , (81, "einundachtzig")+  , (82, "zweiundachtzig")+  , (83, "dreiundachtzig")+  , (84, "vierundachtzig")+  , (85, "fünfundachtzig")+  , (86, "sechsundachtzig")+  , (87, "siebenundachtzig")+  , (88, "achtundachtzig")+  , (89, "neunundachtzig")+  , (90, "neunzig")+  , (91, "einundneunzig")+  , (92, "zweiundneunzig")+  , (93, "dreiundneunzig")+  , (94, "vierundneunzig")+  , (95, "fünfundneunzig")+  , (96, "sechsundneunzig")+  , (97, "siebenundneunzig")+  , (98, "achtundneunzig")+  , (99, "neunundneunzig")+  , (100, "einhundert")+  , (101, "einhunderteins")+  , (102, "einhundertzwei")+  , (103, "einhundertdrei")+  , (104, "einhundertvier")+  , (105, "einhundertfünf")+  , (106, "einhundertsechs")+  , (107, "einhundertsieben")+  , (108, "einhundertacht")+  , (109, "einhundertneun")+  , (110, "einhundertzehn")+  , (111, "einhundertelf")+  , (112, "einhundertzwölf")+  , (113, "einhundertdreizehn")+  , (114, "einhundertvierzehn")+  , (115, "einhundertfünfzehn")+  , (116, "einhundertsechzehn")+  , (117, "einhundertsiebzehn")+  , (118, "einhundertachtzehn")+  , (119, "einhundertneunzehn")+  , (120, "einhundertzwanzig")+  , (121, "einhunderteinundzwanzig")+  , (122, "einhundertzweiundzwanzig")+  , (123, "einhundertdreiundzwanzig")+  , (124, "einhundertvierundzwanzig")+  , (125, "einhundertfünfundzwanzig")+  , (126, "einhundertsechsundzwanzig")+  , (127, "einhundertsiebenundzwanzig")+  , (128, "einhundertachtundzwanzig")+  , (129, "einhundertneunundzwanzig")+  , (130, "einhundertdreißig")+  , (131, "einhunderteinunddreißig")+  , (132, "einhundertzweiunddreißig")+  , (133, "einhundertdreiunddreißig")+  , (134, "einhundertvierunddreißig")+  , (135, "einhundertfünfunddreißig")+  , (136, "einhundertsechsunddreißig")+  , (137, "einhundertsiebenunddreißig")+  , (138, "einhundertachtunddreißig")+  , (139, "einhundertneununddreißig")+  , (140, "einhundertvierzig")+  , (141, "einhunderteinundvierzig")+  , (142, "einhundertzweiundvierzig")+  , (143, "einhundertdreiundvierzig")+  , (144, "einhundertvierundvierzig")+  , (145, "einhundertfünfundvierzig")+  , (146, "einhundertsechsundvierzig")+  , (147, "einhundertsiebenundvierzig")+  , (148, "einhundertachtundvierzig")+  , (149, "einhundertneunundvierzig")+  , (150, "einhundertfünfzig")+  , (151, "einhunderteinundfünfzig")+  , (152, "einhundertzweiundfünfzig")+  , (153, "einhundertdreiundfünfzig")+  , (154, "einhundertvierundfünfzig")+  , (155, "einhundertfünfundfünfzig")+  , (156, "einhundertsechsundfünfzig")+  , (157, "einhundertsiebenundfünfzig")+  , (158, "einhundertachtundfünfzig")+  , (159, "einhundertneunundfünfzig")+  , (160, "einhundertsechzig")+  , (161, "einhunderteinundsechzig")+  , (162, "einhundertzweiundsechzig")+  , (163, "einhundertdreiundsechzig")+  , (164, "einhundertvierundsechzig")+  , (165, "einhundertfünfundsechzig")+  , (166, "einhundertsechsundsechzig")+  , (167, "einhundertsiebenundsechzig")+  , (168, "einhundertachtundsechzig")+  , (169, "einhundertneunundsechzig")+  , (170, "einhundertsiebzig")+  , (171, "einhunderteinundsiebzig")+  , (172, "einhundertzweiundsiebzig")+  , (173, "einhundertdreiundsiebzig")+  , (174, "einhundertvierundsiebzig")+  , (175, "einhundertfünfundsiebzig")+  , (176, "einhundertsechsundsiebzig")+  , (177, "einhundertsiebenundsiebzig")+  , (178, "einhundertachtundsiebzig")+  , (179, "einhundertneunundsiebzig")+  , (180, "einhundertachtzig")+  , (181, "einhunderteinundachtzig")+  , (182, "einhundertzweiundachtzig")+  , (183, "einhundertdreiundachtzig")+  , (184, "einhundertvierundachtzig")+  , (185, "einhundertfünfundachtzig")+  , (186, "einhundertsechsundachtzig")+  , (187, "einhundertsiebenundachtzig")+  , (188, "einhundertachtundachtzig")+  , (189, "einhundertneunundachtzig")+  , (190, "einhundertneunzig")+  , (191, "einhunderteinundneunzig")+  , (192, "einhundertzweiundneunzig")+  , (193, "einhundertdreiundneunzig")+  , (194, "einhundertvierundneunzig")+  , (195, "einhundertfünfundneunzig")+  , (196, "einhundertsechsundneunzig")+  , (197, "einhundertsiebenundneunzig")+  , (198, "einhundertachtundneunzig")+  , (199, "einhundertneunundneunzig")+  , (200, "zweihundert")+  , (233, "zweihundertdreiunddreißig")+  , (377, "dreihundertsiebenundsiebzig")+  , (610, "sechshundertzehn")+  , (987, "neunhundertsiebenundachtzig")+  , (1597, "eintausendfünfhundertsiebenundneunzig")+  , (2584, "zweitausendfünfhundertvierundachtzig")+  , (4181, "viertausendeinhunderteinundachtzig")+  , (6765, "sechstausendsiebenhundertfünfundsechzig")+  , (10946, "zehntausendneunhundertsechsundvierzig")+  , (17711, "siebzehntausendsiebenhundertelf")+  , (28657, "achtundzwanzigtausendsechshundertsiebenundfünfzig")+  , (46368, "sechsundvierzigtausenddreihundertachtundsechzig")+  , (75025, "fünfundsiebzigtausendfünfundzwanzig")+  , (121393, "einhunderteinundzwanzigtausenddreihundertdreiundneunzig")+  , (196418, "einhundertsechsundneunzigtausendvierhundertachtzehn")+  , (317811, "dreihundertsiebzehntausendachthundertelf")+  , (514229, "fünfhundertvierzehntausendzweihundertneunundzwanzig")+  , (832040, "achthundertzweiunddreißigtausendvierzig")+  , (1346269, "eine Million dreihundertsechsundvierzigtausendzweihundertneunundsechzig")+  , (2178309, "zwei Millionen einhundertachtundsiebzigtausenddreihundertneun")+  , (3524578, "drei Millionen fünfhundertvierundzwanzigtausendfünfhundertachtundsiebzig")+  , (5702887, "fünf Millionen siebenhundertzweitausendachthundertsiebenundachtzig")+  , (9227465, "neun Millionen zweihundertsiebenundzwanzigtausendvierhundertfünfundsechzig")+  , (14930352, "vierzehn Millionen neunhundertdreißigtausenddreihundertzweiundfünfzig")+  , (24157817, "vierundzwanzig Millionen einhundertsiebenundfünfzigtausendachthundertsiebzehn")+  , (39088169, "neununddreißig Millionen achtundachtzigtausendeinhundertneunundsechzig")+  , (63245986, "dreiundsechzig Millionen zweihundertfünfundvierzigtausendneunhundertsechsundachtzig")+  , (102334155, "einhundertzwei Millionen dreihundertvierunddreißigtausendeinhundertfünfundfünfzig")+  , (165580141, "einhundertfünfundsechzig Millionen fünfhundertachtzigtausendeinhunderteinundvierzig")+  , (267914296, "zweihundertsiebenundsechzig Millionen neunhundertvierzehntausendzweihundertsechsundneunzig")+  , (433494437, "vierhundertdreiunddreißig Millionen vierhundertvierundneunzigtausendvierhundertsiebenunddreißig")+  , (701408733, "siebenhunderteins Millionen vierhundertachttausendsiebenhundertdreiunddreißig")+  , (1134903170, "eine Milliard einhundertvierunddreißig Millionen neunhundertdreitausendeinhundertsiebzig")+  , (1836311903, "eine Milliard achthundertsechsunddreißig Millionen dreihundertelftausendneunhundertdrei")+  , (2971215073, "zwei Milliarden neunhunderteinundsiebzig Millionen zweihundertfünfzehntausenddreiundsiebzig")+  , (4807526976, "vier Milliarden achthundertsieben Millionen fünfhundertsechsundzwanzigtausendneunhundertsechsundsiebzig")+  , (7778742049, "sieben Milliarden siebenhundertachtundsiebzig Millionen siebenhundertzweiundvierzigtausendneunundvierzig")+  , (12586269025, "zwölf Milliarden fünfhundertsechsundachtzig Millionen zweihundertneunundsechzigtausendfünfundzwanzig")+  , (20365011074, "zwanzig Milliarden dreihundertfünfundsechzig Millionen elftausendvierundsiebzig")+  , (32951280099, "zweiunddreißig Milliarden neunhunderteinundfünfzig Millionen zweihundertachtzigtausendneunundneunzig")+  , (53316291173, "dreiundfünfzig Milliarden dreihundertsechzehn Millionen zweihunderteinundneunzigtausendeinhundertdreiundsiebzig")+  , (86267571272, "sechsundachtzig Milliarden zweihundertsiebenundsechzig Millionen fünfhunderteinundsiebzigtausendzweihundertzweiundsiebzig")+  , (139583862445, "einhundertneununddreißig Milliarden fünfhundertdreiundachtzig Millionen achthundertzweiundsechzigtausendvierhundertfünfundvierzig")+  , (225851433717, "zweihundertfünfundzwanzig Milliarden achthunderteinundfünfzig Millionen vierhundertdreiunddreißigtausendsiebenhundertsiebzehn")+  , (365435296162, "dreihundertfünfundsechzig Milliarden vierhundertfünfunddreißig Millionen zweihundertsechsundneunzigtausendeinhundertzweiundsechzig")+  , (591286729879, "fünfhunderteinundneunzig Milliarden zweihundertsechsundachtzig Millionen siebenhundertneunundzwanzigtausendachthundertneunundsiebzig")+  , (956722026041, "neunhundertsechsundfünfzig Milliarden siebenhundertzweiundzwanzig Millionen sechsundzwanzigtausendeinundvierzig")+  , (1548008755920, "eine Billion fünfhundertachtundvierzig Milliarden acht Millionen siebenhundertfünfundfünfzigtausendneunhundertzwanzig")+  , (2504730781961, "zwei Billionen fünfhundertvier Milliarden siebenhundertdreißig Millionen siebenhunderteinundachtzigtausendneunhunderteinundsechzig")+  , (4052739537881, "vier Billionen zweiundfünfzig Milliarden siebenhundertneununddreißig Millionen fünfhundertsiebenunddreißigtausendachthunderteinundachtzig")+  , (6557470319842, "sechs Billionen fünfhundertsiebenundfünfzig Milliarden vierhundertsiebzig Millionen dreihundertneunzehntausendachthundertzweiundvierzig")+  , (10610209857723, "zehn Billionen sechshundertzehn Milliarden zweihundertneun Millionen achthundertsiebenundfünfzigtausendsiebenhundertdreiundzwanzig")+  , (17167680177565, "siebzehn Billionen einhundertsiebenundsechzig Milliarden sechshundertachtzig Millionen einhundertsiebenundsiebzigtausendfünfhundertfünfundsechzig")+  , (27777890035288, "siebenundzwanzig Billionen siebenhundertsiebenundsiebzig Milliarden achthundertneunzig Millionen fünfunddreißigtausendzweihundertachtundachtzig")+  , (44945570212853, "vierundvierzig Billionen neunhundertfünfundvierzig Milliarden fünfhundertsiebzig Millionen zweihundertzwölftausendachthundertdreiundfünfzig")+  , (72723460248141, "zweiundsiebzig Billionen siebenhundertdreiundzwanzig Milliarden vierhundertsechzig Millionen zweihundertachtundvierzigtausendeinhunderteinundvierzig")+  , (117669030460994, "einhundertsiebzehn Billionen sechshundertneunundsechzig Milliarden dreißig Millionen vierhundertsechzigtausendneunhundertvierundneunzig")+  , (190392490709135, "einhundertneunzig Billionen dreihundertzweiundneunzig Milliarden vierhundertneunzig Millionen siebenhundertneuntausendeinhundertfünfunddreißig")+  , (308061521170129, "dreihundertacht Billionen einundsechzig Milliarden fünfhunderteinundzwanzig Millionen einhundertsiebzigtausendeinhundertneunundzwanzig")+  , (498454011879264, "vierhundertachtundneunzig Billionen vierhundertvierundfünfzig Milliarden elf Millionen achthundertneunundsiebzigtausendzweihundertvierundsechzig")+  , (806515533049393, "achthundertsechs Billionen fünfhundertfünfzehn Milliarden fünfhundertdreiunddreißig Millionen neunundvierzigtausenddreihundertdreiundneunzig")+  , (1304969544928657, "eine Billiard dreihundertvier Billionen neunhundertneunundsechzig Milliarden fünfhundertvierundvierzig Millionen neunhundertachtundzwanzigtausendsechshundertsiebenundfünfzig")+  , (2111485077978050, "zwei Billiarden einhundertelf Billionen vierhundertfünfundachtzig Milliarden siebenundsiebzig Millionen neunhundertachtundsiebzigtausendfünfzig")+  , (3416454622906707, "drei Billiarden vierhundertsechzehn Billionen vierhundertvierundfünfzig Milliarden sechshundertzweiundzwanzig Millionen neunhundertsechstausendsiebenhundertsieben")+  , (5527939700884757, "fünf Billiarden fünfhundertsiebenundzwanzig Billionen neunhundertneununddreißig Milliarden siebenhundert Millionen achthundertvierundachtzigtausendsiebenhundertsiebenundfünfzig")+  , (8944394323791464, "acht Billiarden neunhundertvierundvierzig Billionen dreihundertvierundneunzig Milliarden dreihundertdreiundzwanzig Millionen siebenhunderteinundneunzigtausendvierhundertvierundsechzig")+  , (14472334024676221, "vierzehn Billiarden vierhundertzweiundsiebzig Billionen dreihundertvierunddreißig Milliarden vierundzwanzig Millionen sechshundertsechsundsiebzigtausendzweihunderteinundzwanzig")+  , (23416728348467685, "dreiundzwanzig Billiarden vierhundertsechzehn Billionen siebenhundertachtundzwanzig Milliarden dreihundertachtundvierzig Millionen vierhundertsiebenundsechzigtausendsechshundertfünfundachtzig")+  , (37889062373143906, "siebenunddreißig Billiarden achthundertneunundachtzig Billionen zweiundsechzig Milliarden dreihundertdreiundsiebzig Millionen einhundertdreiundvierzigtausendneunhundertsechs")+  , (61305790721611591, "einundsechzig Billiarden dreihundertfünf Billionen siebenhundertneunzig Milliarden siebenhunderteinundzwanzig Millionen sechshundertelftausendfünfhunderteinundneunzig")+  , (99194853094755497, "neunundneunzig Billiarden einhundertvierundneunzig Billionen achthundertdreiundfünfzig Milliarden vierundneunzig Millionen siebenhundertfünfundfünfzigtausendvierhundertsiebenundneunzig")+  , (160500643816367088, "einhundertsechzig Billiarden fünfhundert Billionen sechshundertdreiundvierzig Milliarden achthundertsechzehn Millionen dreihundertsiebenundsechzigtausendachtundachtzig")+  , (259695496911122585, "zweihundertneunundfünfzig Billiarden sechshundertfünfundneunzig Billionen vierhundertsechsundneunzig Milliarden neunhundertelf Millionen einhundertzweiundzwanzigtausendfünfhundertfünfundachtzig")+  , (420196140727489673, "vierhundertzwanzig Billiarden einhundertsechsundneunzig Billionen einhundertvierzig Milliarden siebenhundertsiebenundzwanzig Millionen vierhundertneunundachtzigtausendsechshundertdreiundsiebzig")+  , (679891637638612258, "sechshundertneunundsiebzig Billiarden achthunderteinundneunzig Billionen sechshundertsiebenunddreißig Milliarden sechshundertachtunddreißig Millionen sechshundertzwölftausendzweihundertachtundfünfzig")+  , (1100087778366101931, "eine Trillion einhundert Billiarden siebenundachtzig Billionen siebenhundertachtundsiebzig Milliarden dreihundertsechsundsechzig Millionen einhunderteinstausendneunhunderteinunddreißig")+  , (1779979416004714189, "eine Trillion siebenhundertneunundsiebzig Billiarden neunhundertneunundsiebzig Billionen vierhundertsechzehn Milliarden vier Millionen siebenhundertvierzehntausendeinhundertneunundachtzig")+  , (2880067194370816120, "zwei Trillionen achthundertachtzig Billiarden siebenundsechzig Billionen einhundertvierundneunzig Milliarden dreihundertsiebzig Millionen achthundertsechzehntausendeinhundertzwanzig")+  , (4660046610375530309, "vier Trillionen sechshundertsechzig Billiarden sechsundvierzig Billionen sechshundertzehn Milliarden dreihundertfünfundsiebzig Millionen fünfhundertdreißigtausenddreihundertneun")+  , (7540113804746346429, "sieben Trillionen fünfhundertvierzig Billiarden einhundertdreizehn Billionen achthundertvier Milliarden siebenhundertsechsundvierzig Millionen dreihundertsechsundvierzigtausendvierhundertneunundzwanzig")+  , (12200160415121876738, "zwölf Trillionen zweihundert Billiarden einhundertsechzig Billionen vierhundertfünfzehn Milliarden einhunderteinundzwanzig Millionen achthundertsechsundsiebzigtausendsiebenhundertachtunddreißig")+  , (19740274219868223167, "neunzehn Trillionen siebenhundertvierzig Billiarden zweihundertvierundsiebzig Billionen zweihundertneunzehn Milliarden achthundertachtundsechzig Millionen zweihundertdreiundzwanzigtausendeinhundertsiebenundsechzig")+  , (31940434634990099905, "einunddreißig Trillionen neunhundertvierzig Billiarden vierhundertvierunddreißig Billionen sechshundertvierunddreißig Milliarden neunhundertneunzig Millionen neunundneunzigtausendneunhundertfünf")+  , (51680708854858323072, "einundfünfzig Trillionen sechshundertachtzig Billiarden siebenhundertacht Billionen achthundertvierundfünfzig Milliarden achthundertachtundfünfzig Millionen dreihundertdreiundzwanzigtausendzweiundsiebzig")+  , (83621143489848422977, "dreiundachtzig Trillionen sechshunderteinundzwanzig Billiarden einhundertdreiundvierzig Billionen vierhundertneunundachtzig Milliarden achthundertachtundvierzig Millionen vierhundertzweiundzwanzigtausendneunhundertsiebenundsiebzig")+  , (135301852344706746049, "einhundertfünfunddreißig Trillionen dreihunderteins Billiarden achthundertzweiundfünfzig Billionen dreihundertvierundvierzig Milliarden siebenhundertsechs Millionen siebenhundertsechsundvierzigtausendneunundvierzig")+  , (218922995834555169026, "zweihundertachtzehn Trillionen neunhundertzweiundzwanzig Billiarden neunhundertfünfundneunzig Billionen achthundertvierunddreißig Milliarden fünfhundertfünfundfünfzig Millionen einhundertneunundsechzigtausendsechsundzwanzig")+  , (354224848179261915075, "dreihundertvierundfünfzig Trillionen zweihundertvierundzwanzig Billiarden achthundertachtundvierzig Billionen einhundertneunundsiebzig Milliarden zweihunderteinundsechzig Millionen neunhundertfünfzehntausendfünfundsiebzig")+  , (573147844013817084101, "fünfhundertdreiundsiebzig Trillionen einhundertsiebenundvierzig Billiarden achthundertvierundvierzig Billionen dreizehn Milliarden achthundertsiebzehn Millionen vierundachtzigtausendeinhunderteins")+  , (927372692193078999176, "neunhundertsiebenundzwanzig Trillionen dreihundertzweiundsiebzig Billiarden sechshundertzweiundneunzig Billionen einhundertdreiundneunzig Milliarden achtundsiebzig Millionen neunhundertneunundneunzigtausendeinhundertsechsundsiebzig")+  , (1500520536206896083277, "eine Trilliard fünfhundert Trillionen fünfhundertzwanzig Billiarden fünfhundertsechsunddreißig Billionen zweihundertsechs Milliarden achthundertsechsundneunzig Millionen dreiundachtzigtausendzweihundertsiebenundsiebzig")+  , (2427893228399975082453, "zwei Trilliarden vierhundertsiebenundzwanzig Trillionen achthundertdreiundneunzig Billiarden zweihundertachtundzwanzig Billionen dreihundertneunundneunzig Milliarden neunhundertfünfundsiebzig Millionen zweiundachtzigtausendvierhundertdreiundfünfzig")+  , (3928413764606871165730, "drei Trilliarden neunhundertachtundzwanzig Trillionen vierhundertdreizehn Billiarden siebenhundertvierundsechzig Billionen sechshundertsechs Milliarden achthunderteinundsiebzig Millionen einhundertfünfundsechzigtausendsiebenhundertdreißig")+  , (6356306993006846248183, "sechs Trilliarden dreihundertsechsundfünfzig Trillionen dreihundertsechs Billiarden neunhundertdreiundneunzig Billionen sechs Milliarden achthundertsechsundvierzig Millionen zweihundertachtundvierzigtausendeinhundertdreiundachtzig")+  , (10284720757613717413913, "zehn Trilliarden zweihundertvierundachtzig Trillionen siebenhundertzwanzig Billiarden siebenhundertsiebenundfünfzig Billionen sechshundertdreizehn Milliarden siebenhundertsiebzehn Millionen vierhundertdreizehntausendneunhundertdreizehn")+  , (16641027750620563662096, "sechzehn Trilliarden sechshunderteinundvierzig Trillionen siebenundzwanzig Billiarden siebenhundertfünfzig Billionen sechshundertzwanzig Milliarden fünfhundertdreiundsechzig Millionen sechshundertzweiundsechzigtausendsechsundneunzig")+  , (26925748508234281076009, "sechsundzwanzig Trilliarden neunhundertfünfundzwanzig Trillionen siebenhundertachtundvierzig Billiarden fünfhundertacht Billionen zweihundertvierunddreißig Milliarden zweihunderteinundachtzig Millionen sechsundsiebzigtausendneun")+  , (43566776258854844738105, "dreiundvierzig Trilliarden fünfhundertsechsundsechzig Trillionen siebenhundertsechsundsiebzig Billiarden zweihundertachtundfünfzig Billionen achthundertvierundfünfzig Milliarden achthundertvierundvierzig Millionen siebenhundertachtunddreißigtausendeinhundertfünf")+  , (70492524767089125814114, "siebzig Trilliarden vierhundertzweiundneunzig Trillionen fünfhundertvierundzwanzig Billiarden siebenhundertsiebenundsechzig Billionen neunundachtzig Milliarden einhundertfünfundzwanzig Millionen achthundertvierzehntausendeinhundertvierzehn")+  , (114059301025943970552219, "einhundertvierzehn Trilliarden neunundfünfzig Trillionen dreihunderteins Billiarden fünfundzwanzig Billionen neunhundertdreiundvierzig Milliarden neunhundertsiebzig Millionen fünfhundertzweiundfünfzigtausendzweihundertneunzehn")+  , (1000, "eintausend")+  , (10000, "zehntausend")+  , (100000, "einhunderttausend")+  , (1000000, "eine Million")+  , (10000000, "zehn Millionen")+  , (100000000, "einhundert Millionen")+  , (1000000000, "eine Milliard")+  , (10000000000, "zehn Milliarden")+  , (100000000000, "einhundert Milliarden")+  , (1000000000000, "eine Billion")+  , (10000000000000, "zehn Billionen")+  , (100000000000000, "einhundert Billionen")+  , (1000000000000000, "eine Billiard")+  , (10000000000000000, "zehn Billiarden")+  , (100000000000000000, "einhundert Billiarden")+  , (1000000000000000000, "eine Trillion")+  , (10000000000000000000, "zehn Trillionen")+  , (100000000000000000000, "einhundert Trillionen")+  , (1000000000000000000000, "eine Trilliard")+  , (10000000000000000000000, "zehn Trilliarden")+  , (100000000000000000000000, "einhundert Trilliarden")+  , (1000000000000000000000000, "eine Quadrillion")+  ]++ordinals :: [(Integer, Text)]+ordinals = [+    (0, "nullte")+  , (1, "erste")+  , (2, "zweite")+  , (3, "dritte")+  , (4, "vierte")+  , (5, "fünfte")+  , (6, "sechste")+  , (7, "siebte")+  , (8, "achte")+  , (9, "neunte")+  , (10, "zehnte")+  , (11, "elfte")+  , (12, "zwölfte")+  , (13, "dreizehnte")+  , (14, "vierzehnte")+  , (15, "fünfzehnte")+  , (16, "sechzehnte")+  , (17, "siebzehnte")+  , (18, "achtzehnte")+  , (19, "neunzehnte")+  , (20, "zwanzigste")+  , (21, "einundzwanzigste")+  , (22, "zweiundzwanzigste")+  , (23, "dreiundzwanzigste")+  , (24, "vierundzwanzigste")+  , (25, "fünfundzwanzigste")+  , (26, "sechsundzwanzigste")+  , (27, "siebenundzwanzigste")+  , (28, "achtundzwanzigste")+  , (29, "neunundzwanzigste")+  , (30, "dreißigste")+  , (31, "einunddreißigste")+  , (32, "zweiunddreißigste")+  , (33, "dreiunddreißigste")+  , (34, "vierunddreißigste")+  , (35, "fünfunddreißigste")+  , (36, "sechsunddreißigste")+  , (37, "siebenunddreißigste")+  , (38, "achtunddreißigste")+  , (39, "neununddreißigste")+  , (40, "vierzigste")+  , (41, "einundvierzigste")+  , (42, "zweiundvierzigste")+  , (43, "dreiundvierzigste")+  , (44, "vierundvierzigste")+  , (45, "fünfundvierzigste")+  , (46, "sechsundvierzigste")+  , (47, "siebenundvierzigste")+  , (48, "achtundvierzigste")+  , (49, "neunundvierzigste")+  , (50, "fünfzigste")+  , (51, "einundfünfzigste")+  , (52, "zweiundfünfzigste")+  , (53, "dreiundfünfzigste")+  , (54, "vierundfünfzigste")+  , (55, "fünfundfünfzigste")+  , (56, "sechsundfünfzigste")+  , (57, "siebenundfünfzigste")+  , (58, "achtundfünfzigste")+  , (59, "neunundfünfzigste")+  , (60, "sechzigste")+  , (61, "einundsechzigste")+  , (62, "zweiundsechzigste")+  , (63, "dreiundsechzigste")+  , (64, "vierundsechzigste")+  , (65, "fünfundsechzigste")+  , (66, "sechsundsechzigste")+  , (67, "siebenundsechzigste")+  , (68, "achtundsechzigste")+  , (69, "neunundsechzigste")+  , (70, "siebzigste")+  , (71, "einundsiebzigste")+  , (72, "zweiundsiebzigste")+  , (73, "dreiundsiebzigste")+  , (74, "vierundsiebzigste")+  , (75, "fünfundsiebzigste")+  , (76, "sechsundsiebzigste")+  , (77, "siebenundsiebzigste")+  , (78, "achtundsiebzigste")+  , (79, "neunundsiebzigste")+  , (80, "achtzigste")+  , (81, "einundachtzigste")+  , (82, "zweiundachtzigste")+  , (83, "dreiundachtzigste")+  , (84, "vierundachtzigste")+  , (85, "fünfundachtzigste")+  , (86, "sechsundachtzigste")+  , (87, "siebenundachtzigste")+  , (88, "achtundachtzigste")+  , (89, "neunundachtzigste")+  , (90, "neunzigste")+  , (91, "einundneunzigste")+  , (92, "zweiundneunzigste")+  , (93, "dreiundneunzigste")+  , (94, "vierundneunzigste")+  , (95, "fünfundneunzigste")+  , (96, "sechsundneunzigste")+  , (97, "siebenundneunzigste")+  , (98, "achtundneunzigste")+  , (99, "neunundneunzigste")+  , (100, "hundertste")+  , (101, "einhunderterste")+  , (102, "einhundertzweite")+  , (103, "einhundertdritte")+  , (104, "einhundertvierte")+  , (105, "einhundertfünfte")+  , (106, "einhundertsechste")+  , (107, "einhundertsiebte")+  , (108, "einhundertachte")+  , (109, "einhundertneunte")+  , (110, "einhundertzehnte")+  , (111, "einhundertelfte")+  , (112, "einhundertzwölfte")+  , (113, "einhundertdreizehnte")+  , (114, "einhundertvierzehnte")+  , (115, "einhundertfünfzehnte")+  , (116, "einhundertsechzehnte")+  , (117, "einhundertsiebzehnte")+  , (118, "einhundertachtzehnte")+  , (119, "einhundertneunzehnte")+  , (120, "einhundertzwanzigste")+  , (121, "einhunderteinundzwanzigste")+  , (122, "einhundertzweiundzwanzigste")+  , (123, "einhundertdreiundzwanzigste")+  , (124, "einhundertvierundzwanzigste")+  , (125, "einhundertfünfundzwanzigste")+  , (126, "einhundertsechsundzwanzigste")+  , (127, "einhundertsiebenundzwanzigste")+  , (128, "einhundertachtundzwanzigste")+  , (129, "einhundertneunundzwanzigste")+  , (130, "einhundertdreißigste")+  , (131, "einhunderteinunddreißigste")+  , (132, "einhundertzweiunddreißigste")+  , (133, "einhundertdreiunddreißigste")+  , (134, "einhundertvierunddreißigste")+  , (135, "einhundertfünfunddreißigste")+  , (136, "einhundertsechsunddreißigste")+  , (137, "einhundertsiebenunddreißigste")+  , (138, "einhundertachtunddreißigste")+  , (139, "einhundertneununddreißigste")+  , (140, "einhundertvierzigste")+  , (141, "einhunderteinundvierzigste")+  , (142, "einhundertzweiundvierzigste")+  , (143, "einhundertdreiundvierzigste")+  , (144, "einhundertvierundvierzigste")+  , (145, "einhundertfünfundvierzigste")+  , (146, "einhundertsechsundvierzigste")+  , (147, "einhundertsiebenundvierzigste")+  , (148, "einhundertachtundvierzigste")+  , (149, "einhundertneunundvierzigste")+  , (150, "einhundertfünfzigste")+  , (151, "einhunderteinundfünfzigste")+  , (152, "einhundertzweiundfünfzigste")+  , (153, "einhundertdreiundfünfzigste")+  , (154, "einhundertvierundfünfzigste")+  , (155, "einhundertfünfundfünfzigste")+  , (156, "einhundertsechsundfünfzigste")+  , (157, "einhundertsiebenundfünfzigste")+  , (158, "einhundertachtundfünfzigste")+  , (159, "einhundertneunundfünfzigste")+  , (160, "einhundertsechzigste")+  , (161, "einhunderteinundsechzigste")+  , (162, "einhundertzweiundsechzigste")+  , (163, "einhundertdreiundsechzigste")+  , (164, "einhundertvierundsechzigste")+  , (165, "einhundertfünfundsechzigste")+  , (166, "einhundertsechsundsechzigste")+  , (167, "einhundertsiebenundsechzigste")+  , (168, "einhundertachtundsechzigste")+  , (169, "einhundertneunundsechzigste")+  , (170, "einhundertsiebzigste")+  , (171, "einhunderteinundsiebzigste")+  , (172, "einhundertzweiundsiebzigste")+  , (173, "einhundertdreiundsiebzigste")+  , (174, "einhundertvierundsiebzigste")+  , (175, "einhundertfünfundsiebzigste")+  , (176, "einhundertsechsundsiebzigste")+  , (177, "einhundertsiebenundsiebzigste")+  , (178, "einhundertachtundsiebzigste")+  , (179, "einhundertneunundsiebzigste")+  , (180, "einhundertachtzigste")+  , (181, "einhunderteinundachtzigste")+  , (182, "einhundertzweiundachtzigste")+  , (183, "einhundertdreiundachtzigste")+  , (184, "einhundertvierundachtzigste")+  , (185, "einhundertfünfundachtzigste")+  , (186, "einhundertsechsundachtzigste")+  , (187, "einhundertsiebenundachtzigste")+  , (188, "einhundertachtundachtzigste")+  , (189, "einhundertneunundachtzigste")+  , (190, "einhundertneunzigste")+  , (191, "einhunderteinundneunzigste")+  , (192, "einhundertzweiundneunzigste")+  , (193, "einhundertdreiundneunzigste")+  , (194, "einhundertvierundneunzigste")+  , (195, "einhundertfünfundneunzigste")+  , (196, "einhundertsechsundneunzigste")+  , (197, "einhundertsiebenundneunzigste")+  , (198, "einhundertachtundneunzigste")+  , (199, "einhundertneunundneunzigste")+  , (200, "zweihundertste")+  , (233, "zweihundertdreiunddreißigste")+  , (377, "dreihundertsiebenundsiebzigste")+  , (610, "sechshundertzehnte")+  , (987, "neunhundertsiebenundachtzigste")+  , (1597, "eintausendfünfhundertsiebenundneunzigste")+  , (2584, "zweitausendfünfhundertvierundachtzigste")+  , (4181, "viertausendeinhunderteinundachtzigste")+  , (6765, "sechstausendsiebenhundertfünfundsechzigste")+  , (10946, "zehntausendneunhundertsechsundvierzigste")+  , (17711, "siebzehntausendsiebenhundertelfte")+  , (28657, "achtundzwanzigtausendsechshundertsiebenundfünfzigste")+  , (46368, "sechsundvierzigtausenddreihundertachtundsechzigste")+  , (75025, "fünfundsiebzigtausendfünfundzwanzigste")+  , (121393, "einhunderteinundzwanzigtausenddreihundertdreiundneunzigste")+  , (196418, "einhundertsechsundneunzigtausendvierhundertachtzehnte")+  , (317811, "dreihundertsiebzehntausendachthundertelfte")+  , (514229, "fünfhundertvierzehntausendzweihundertneunundzwanzigste")+  , (832040, "achthundertzweiunddreißigtausendvierzigste")+  , (1346269, "eine million dreihundertsechsundvierzigtausendzweihundertneunundsechzigste")+  , (2178309, "zwei millionen einhundertachtundsiebzigtausenddreihundertneunte")+  , (3524578, "drei millionen fünfhundertvierundzwanzigtausendfünfhundertachtundsiebzigste")+  , (5702887, "fünf millionen siebenhundertzweitausendachthundertsiebenundachtzigste")+  , (9227465, "neun millionen zweihundertsiebenundzwanzigtausendvierhundertfünfundsechzigste")+  , (14930352, "vierzehn millionen neunhundertdreißigtausenddreihundertzweiundfünfzigste")+  , (24157817, "vierundzwanzig millionen einhundertsiebenundfünfzigtausendachthundertsiebzehnte")+  , (39088169, "neununddreißig millionen achtundachtzigtausendeinhundertneunundsechzigste")+  , (63245986, "dreiundsechzig millionen zweihundertfünfundvierzigtausendneunhundertsechsundachtzigste")+  , (102334155, "einhundertzwei millionen dreihundertvierunddreißigtausendeinhundertfünfundfünfzigste")+  , (165580141, "einhundertfünfundsechzig millionen fünfhundertachtzigtausendeinhunderteinundvierzigste")+  , (267914296, "zweihundertsiebenundsechzig millionen neunhundertvierzehntausendzweihundertsechsundneunzigste")+  , (433494437, "vierhundertdreiunddreißig millionen vierhundertvierundneunzigtausendvierhundertsiebenunddreißigste")+  , (701408733, "siebenhunderteins millionen vierhundertachttausendsiebenhundertdreiunddreißigste")+  , (1134903170, "eine milliard einhundertvierunddreißig millionen neunhundertdreitausendeinhundertsiebzigste")+  , (1836311903, "eine milliard achthundertsechsunddreißig millionen dreihundertelftausendneunhundertdritte")+  , (2971215073, "zwei milliarden neunhunderteinundsiebzig millionen zweihundertfünfzehntausenddreiundsiebzigste")+  , (4807526976, "vier milliarden achthundertsieben millionen fünfhundertsechsundzwanzigtausendneunhundertsechsundsiebzigste")+  , (7778742049, "sieben milliarden siebenhundertachtundsiebzig millionen siebenhundertzweiundvierzigtausendneunundvierzigste")+  , (12586269025, "zwölf milliarden fünfhundertsechsundachtzig millionen zweihundertneunundsechzigtausendfünfundzwanzigste")+  , (20365011074, "zwanzig milliarden dreihundertfünfundsechzig millionen elftausendvierundsiebzigste")+  , (32951280099, "zweiunddreißig milliarden neunhunderteinundfünfzig millionen zweihundertachtzigtausendneunundneunzigste")+  , (53316291173, "dreiundfünfzig milliarden dreihundertsechzehn millionen zweihunderteinundneunzigtausendeinhundertdreiundsiebzigste")+  , (86267571272, "sechsundachtzig milliarden zweihundertsiebenundsechzig millionen fünfhunderteinundsiebzigtausendzweihundertzweiundsiebzigste")+  , (139583862445, "einhundertneununddreißig milliarden fünfhundertdreiundachtzig millionen achthundertzweiundsechzigtausendvierhundertfünfundvierzigste")+  , (225851433717, "zweihundertfünfundzwanzig milliarden achthunderteinundfünfzig millionen vierhundertdreiunddreißigtausendsiebenhundertsiebzehnte")+  , (365435296162, "dreihundertfünfundsechzig milliarden vierhundertfünfunddreißig millionen zweihundertsechsundneunzigtausendeinhundertzweiundsechzigste")+  , (591286729879, "fünfhunderteinundneunzig milliarden zweihundertsechsundachtzig millionen siebenhundertneunundzwanzigtausendachthundertneunundsiebzigste")+  , (956722026041, "neunhundertsechsundfünfzig milliarden siebenhundertzweiundzwanzig millionen sechsundzwanzigtausendeinundvierzigste")+  , (1548008755920, "eine billion fünfhundertachtundvierzig milliarden acht millionen siebenhundertfünfundfünfzigtausendneunhundertzwanzigste")+  , (2504730781961, "zwei billionen fünfhundertvier milliarden siebenhundertdreißig millionen siebenhunderteinundachtzigtausendneunhunderteinundsechzigste")+  , (4052739537881, "vier billionen zweiundfünfzig milliarden siebenhundertneununddreißig millionen fünfhundertsiebenunddreißigtausendachthunderteinundachtzigste")+  , (6557470319842, "sechs billionen fünfhundertsiebenundfünfzig milliarden vierhundertsiebzig millionen dreihundertneunzehntausendachthundertzweiundvierzigste")+  , (10610209857723, "zehn billionen sechshundertzehn milliarden zweihundertneun millionen achthundertsiebenundfünfzigtausendsiebenhundertdreiundzwanzigste")+  , (17167680177565, "siebzehn billionen einhundertsiebenundsechzig milliarden sechshundertachtzig millionen einhundertsiebenundsiebzigtausendfünfhundertfünfundsechzigste")+  , (27777890035288, "siebenundzwanzig billionen siebenhundertsiebenundsiebzig milliarden achthundertneunzig millionen fünfunddreißigtausendzweihundertachtundachtzigste")+  , (44945570212853, "vierundvierzig billionen neunhundertfünfundvierzig milliarden fünfhundertsiebzig millionen zweihundertzwölftausendachthundertdreiundfünfzigste")+  , (72723460248141, "zweiundsiebzig billionen siebenhundertdreiundzwanzig milliarden vierhundertsechzig millionen zweihundertachtundvierzigtausendeinhunderteinundvierzigste")+  , (117669030460994, "einhundertsiebzehn billionen sechshundertneunundsechzig milliarden dreißig millionen vierhundertsechzigtausendneunhundertvierundneunzigste")+  , (190392490709135, "einhundertneunzig billionen dreihundertzweiundneunzig milliarden vierhundertneunzig millionen siebenhundertneuntausendeinhundertfünfunddreißigste")+  , (308061521170129, "dreihundertacht billionen einundsechzig milliarden fünfhunderteinundzwanzig millionen einhundertsiebzigtausendeinhundertneunundzwanzigste")+  , (498454011879264, "vierhundertachtundneunzig billionen vierhundertvierundfünfzig milliarden elf millionen achthundertneunundsiebzigtausendzweihundertvierundsechzigste")+  , (806515533049393, "achthundertsechs billionen fünfhundertfünfzehn milliarden fünfhundertdreiunddreißig millionen neunundvierzigtausenddreihundertdreiundneunzigste")+  , (1304969544928657, "eine billiard dreihundertvier billionen neunhundertneunundsechzig milliarden fünfhundertvierundvierzig millionen neunhundertachtundzwanzigtausendsechshundertsiebenundfünfzigste")+  , (2111485077978050, "zwei billiarden einhundertelf billionen vierhundertfünfundachtzig milliarden siebenundsiebzig millionen neunhundertachtundsiebzigtausendfünfzigste")+  , (3416454622906707, "drei billiarden vierhundertsechzehn billionen vierhundertvierundfünfzig milliarden sechshundertzweiundzwanzig millionen neunhundertsechstausendsiebenhundertsiebte")+  , (5527939700884757, "fünf billiarden fünfhundertsiebenundzwanzig billionen neunhundertneununddreißig milliarden siebenhundert millionen achthundertvierundachtzigtausendsiebenhundertsiebenundfünfzigste")+  , (8944394323791464, "acht billiarden neunhundertvierundvierzig billionen dreihundertvierundneunzig milliarden dreihundertdreiundzwanzig millionen siebenhunderteinundneunzigtausendvierhundertvierundsechzigste")+  , (14472334024676221, "vierzehn billiarden vierhundertzweiundsiebzig billionen dreihundertvierunddreißig milliarden vierundzwanzig millionen sechshundertsechsundsiebzigtausendzweihunderteinundzwanzigste")+  , (23416728348467685, "dreiundzwanzig billiarden vierhundertsechzehn billionen siebenhundertachtundzwanzig milliarden dreihundertachtundvierzig millionen vierhundertsiebenundsechzigtausendsechshundertfünfundachtzigste")+  , (37889062373143906, "siebenunddreißig billiarden achthundertneunundachtzig billionen zweiundsechzig milliarden dreihundertdreiundsiebzig millionen einhundertdreiundvierzigtausendneunhundertsechste")+  , (61305790721611591, "einundsechzig billiarden dreihundertfünf billionen siebenhundertneunzig milliarden siebenhunderteinundzwanzig millionen sechshundertelftausendfünfhunderteinundneunzigste")+  , (99194853094755497, "neunundneunzig billiarden einhundertvierundneunzig billionen achthundertdreiundfünfzig milliarden vierundneunzig millionen siebenhundertfünfundfünfzigtausendvierhundertsiebenundneunzigste")+  , (160500643816367088, "einhundertsechzig billiarden fünfhundert billionen sechshundertdreiundvierzig milliarden achthundertsechzehn millionen dreihundertsiebenundsechzigtausendachtundachtzigste")+  , (259695496911122585, "zweihundertneunundfünfzig billiarden sechshundertfünfundneunzig billionen vierhundertsechsundneunzig milliarden neunhundertelf millionen einhundertzweiundzwanzigtausendfünfhundertfünfundachtzigste")+  , (420196140727489673, "vierhundertzwanzig billiarden einhundertsechsundneunzig billionen einhundertvierzig milliarden siebenhundertsiebenundzwanzig millionen vierhundertneunundachtzigtausendsechshundertdreiundsiebzigste")+  , (679891637638612258, "sechshundertneunundsiebzig billiarden achthunderteinundneunzig billionen sechshundertsiebenunddreißig milliarden sechshundertachtunddreißig millionen sechshundertzwölftausendzweihundertachtundfünfzigste")+  , (1100087778366101931, "eine trillion einhundert billiarden siebenundachtzig billionen siebenhundertachtundsiebzig milliarden dreihundertsechsundsechzig millionen einhunderteinstausendneunhunderteinunddreißigste")+  , (1779979416004714189, "eine trillion siebenhundertneunundsiebzig billiarden neunhundertneunundsiebzig billionen vierhundertsechzehn milliarden vier millionen siebenhundertvierzehntausendeinhundertneunundachtzigste")+  , (2880067194370816120, "zwei trillionen achthundertachtzig billiarden siebenundsechzig billionen einhundertvierundneunzig milliarden dreihundertsiebzig millionen achthundertsechzehntausendeinhundertzwanzigste")+  , (4660046610375530309, "vier trillionen sechshundertsechzig billiarden sechsundvierzig billionen sechshundertzehn milliarden dreihundertfünfundsiebzig millionen fünfhundertdreißigtausenddreihundertneunte")+  , (7540113804746346429, "sieben trillionen fünfhundertvierzig billiarden einhundertdreizehn billionen achthundertvier milliarden siebenhundertsechsundvierzig millionen dreihundertsechsundvierzigtausendvierhundertneunundzwanzigste")+  , (12200160415121876738, "zwölf trillionen zweihundert billiarden einhundertsechzig billionen vierhundertfünfzehn milliarden einhunderteinundzwanzig millionen achthundertsechsundsiebzigtausendsiebenhundertachtunddreißigste")+  , (19740274219868223167, "neunzehn trillionen siebenhundertvierzig billiarden zweihundertvierundsiebzig billionen zweihundertneunzehn milliarden achthundertachtundsechzig millionen zweihundertdreiundzwanzigtausendeinhundertsiebenundsechzigste")+  , (31940434634990099905, "einunddreißig trillionen neunhundertvierzig billiarden vierhundertvierunddreißig billionen sechshundertvierunddreißig milliarden neunhundertneunzig millionen neunundneunzigtausendneunhundertfünfte")+  , (51680708854858323072, "einundfünfzig trillionen sechshundertachtzig billiarden siebenhundertacht billionen achthundertvierundfünfzig milliarden achthundertachtundfünfzig millionen dreihundertdreiundzwanzigtausendzweiundsiebzigste")+  , (83621143489848422977, "dreiundachtzig trillionen sechshunderteinundzwanzig billiarden einhundertdreiundvierzig billionen vierhundertneunundachtzig milliarden achthundertachtundvierzig millionen vierhundertzweiundzwanzigtausendneunhundertsiebenundsiebzigste")+  , (135301852344706746049, "einhundertfünfunddreißig trillionen dreihunderteins billiarden achthundertzweiundfünfzig billionen dreihundertvierundvierzig milliarden siebenhundertsechs millionen siebenhundertsechsundvierzigtausendneunundvierzigste")+  , (218922995834555169026, "zweihundertachtzehn trillionen neunhundertzweiundzwanzig billiarden neunhundertfünfundneunzig billionen achthundertvierunddreißig milliarden fünfhundertfünfundfünfzig millionen einhundertneunundsechzigtausendsechsundzwanzigste")+  , (354224848179261915075, "dreihundertvierundfünfzig trillionen zweihundertvierundzwanzig billiarden achthundertachtundvierzig billionen einhundertneunundsiebzig milliarden zweihunderteinundsechzig millionen neunhundertfünfzehntausendfünfundsiebzigste")+  , (573147844013817084101, "fünfhundertdreiundsiebzig trillionen einhundertsiebenundvierzig billiarden achthundertvierundvierzig billionen dreizehn milliarden achthundertsiebzehn millionen vierundachtzigtausendeinhunderterste")+  , (927372692193078999176, "neunhundertsiebenundzwanzig trillionen dreihundertzweiundsiebzig billiarden sechshundertzweiundneunzig billionen einhundertdreiundneunzig milliarden achtundsiebzig millionen neunhundertneunundneunzigtausendeinhundertsechsundsiebzigste")+  , (1500520536206896083277, "eine trilliard fünfhundert trillionen fünfhundertzwanzig billiarden fünfhundertsechsunddreißig billionen zweihundertsechs milliarden achthundertsechsundneunzig millionen dreiundachtzigtausendzweihundertsiebenundsiebzigste")+  , (2427893228399975082453, "zwei trilliarden vierhundertsiebenundzwanzig trillionen achthundertdreiundneunzig billiarden zweihundertachtundzwanzig billionen dreihundertneunundneunzig milliarden neunhundertfünfundsiebzig millionen zweiundachtzigtausendvierhundertdreiundfünfzigste")+  , (3928413764606871165730, "drei trilliarden neunhundertachtundzwanzig trillionen vierhundertdreizehn billiarden siebenhundertvierundsechzig billionen sechshundertsechs milliarden achthunderteinundsiebzig millionen einhundertfünfundsechzigtausendsiebenhundertdreißigste")+  , (6356306993006846248183, "sechs trilliarden dreihundertsechsundfünfzig trillionen dreihundertsechs billiarden neunhundertdreiundneunzig billionen sechs milliarden achthundertsechsundvierzig millionen zweihundertachtundvierzigtausendeinhundertdreiundachtzigste")+  , (10284720757613717413913, "zehn trilliarden zweihundertvierundachtzig trillionen siebenhundertzwanzig billiarden siebenhundertsiebenundfünfzig billionen sechshundertdreizehn milliarden siebenhundertsiebzehn millionen vierhundertdreizehntausendneunhundertdreizehnte")+  , (16641027750620563662096, "sechzehn trilliarden sechshunderteinundvierzig trillionen siebenundzwanzig billiarden siebenhundertfünfzig billionen sechshundertzwanzig milliarden fünfhundertdreiundsechzig millionen sechshundertzweiundsechzigtausendsechsundneunzigste")+  , (26925748508234281076009, "sechsundzwanzig trilliarden neunhundertfünfundzwanzig trillionen siebenhundertachtundvierzig billiarden fünfhundertacht billionen zweihundertvierunddreißig milliarden zweihunderteinundachtzig millionen sechsundsiebzigtausendneunte")+  , (43566776258854844738105, "dreiundvierzig trilliarden fünfhundertsechsundsechzig trillionen siebenhundertsechsundsiebzig billiarden zweihundertachtundfünfzig billionen achthundertvierundfünfzig milliarden achthundertvierundvierzig millionen siebenhundertachtunddreißigtausendeinhundertfünfte")+  , (70492524767089125814114, "siebzig trilliarden vierhundertzweiundneunzig trillionen fünfhundertvierundzwanzig billiarden siebenhundertsiebenundsechzig billionen neunundachtzig milliarden einhundertfünfundzwanzig millionen achthundertvierzehntausendeinhundertvierzehnte")+  , (114059301025943970552219, "einhundertvierzehn trilliarden neunundfünfzig trillionen dreihunderteins billiarden fünfundzwanzig billionen neunhundertdreiundvierzig milliarden neunhundertsiebzig millionen fünfhundertzweiundfünfzigtausendzweihundertneunzehnte")+  , (1000, "tausendste")+  , (10000, "zehntausendste")+  , (100000, "einhunderttausendste")+  , (1000000, "millionste")+  , (10000000, "zehnmillionste")+  , (100000000, "einhundertmillionste")+  , (1000000000, "eine milliardte")+  , (10000000000, "zehnmilliardste")+  , (100000000000, "einhundertmilliardste")+  , (1000000000000, "billionste")+  , (10000000000000, "zehnbillionste")+  , (100000000000000, "einhundertbillionste")+  , (1000000000000000, "eine billiardte")+  , (10000000000000000, "zehnbilliardste")+  , (100000000000000000, "einhundertbilliardste")+  , (1000000000000000000, "trillionste")+  , (10000000000000000000, "zehntrillionste")+  , (100000000000000000000, "einhunderttrillionste")+  , (1000000000000000000000, "eine trilliardte")+  , (10000000000000000000000, "zehntrilliardste")+  , (100000000000000000000000, "einhunderttrilliardste")+  , (1000000000000000000000000, "quadrillionste")+  ]