From: Alexander Ilin Date: Wed, 15 Jun 2022 12:55:52 +0000 (+0200) Subject: math.text.english: expand the supported number range X-Git-Tag: 0.99~1416 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=44c7211197f3f6ca1c48b2b11e6c2e048c311958 math.text.english: expand the supported number range --- diff --git a/extra/math/text/english/english-tests.factor b/extra/math/text/english/english-tests.factor index 4a455abd43..4729d1588d 100644 --- a/extra/math/text/english/english-tests.factor +++ b/extra/math/text/english/english-tests.factor @@ -11,6 +11,7 @@ sequences tools.test ; { "one million, one thousand, one hundred and one" } [ 1001101 number>text ] unit-test { "one million, one hundred and eleven thousand, one hundred and eleven" } [ 1111111 number>text ] unit-test { "one duotrigintillion" } [ 10 99 ^ number>text ] unit-test +{ "one noveducentillion" } [ 630 10^ number>text ] unit-test { "negative one hundred and twenty-three" } [ -123 number>text ] unit-test diff --git a/extra/math/text/english/english.factor b/extra/math/text/english/english.factor index 662e46ef75..226ced0e05 100644 --- a/extra/math/text/english/english.factor +++ b/extra/math/text/english/english.factor @@ -1,4 +1,4 @@ -! Copyright (c) 2007, 2008, 2018 Aaron Schaefer. +! Copyright (c) 2007, 2008, 2018 Aaron Schaefer, 2022 Alexander Ilin. ! See http://factorcode.org/license.txt for BSD license. USING: combinators combinators.short-circuit kernel math math.order math.parser math.text.utils namespaces sequences @@ -21,18 +21,48 @@ IN: math.text.english "seventy" "eighty" "ninety" } nth ; -: scale-numbers ( n -- str ) ! up to 10^99 +: scale-numbers ( n -- str ) ! up to 10^630 { - f "thousand" "million" "billion" "trillion" "quadrillion" - "quintillion" "sextillion" "septillion" "octillion" - "nonillion" "decillion" "undecillion" "duodecillion" - "tredecillion" "quattuordecillion" "quindecillion" - "sexdecillion" "septendecillion" "octodecillion" "novemdecillion" - "vigintillion" "unvigintillion" "duovigintillion" "trevigintillion" - "quattuorvigintillion" "quinvigintillion" "sexvigintillion" - "septvigintillion" "octovigintillion" "novemvigintillion" - "trigintillion" "untrigintillion" "duotrigintillion" - } nth ; + { [ dup 41 < ] [ + { + f "thousand" "million" "billion" "trillion" "quadrillion" + "quintillion" "sextillion" "septillion" "octillion" + "nonillion" "decillion" "undecillion" "duodecillion" + "tredecillion" "quattuordecillion" "quindecillion" + "sexdecillion" "septendecillion" "octodecillion" + "novemdecillion" "vigintillion" "unvigintillion" + "duovigintillion" "trevigintillion" "quattuorvigintillion" + "quinvigintillion" "sexvigintillion" "septvigintillion" + "octovigintillion" "novemvigintillion" "trigintillion" + "untrigintillion" "duotrigintillion" "trestrigintillion" + "quattuortrigintillion" "quintrigintillion" "sestrigintillion" + "septentrigintillion" "octotrigintillion" "noventrigintillion" + } nth + ] } + { [ dup 311 < ] [ + 41 - 10 /mod [ + { + "quadragintillion" "quinquagintillion" "sexagintillion" + "septuagintillion" "octogintillion" "nonagintillion" + "centillion" "decicentillion" "viginticentillion" + "trigintacentillion" "quadragintacentillion" + "quinquagintacentillion" "sexagintacentillion" + "septuagintacentillion" "octogintacentillion" + "nonagintacentillion" "ducentillion" + } nth + ! Next 10^300 increments after ducentillion, which is 10^603: + ! "trecentillion" "quadringentillion" + ! "quingentillion" "sescentillion" + ! "septingentillion" "octingentillion" + ! "nongentillion" "millinillion" = 10^3003 + ] [ + { + f "un" "duo" "tre" "quattuor" + "quinqua" "se" "septe" "octo" "nove" + } nth + ] bi* swap "" append-as + ] } + } cond ; SYMBOL: and-needed? : set-conjunction ( seq -- )