RosettaCodeData/Task/Number-names/Quackery/number-names.quackery
2023-12-16 21:33:55 -08:00

85 lines
2.3 KiB
Text

[ [ table
$ "zero" $ "one" $ "two"
$ "three" $ "four" $ "five"
$ "six" $ "seven" $ "eight"
$ "nine" $ "ten" $ "eleven"
$ "twelve" $ "thirteen"
$ "fourteen" $ "fifteen"
$ "sixteen" $ "seventeen"
$ "eighteen" $ "nineteen" ] do ] is units ( n --> $ )
[ [ table
$ "nonety" $ "tenty" $ "twenty"
$ "thirty" $ "fourty" $ "fifty"
$ "sixty" $ "seventy" $ "eighty"
$ "ninety" ] do ] is tens ( n --> $ )
[ $ "" swap
dup 99 > if
[ 100 /mod swap units
$ " hundred" join
swap dip join
dup 0 = iff drop ]done[ ]
over size 0 > if
[ dip [ $ " and " join ] ]
dup 19 > if
[ 10 /mod swap tens
swap dip join
dup 0 = iff drop ]done[ ]
over size 0 > if
[ over -1 peek space != if
[ dip [ space join ] ] ]
units join ] is triplet ( n --> $ )
[ $ "" swap
dup 999999999999999 > if
[ 1000000000000000 /mod swap triplet
$ " quadrillion" join
swap dip join
dup 0 = iff drop ]done[ ]
dup 999999999999 > if
[ over size 0 > if
[ dip [ $ ", " join ] ]
1000000000000 /mod swap triplet
$ " trillion" join
swap dip join
dup 0 = iff drop ]done[ ]
dup 999999999 > if
[ over size 0 > if
[ dip [ $ ", " join ] ]
1000000000 /mod swap triplet
$ " billion" join
swap dip join
dup 0 = iff drop ]done[ ]
dup 999999 > if
[ over size 0 > if
[ dip [ $ ", " join ] ]
1000000 /mod swap triplet
$ " million" join
swap dip join
dup 0 = iff drop ]done[ ]
dup 999 > if
[ over size 0 > if
[ dip [ $ ", " join ] ]
1000 /mod swap triplet
$ " thousand" join
swap dip join
dup 0 = iff drop ]done[ ]
over size 0 > if
[ dip [ $ ", " join ] ]
triplet join
dup reverse witheach
[ char , = if
[ i split
behead drop
$ " and" swap
join join
conclude ] ] ] is name$ ( n --> $ )
10 times
[ 10 18 random
1+ ** random
dup echo
say " is:"
name$ nest$
60 wrap$ cr cr ]