Preface Numbering

preface

Algorithm

Generate all the roman numerals and count the occurences of each letter.

Python

numerals = ['I','V','X','L','C','D','M']
lt = [[1000,'M'],[900,'CM'],[500,'D'],[400,'CD'],[100,'C'],[90,'XC'],[50,'L'],[40,'XL'],[10,'X'],[9,'IX'],[5,'V'],[4,'IV'],[1,'I']]

def conv(num):
    global numerals, lt
    s = ''
    for i in lt:
        s += i[1]*(num//i[0])
        num = num%i[0]    
    res = []
    for i in numerals:
        res.append(s.count(i))
    return res

def main():
    global numerals
    with open('preface.in','r') as fIn:
        num = int(fIn.read())
    res = [0]*7
    for i in range(1,num+1):
        res = [sum(k) for k in zip(res, conv(i))]
    for i in range(6,-1,-1):
        if res[i] != 0: break
        res.pop(i)
    with open('preface.out','w') as fOut:
        for i in range(len(res)):
            fOut.write('%s %d\n' %(numerals[i],res[i]))

if __name__ == '__main__': main()