Utils fix and test, add decode roman numbers
This commit is contained in:
parent
dc5d138ebf
commit
3d6dfda6ba
2 changed files with 17 additions and 3 deletions
|
@ -11,6 +11,7 @@ from django.core.management import call_command
|
|||
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Soustredeni, Nastaveni
|
||||
from seminar.testutils import create_test_data
|
||||
from seminar import ovvpfile
|
||||
from seminar import utils
|
||||
|
||||
class SeminarBasicTests(TestCase):
|
||||
def setUp(self):
|
||||
|
@ -72,4 +73,9 @@ class SeminarBasicTests(TestCase):
|
|||
t = o.to_string()
|
||||
assert t == filetext
|
||||
|
||||
def test_roman(self):
|
||||
for i in [0, 1, 23, 2015, 1999, 42, 4, 400, 78, 4321, 8765, 999]:
|
||||
r = utils.roman(i)
|
||||
fr = utils.from_roman(r)
|
||||
assert fr == i
|
||||
|
||||
|
|
|
@ -1,12 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
roman_numerals = zip((1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1),
|
||||
('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I'))
|
||||
|
||||
def roman(num):
|
||||
ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)
|
||||
nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I')
|
||||
res = ""
|
||||
for i, n in zip(ints, nums):
|
||||
for i, n in roman_numerals:
|
||||
res += n * (num // i)
|
||||
num %= i
|
||||
return res
|
||||
|
||||
def from_roman(rom):
|
||||
if not rom:
|
||||
return 0
|
||||
for i, n in roman_numerals:
|
||||
if rom.upper().startswith(n):
|
||||
return i + from_roman(rom[len(n):])
|
||||
raise Exception('Invalid roman numeral: "%s"', rom)
|
||||
|
||||
|
|
Loading…
Reference in a new issue