27 lines
1.2 KiB
APL
27 lines
1.2 KiB
APL
magic←{
|
|
t20←'one' 'two' 'three' 'four' 'five' 'six' 'seven' 'eight' 'nine'
|
|
t20←t20,'ten' 'eleven' 'twelve' 'thirteen' 'fourteen' 'fifteen' 'sixteen'
|
|
t20←t20,'seventeen' 'eighteen' 'nineteen'
|
|
tens←'twenty' 'thirty' 'forty' 'fifty' 'sixty' 'seventy' 'eighty' 'ninety'
|
|
spell←{
|
|
⍵=0:'zero'
|
|
{
|
|
⍵=0:''
|
|
⍵<20:⍵⊃t20
|
|
⍵<100:∊tens[(⌊⍵÷10)-1],((0≠≢r)/'-'),r←∇10|⍵
|
|
⍵<1000:(∇⌊⍵÷100),' hundred',((0≠≢r)/' '),r←∇100|⍵
|
|
⍵<1e6:(∇⌊⍵÷1000),' thousand',((0≠≢r)/' '),r←∇1000|⍵
|
|
⍵<1e9:(∇⌊⍵÷1e6),' million',((0≠≢r)/' '),r←∇1e6|⍵
|
|
⍵<1e12:(∇⌊⍵÷1e9),' billion',((0≠≢r)/' '),r←∇1e9|⍵
|
|
⍵<1e15:(∇⌊⍵÷1e12),' trillion',((0≠≢r)/' '),r←∇1e12|⍵
|
|
⍵<1e18:(∇⌊⍵÷1e15),' quadrillion',((0≠≢r)/' '),r←∇1e15|⍵
|
|
⍵<1e21:(∇⌊⍵÷1e18),' quintillion',((0≠≢r)/' '),r←∇1e18|⍵
|
|
'Overflow' ⎕SIGNAL 11
|
|
}⍵
|
|
}
|
|
1(819⌶)@1⊢{
|
|
n←spell ⍵
|
|
⍵=4:n,' is magic.'
|
|
n,' is ',(spell ≢n),', ',∇≢n
|
|
}⍵
|
|
}
|