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'