mk-toolブログ

エンジニアと家のことをごちゃごちゃと書いてます

【checkio】Roman Numerals(Electronic Station)

【他の人のコード】

def _make_roman_nums(i, v, x):
    return ['', i, i * 2, i * 3, i + v, v, v + i, v + i * 2, v + i * 3, i + x]
<200b>
roman_nums = [_make_roman_nums('I', 'V', 'X'),  # ones
              _make_roman_nums('X', 'L', 'C'),  # tens
              _make_roman_nums('C', 'D', 'M'),  # hundreds
              _make_roman_nums('M', '', '')[:4]]  # thousands
<200b>
def checkio(number):
    # 852 -> (3, 0), (2, 8), (1, 5), (0, 2)
    digits = [(place, number // (10 ** place) % 10) for place in range(3, -1, -1)]
    return ''.join(roman_nums[place][value] for place, value in digits)
<200b>||<

【自分のコード】
>|python|
def checkio(data):
    roman_list = []

    #1
    roman_list.append(create_roman_list("I", "V", "X"))
    #10
    roman_list.append(create_roman_list("X", "L", "C"))
    #100
    roman_list.append(create_roman_list("C", "D", "M"))
    #1000
    roman_list.append(create_roman_list("M", "", ""))

    str_data = str(data)
    
    #replace this for solution
    return_data = "".join([roman_list[len(str_data)-1-i][int(str_data[i])] for i in range(len(str_data))])
    
    return return_data
    
def create_roman_list(i, v, x):
    return ["", i, i+i, i+i+i, i+v, v, v+i, v+i+i, v+i+i+i, i+x]

if __name__ == '__main__':
    
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert checkio(6) == 'VI', '6'
    assert checkio(76) == 'LXXVI', '76'
    assert checkio(499) == 'CDXCIX', '499'
    assert checkio(3888) == 'MMMDCCCLXXXVIII', '3888'