OFFSET
1,2
COMMENTS
Chisel strokes for numerals: I,1; V,2; X,2; L,2; C ( = < ),2; D,3; M,4.
For more about Roman numerals, see A006968.
a(A002964(n)) = n. - Reinhard Zumkeller, Apr 14 2013
LINKS
Nathaniel Johnston, Table of n, a(n) for n = 1..3999
Eric Weisstein's World of Mathematics, Roman Numerals
Wikipedia, Roman numerals
MAPLE
with(StringTools): A002963 := proc(n) local r: r:=convert(n, roman): return add(parse(SubstituteAll( SubstituteAll( SubstituteAll( SubstituteAll( SubstituteAll( SubstituteAll( SubstituteAll(r[j], "I", "1"), "V", "2"), "X", "2"), "L", "2"), "C", "2"), "D", "3"), "M", "4")), j=1..length(r)): end: seq(A002963(n), n=1..102); # Nathaniel Johnston, May 18 2011
MATHEMATICA
a[n_] := Characters[ IntegerString[n, "Roman"]] /. {"I" -> 1, "V" -> 2, "X" -> 2, "L" -> 2, "C" -> 2, "D" -> 3, "M" -> 4} // Total; Table[a[n], {n, 1, 102}] (* Jean-François Alcover, Sep 10 2013 *)
PROG
(Haskell)
a002963 = ch 0 . a061493 where
ch s 0 = s
ch s x = ch (s + [0, 1, 2, 2, 2, 2, 3, 4] !! d') x'
where (x', d) = divMod x 10; d' = fromInteger d
-- Reinhard Zumkeller, Apr 14 2013
(PARI) {A002963(n, c=[1000, 4, 900, 6, 500, 3, 400, 5, 100, 2, 90, 4, 50, 2, 40, 4, 10, 2, 9, 3, 5, 2, 4, 3, 1, 1], s=0)= forstep(i=1, #c, 2, while(n>=c[i], n-=c[i]; s+=c[i+1])); s} \\ M. F. Hasler, Jul 27 2016
(Python)
a002963 = lambda n: sum((d+1-(d==2))*(i%5)+(d+2-(d==1))*(i>4) if (i+1)%5 else 3+d+(d==2)*(i==9) for d, i in enumerate(map(int, str(n)[::-1])))
# Nicholas Stefan Georgescu, Feb 27 2023
CROSSREFS
KEYWORD
base,easy,nonn,nice
AUTHOR
EXTENSIONS
More terms from David W. Wilson
Data double-checked by M. F. Hasler, Jul 27 2016
STATUS
approved