RosettaCodeData/Task/Number-names/Zkl/number-names-1.zkl
2023-07-01 13:44:08 -04:00

22 lines
925 B
Text

var
ns =[1..20].chain([30..90,10]).walk(),
names=T("one","two","three","four","five","six","seven","eight","nine",
"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen",
"seventeen","eighteen","nineteen","twenty",
"thirty","forty","fifty","sixty","seventy","eighty","ninety"),
hs =T( 100, 1000, 1000000, 1000000000,1000000000000),
hnames=T("hundred","thousand","million","billion", "trillion");
fcn numberToString(n){ // n>0
fcn(n){
if(100<=n<0d100_000_0000_000){
idx,h,name,r := hs.filter1n('>(n))-1, hs[idx], hnames[idx], n%h;
String(self.fcn(n/h),name,
if(r==0) "" else if(0<r<100) " and " else ", ",
self.fcn(r));
}else if(0<n<=90){
idx,t,name,r := ns.filter1n('>(n))-1, ns[idx], names[idx], n-t;
String(name, if(0<r<10) "-" else " ", self.fcn(r));
}else ""
}(n).strip() // sometimes there is a trailing space
}