Haskell, 26047 (= 224+25823) ------- r 0="VVX" r n=s(zip[1000,500,100,50,10,5]"MDCLXV")n ξ ξ='ξ' s[]q f |q<0=s[](-q)f++r 0 |9*q<1="" |r<-q-1='I':s[]r f s ω@((v,a):l)q f |q>=v,f/=a=a:s ω(q-v)ξ |f==ξ,γ<-s ω(v-q)a++[a],η γ<η(s l q ξ)=γ |True=s l q ξ η=length to be used as e.g. GHCi> r 7 "VII" GHCi> r 39 "XIL" GHCi> r (-39) "LLXILC" GHCi> r 1983 "MXVIIM" GHCi> r 259876 "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCXXIVM" You can evaluate the length sum with the straightforward GHCi> sum . map(length.r) $ [-1000..3000] 25823 Which takes but a few seconds.