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.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Soustredeni, Nastaveni | ||||||
| from seminar.testutils import create_test_data | from seminar.testutils import create_test_data | ||||||
| from seminar import ovvpfile | from seminar import ovvpfile | ||||||
|  | from seminar import utils | ||||||
| 
 | 
 | ||||||
| class SeminarBasicTests(TestCase): | class SeminarBasicTests(TestCase): | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|  | @ -72,4 +73,9 @@ class SeminarBasicTests(TestCase): | ||||||
|         t = o.to_string() |         t = o.to_string() | ||||||
|         assert t == filetext |         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 -*- | # -*- 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): | 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 = "" |     res = "" | ||||||
|     for i, n in zip(ints, nums): |     for i, n in roman_numerals: | ||||||
|         res += n * (num // i) |         res += n * (num // i) | ||||||
|         num %= i |         num %= i | ||||||
|     return res |     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
	
	 Tomas Gavenciak
						Tomas Gavenciak