Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
60
Task/Number-names/Arturo/number-names.arturo
Normal file
60
Task/Number-names/Arturo/number-names.arturo
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
small: [
|
||||
"zero" "one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten"
|
||||
"eleven" "twelve" "thirteen" "fourteen" "fifteen" "sixteen" "seventeen"
|
||||
"eighteen" "nineteen"
|
||||
]
|
||||
|
||||
tens: [
|
||||
"wrong" "wrong" "twenty" "thirty" "forty"
|
||||
"fifty" "sixty" "seventy" "eighty" "ninety"
|
||||
]
|
||||
|
||||
prefixes: ["m" "b" "tr" "quadr" "quint" "sext" "sept" "oct" "non" "dec"]
|
||||
big: ["" "thousand"] ++ map prefixes 'p -> p ++ "illion"
|
||||
|
||||
wordify: function [number :integer][
|
||||
if number < 0 ->
|
||||
return "negative " ++ wordify neg number
|
||||
|
||||
if number < 20 ->
|
||||
return small\[number]
|
||||
|
||||
if number < 100 [
|
||||
[d m]: divmod number 10
|
||||
return tens\[d] ++ (zero? m)? -> "" -> "-" ++ wordify m
|
||||
]
|
||||
|
||||
if number < 1000 [
|
||||
[d m]: divmod number 100
|
||||
return (~{|small\[d]| hundred}) ++ (zero? m)? -> "" -> " and " ++ wordify m
|
||||
]
|
||||
|
||||
chunks: []
|
||||
n: number
|
||||
while [not? zero? n][
|
||||
[n remainder]: divmod n 1000
|
||||
'chunks ++ remainder
|
||||
]
|
||||
|
||||
if (size chunks) > size big ->
|
||||
return "integer value too large"
|
||||
|
||||
words: []
|
||||
loop.with:'i chunks 'ch [
|
||||
scale: big\[i]
|
||||
unless zero? ch [
|
||||
chunkStr: wordify ch
|
||||
'words ++ (empty? scale)? -> chunkStr
|
||||
-> ~"|chunkStr| |scale|"
|
||||
]
|
||||
]
|
||||
|
||||
return join.with:", " reverse words
|
||||
]
|
||||
|
||||
loop @[
|
||||
0,1,4,5,10,15,18,25,83,140,300,678,1024,
|
||||
45039,123456,91740274651983,
|
||||
neg 83125311200, neg 12, neg 7
|
||||
] 'num ->
|
||||
print [pad to :string num 15, join.with: "\n"++ (repeat " " 16) split.lines wordwrap.at: 40 wordify num
|
||||
62
Task/Number-names/M2000-Interpreter/number-names.m2000
Normal file
62
Task/Number-names/M2000-Interpreter/number-names.m2000
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
module Number_names {
|
||||
numname=lambda ->{
|
||||
flush
|
||||
data "", "one", "two", "three", "four"
|
||||
data "five", "six", "seven", "eight", "nine", "ten"
|
||||
data "eleven", "twelve", "thirteen", "fourteen", "fifteen"
|
||||
data "sixteen", "seventeen","eighteen", "nineteen"
|
||||
dim lows(), tens(), lev()
|
||||
lows()=array([])
|
||||
data "", "", "twenty", "thirty", "forty","fifty", "sixty"
|
||||
data "seventy", "eighty", "ninety"
|
||||
tens()=array([])
|
||||
lev()=("", "thousand", "million", "billion")
|
||||
numname_int=lambda lows(), tens(), lev() (n as long) -> {
|
||||
if n=0 then ="zero": exit
|
||||
long tr[0], t=-1, i
|
||||
string ret, prefix
|
||||
if n < 0 then prefix= "negative ": n-! else prefix=""
|
||||
while n>0
|
||||
t++
|
||||
tr[t]= n mod 1000
|
||||
n|div 1000
|
||||
end while
|
||||
for i=t to 0
|
||||
tripn=""
|
||||
if tr[i]=0 then continue for
|
||||
lt= tr[i] mod 100
|
||||
h= tr[i] div 100
|
||||
if lt<20 then
|
||||
tripn+=lows(lt)
|
||||
else
|
||||
tripn=tens(lt div 10)+if$(lt mod 10 >0 ->"-"+lows(lt mod 10),"")
|
||||
end if
|
||||
if h>0 then
|
||||
if lt>0 then tripn = " and " + tripn
|
||||
tripn = lows(h)+" hundred" + tripn
|
||||
end if
|
||||
if i=0 and t>0 and h = 0 then tripn = "and " + tripn
|
||||
ret += tripn+" "+lev(i)+" "
|
||||
next i
|
||||
=prefix+trim$(ret)
|
||||
}
|
||||
=lambda numname_int (n as currency) ->{
|
||||
if int(n)=n then =numname_int(n): exit
|
||||
string prefix= numname_int(int(abs(n)))+" point "
|
||||
string decdig = str$(abs(n)-int(abs(n))), ret
|
||||
if n<0 then prefix="negative "+prefix
|
||||
ret=prefix
|
||||
for i = 3 to len(decdig)
|
||||
ret+=lambda(val(mid$(decdig, i, 1)))+" "
|
||||
next i
|
||||
=trim$(ret)
|
||||
}
|
||||
}() 'execute here so we get the inner lambda
|
||||
report numname(0)
|
||||
report numname(1.0)
|
||||
report numname(-1.7)
|
||||
report numname(910000)
|
||||
report numname(987654)
|
||||
report numname(100000017)
|
||||
}
|
||||
Number_names
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
[ [ table
|
||||
$ "nonety" $ "tenty" $ "twenty"
|
||||
$ "thirty" $ "fourty" $ "fifty"
|
||||
$ "thirty" $ "forty" $ "fifty"
|
||||
$ "sixty" $ "seventy" $ "eighty"
|
||||
$ "ninety" ] do ] is tens ( n --> $ )
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue