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'
|