summaryrefslogtreecommitdiff
path: root/problem17.ijs
blob: 78d7986a692303d01313381b495528d36834087c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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