summaryrefslogtreecommitdiff
path: root/problem89.ijs
blob: 1c462345cf9b831fdd97672401ee5f845c327d07 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
romans =: 'IVXLCDM'
decimals =: 1 5 10 50 100 500 1000
romanToDecimal =: {{ +/ns*1,~_1+2*0<:2-/\ns=.decimals{~romans i.y }}
decimalToRoman =: {{ ;groupToRoman each (0&~:#]) ds*|.10^i.#ds=.(10&#.^:_1) y }}
groupToRoman =: {{
	closest =. {./:|y-decimals
	diff =. y - closest{decimals
	if. (diff<0) *. -.(|diff) e. decimals do.
		closest =. closest - 1
		diff =. y - closest{decimals
	end.
	ch =. closest{romans
	diff =. y - closest{decimals
	sub =. {{ x,~groupToRoman y }}
	keep =. [
	add =. {{ x,groupToRoman y }}
	ch sub`keep`add@.(>:*diff) |diff
}}
saves =: #-#&decimalToRoman&romanToDecimal
problem89 =: +/;saves each 'b' freads 'p089_roman.txt'