Tổng quan
Người La Mã cổ đại đã nghĩ ra một hệ thống số sử dụng các chữ cái Latinh, phục vụ tốt cho họ và vẫn được sử dụng bởi nền văn minh hiện đại, mặc dù ở mức độ nhỏ hơn nhiều. Trong thời gian sử dụng, người La Mã đã phải học cách sử dụng và thao tác những con số này để được sử dụng nhiều cho nhiều ứng dụng. Ví dụ, nếu một người đàn ông sở hữu 35 con bò và anh ta đã mua thêm 27 con, làm sao anh ta biết tổng số mới ngoài việc đếm tất cả? ( Ok, điều đó và sử dụng bàn tính ... ) Nếu người La Mã có thể làm điều đó, chắc chắn chúng ta cũng có thể tìm ra nó.
Mục tiêu
Viết thuật toán / hàm / chương trình ngắn nhất sẽ cộng hai chữ số La Mã lại với nhau và đưa ra kết quả mà không chuyển đổi biểu diễn chuỗi của một trong hai đầu vào thành một số.
Các quy tắc / ràng buộc
Do sự không nhất quán trong lịch sử / tiền trung cổ trong định dạng, tôi sẽ phác thảo một số quy tắc không chuẩn (theo cách sử dụng hiện đại) cho chỉnh hình. Xem hướng dẫn giá trị dưới đây làm ví dụ.
- Các chữ cái I, X, C và M có thể được lặp lại tới bốn lần liên tiếp, nhưng không nhiều hơn. D, L và V không bao giờ có thể lặp lại.
- Chữ ngay bên phải của một chữ cái khác trong đại diện La Mã sẽ có cùng giá trị hoặc ít hơn so với bên trái của nó.
- Nói cách khác,
VIIII == 9
nhưngIX != 9
không hợp lệ / không được phép.
- Nói cách khác,
- Tất cả các giá trị đầu vào sẽ là 2.000 (MM) trở xuống; không đại diện cho số lớn hơn M là cần thiết.
- Tất cả các giá trị đầu vào sẽ là một số La Mã hợp lệ, theo các quy tắc trên.
- Bạn không được chuyển đổi bất kỳ số nào thành số thập phân, nhị phân hoặc bất kỳ hệ thống số nào khác như một phần của giải pháp của bạn (bạn được hoan nghênh sử dụng phương pháp như vậy để XÁC MINH kết quả của bạn).
- Đây là mã golf, vì vậy mã ngắn nhất sẽ thắng.
Hướng dẫn giá trị
Symbol Value
I 1
II 2
III 3
IIII 4
V 5
VIIII 9
X 10
XIIII 14
XXXXIIII 44
L 50
LXXXXVIIII 99
C 100
D 500
M 1,000
Ví dụ
XII + VIII = XX (12 + 8 = 20)
MCCXXII + MCCXXII = MMCCCCXXXXIIII (1,222 + 1,222 = 2,444)
XXIIII + XXXXII = LXVI (24 + 42 = 66)
Nếu cần làm rõ thêm, xin vui lòng hỏi.