fork download
  1. import re
  2. import sys
  3.  
  4. def is_proper_roman_numeral(s):
  5. return re.fullmatch('(?xi)'
  6. '(?=[MDCLXVI])'
  7. '(?P<thousands> M{,3})'
  8. '(?P<hundreds>D?C{,3}|CM|CD)'
  9. '(?P<tens> L?X{,3}|XC|XL)'
  10. '(?P<units> V?I{,3}|IX|IV)', s)
  11.  
  12. for line in sys.stdin:
  13. line = line.strip()
  14. NOT = " NOT" * (not is_proper_roman_numeral(line))
  15. print("{line!r} is{NOT} valid".format(**vars()))
Success #stdin #stdout 0.01s 28008KB
stdin
XII
XI

IX
IIX
stdout
'XII' is valid
'XI' is valid
'' is NOT valid
'IX' is valid
'IIX' is NOT valid