mirror of
https://github.com/urbit/shrub.git
synced 2024-12-30 15:44:03 +03:00
b3901ab42f
git-subtree-dir: pkg/arvo git-subtree-mainline:9c8f40bf6c
git-subtree-split:c20e2a185f
151 lines
4.5 KiB
Plaintext
151 lines
4.5 KiB
Plaintext
:: |number-to-words: conversion of unsigned integers to a tape
|
|
::
|
|
:: returns a unit because not all numbers can always be represented
|
|
::
|
|
|%
|
|
++ numbers
|
|
|%
|
|
++ ten 10
|
|
++ one-hundred 100
|
|
++ one-thousand (pow 10 3)
|
|
++ one-million (pow 10 6)
|
|
++ one-billion (pow 10 9)
|
|
++ one-trillion (pow 10 12)
|
|
++ one-quadrillion (pow 10 15)
|
|
++ one-quintillion (pow 10 18)
|
|
++ one-sextillion (pow 10 21)
|
|
++ one-septillion (pow 10 24)
|
|
++ one-octillion (pow 10 27)
|
|
++ one-nonillion (pow 10 30)
|
|
++ one-decillion (pow 10 33)
|
|
++ one-undecillion (pow 10 36)
|
|
++ one-duodecillion (pow 10 39)
|
|
++ one-tredecillion (pow 10 42)
|
|
++ one-quattuordecillion (pow 10 45)
|
|
++ one-quindecillion (pow 10 48)
|
|
++ one-sexdecillion (pow 10 51)
|
|
++ one-septendecillion (pow 10 54)
|
|
++ one-octodecillion (pow 10 57)
|
|
++ one-novemdecillion (pow 10 60)
|
|
++ one-vigintillion (pow 10 63)
|
|
++ max (pow 10 66)
|
|
--
|
|
++ eng-us
|
|
|%
|
|
++ to-words
|
|
|= num=@u
|
|
^- (unit tape)
|
|
=+ numbers
|
|
?: (gte num max)
|
|
~
|
|
:- ~
|
|
|-
|
|
^- tape
|
|
:: 0-19
|
|
?: =(num 0) "zero"
|
|
?: =(num 1) "one"
|
|
?: =(num 2) "two"
|
|
?: =(num 3) "three"
|
|
?: =(num 4) "four"
|
|
?: =(num 5) "five"
|
|
?: =(num 6) "six"
|
|
?: =(num 7) "seven"
|
|
?: =(num 8) "eight"
|
|
?: =(num 9) "nine"
|
|
?: =(num 10) "ten"
|
|
?: =(num 11) "eleven"
|
|
?: =(num 12) "twelve"
|
|
?: =(num 13) "thirteen"
|
|
?: =(num 14) "fourteen"
|
|
?: =(num 15) "fifteen"
|
|
?: =(num 16) "sixteen"
|
|
?: =(num 17) "seventeen"
|
|
?: =(num 18) "eighteen"
|
|
?: =(num 19) "nineteen"
|
|
:: 20-99
|
|
::
|
|
:: tpl: tens place
|
|
:: rem: ones place
|
|
:: sfx: suffix
|
|
::
|
|
=/ tpl (div num ten)
|
|
=/ rem (mod num ten)
|
|
=/ sfx
|
|
?: |(=(rem 0) (gte tpl 10))
|
|
~
|
|
['-' $(num rem)]
|
|
?: =(tpl 2) (weld "twenty" sfx)
|
|
?: =(tpl 3) (weld "thirty" sfx)
|
|
?: =(tpl 4) (weld "forty" sfx)
|
|
?: =(tpl 5) (weld "fifty" sfx)
|
|
?: =(tpl 6) (weld "sixty" sfx)
|
|
?: =(tpl 7) (weld "seventy" sfx)
|
|
?: =(tpl 8) (weld "eighty" sfx)
|
|
?: =(tpl 9) (weld "ninety" sfx)
|
|
:: 100-max
|
|
::
|
|
:: num-break: repeated pattern from 100 on
|
|
::
|
|
=/ num-break
|
|
::
|
|
:: min: minimum to qualify for this break
|
|
:: str: english word for this break
|
|
::
|
|
|= [min=@u str=tape]
|
|
=/ rem (mod num min)
|
|
;: weld
|
|
^$(num (div num min))
|
|
[' ' str]
|
|
?: =(rem 0)
|
|
~
|
|
%+ weld
|
|
?:((lth rem one-hundred) " and " ", ")
|
|
^$(num rem)
|
|
==
|
|
::
|
|
?: (lth num one-thousand)
|
|
(num-break one-hundred "hundred")
|
|
?: (lth num one-million)
|
|
(num-break one-thousand "thousand")
|
|
?: (lth num one-billion)
|
|
(num-break one-million "million")
|
|
?: (lth num one-trillion)
|
|
(num-break one-billion "billion")
|
|
?: (lth num one-quadrillion)
|
|
(num-break one-trillion "trillion")
|
|
?: (lth num one-quintillion)
|
|
(num-break one-quadrillion "quadrillion")
|
|
?: (lth num one-sextillion)
|
|
(num-break one-quintillion "quintillion")
|
|
?: (lth num one-septillion)
|
|
(num-break one-sextillion "sextillion")
|
|
?: (lth num one-octillion)
|
|
(num-break one-septillion "septillion")
|
|
?: (lth num one-nonillion)
|
|
(num-break one-octillion "octillion")
|
|
?: (lth num one-decillion)
|
|
(num-break one-nonillion "nonillion")
|
|
?: (lth num one-undecillion)
|
|
(num-break one-decillion "decillion")
|
|
?: (lth num one-duodecillion)
|
|
(num-break one-undecillion "undecillion")
|
|
?: (lth num one-tredecillion)
|
|
(num-break one-duodecillion "duodecillion")
|
|
?: (lth num one-quattuordecillion)
|
|
(num-break one-tredecillion "tredecillion")
|
|
?: (lth num one-quindecillion)
|
|
(num-break one-quattuordecillion "quattuordecillion")
|
|
?: (lth num one-sexdecillion)
|
|
(num-break one-quindecillion "quindecillion")
|
|
?: (lth num one-septendecillion)
|
|
(num-break one-sexdecillion "sexdecillion")
|
|
?: (lth num one-octodecillion)
|
|
(num-break one-septendecillion "septendecillion")
|
|
?: (lth num one-novemdecillion)
|
|
(num-break one-octodecillion "octodecillion")
|
|
?: (lth num one-vigintillion)
|
|
(num-break one-novemdecillion "novemdecillion")
|
|
(num-break one-vigintillion "vigintillion")
|
|
--
|
|
--
|