onesWords=: 'zero' ; 'one' ; 'two' ; 'three' ; 'four' ; 'five' ; 'six' ; 'seven' ; 'eight' ; 'nine' tensWords=: 'twenty' ; 'thirty' ; 'forty' ; 'fifty' ; 'sixty' ; 'seventy' ; 'eighty' ; 'ninety' teensWords=: 'ten' ; 'eleven' ; 'twelve' ; 'thirteen' ; 'fourteen' ; 'fifteen' ; 'sixteen' ; 'seventeen' ; 'eighteen' ; 'nineteen' hundredPart=: monad define if. y=0 do. '' else. (>y{onesWords), ' hundred ' end. ) tenPart=: dyad define if. x=0 do. >y{onesWords elseif. x=1 do. >y{teensWords elseif. (x>1)*.(y>0) do. (>(x-2){tensWords),'-',>y{onesWords elseif. y=0 do. >(x-2){tensWords end. ) num2text=: monad define thousands=. <.y%1000 y0=.y-1000*thousands hundreds=. <.y0%100 y1=.y0-100*hundreds tens=. <.y1%10 y2=.y1-10*tens ones=. <.y2 h =. hundredPart hundreds t =. tens tenPart ones if. thousands do. 'one thousand' elseif. (hundreds>0)*.y1>0 do. h, 'and ', t elseif. (hundreds>0)*.y1=0 do. h end. ) letterCount=: +/@(2&=)@(' -'&i.)@num2text