mirror of
https://github.com/rr-/pq-cli.git
synced 2026-11-12 22:40:36 -07:00
lingo: add to_arabic, the inverse of to_roman
Ported from upstream's toArabic, including the T, MT, A and MA numerals. Web saves store spell levels as roman numerals, so the .pqw importer needs it.
This commit is contained in:
2 files changed
+45
-1
No files matched your search
@@ -79,6 +79,43 @@ def to_roman(num: int) -> str:
|
||||
return ret
|
||||
|
||||
|
||||
def to_arabic(roman: str) -> int:
|
||||
num = 0
|
||||
rest = roman.upper()
|
||||
|
||||
def _arab(ds: str, dn: int) -> bool:
|
||||
nonlocal num, rest
|
||||
if not rest.startswith(ds):
|
||||
return False
|
||||
rest = rest[len(ds) :]
|
||||
num += dn
|
||||
return True
|
||||
|
||||
while _arab("T", 10000):
|
||||
pass
|
||||
_arab("MT", 9000)
|
||||
_arab("A", 5000)
|
||||
_arab("MA", 4000)
|
||||
while _arab("M", 1000):
|
||||
pass
|
||||
_arab("CM", 900)
|
||||
_arab("D", 500)
|
||||
_arab("CD", 400)
|
||||
while _arab("C", 100):
|
||||
pass
|
||||
_arab("XC", 90)
|
||||
_arab("L", 50)
|
||||
_arab("XL", 40)
|
||||
while _arab("X", 10):
|
||||
pass
|
||||
_arab("IX", 9)
|
||||
_arab("V", 5)
|
||||
_arab("IV", 4)
|
||||
while _arab("I", 1):
|
||||
pass
|
||||
return num
|
||||
|
||||
|
||||
def act_name(act: int) -> str:
|
||||
if act == 0:
|
||||
return "Prologue"
|
||||
|
||||
+8
-1
@@ -1,4 +1,4 @@
|
||||
from pqcli.lingo import indefinite, to_roman
|
||||
from pqcli.lingo import indefinite, to_arabic, to_roman
|
||||
|
||||
|
||||
def test_indefinite_article() -> None:
|
||||
@@ -19,3 +19,10 @@ def test_to_roman() -> None:
|
||||
assert to_roman(9000) == "MT"
|
||||
assert to_roman(14999) == "TMACMXCIX"
|
||||
assert to_roman(23456) == "TTMMMCDLVI"
|
||||
|
||||
|
||||
def test_to_arabic_inverts_to_roman() -> None:
|
||||
for num in [*range(1, 5000), 9000, 9999, 14999, 23456]:
|
||||
assert to_arabic(to_roman(num)) == num
|
||||
assert to_arabic("N") == 0
|
||||
assert to_arabic("iv") == 4
|
||||
Reference in new issue
Block a user