Tulis algoritma untuk menafsirkan urutan huruf sebagai angka Romawi. (lihat aturan angka romawi di bawah)
Setiap huruf berbeda memiliki nilai desimal Arab yang cocok, tidak maksimal. Tetapi Anda tidak memiliki kunci sebelumnya, jadi {A=10, I=1, X=5, ... Z=1000000}
putuskan dengan interpretasi Anda.
Tantangan
- Baca input melalui
STDIN
atau setara dan tulis output melaluiSTDOUT
atau setara - Input yang valid adalah kombinasi huruf besar dan kecil yaitu pencocokan
\[a-zA-Z]+\
- Masukan harus divalidasi untuk melihat apakah urutan huruf dapat diartikan sebagai angka Romawi yang valid
- Jika input melewati validasi, output yang valid harus menjadi interpretasi desimal Arab terendah dan kunci yang digunakan yaitu
Aa
ditafsirkan sebagai4 {a=5, A=1}
tidak6 {A=5, a=1}
atau9 {a=10, a=1}
Aturan Angka Romawi
Hanya huruf yang mewakili kekuatan sepuluh yang dapat diulang, maksimal tiga kali berturut-turut dan total empat kali misalnya
II
III
XXXIX
Jika satu atau lebih huruf ditempatkan setelah huruf lain yang nilainya lebih besar, tambahkan jumlah itu
AAaa => 22 {A=10, a=1} (20 + 2 = 22) bbAAaa => 222 {b=100, A=10, a=1} (200 + 20 + 2 = 222)
Jika suatu huruf diletakkan di depan huruf lain yang nilainya lebih besar, kurangi jumlah itu
Aa => 4 {a=5, A=1} (5 – 1 = 4) AaA => 19 {A=10, a=1} (10 + 10 – 1 = 19) BbBaA => 194 {B=100, b=10, A=5, a=1} (100 + 100 - 10 + 5 - 1 = 194)
Beberapa aturan berlaku untuk mengurangi jumlah dari angka Romawi:
- Hanya kurangi sepuluh kekuatan yaitu
1, 10, 100...
tidak5, 50, 500...
- Tidak ada pengurangan ganda
18
yang ditulis sebagaiXVIII
tidakIIXX (10 + 10 - 1 - 1)
- Jangan kurangi angka dari yang lebih dari sepuluh kali lebih besar.
Anda dapat mengurangi1
dari5
atau10
tetapi tidak dari50, 100, 500...
- Hanya kurangi sepuluh kekuatan yaitu
Contoh
Input:
Aa
BAa
CCCXLVII
MMMCDVII
ABADDF
XVVX
FAASGSH
DXCCDA
AaBbcDEf
Output:
4 {a=5, A=1}
14 {B=10, a=5, A=1}
347 {C=100, L=50, X=10, V=5, I=1}
347 {M=100, D=50, C=10, V=5, I=1}
1921 {A=1000, B=100, D=10, F=1}
'XVVX' failed Roman numeral test
7191 {F=5000, A=1000, S=100, G=10, H=1}
'DXCCDA' failed Roman numeral test
4444 {a=5000, A=1000, b=500, B=100, D=50, c=10, f=5, E=1}
code-golf
cryptography
roman-numerals
iamogbz
sumber
sumber
Aa
memiliki nilai 1 (A = 1, a = 2).Jawaban:
Python 2,
415444440419416 byteLagipula tidak ada banyak angka Romawi. Script ini membuat semuanya dan memeriksa semua permutasi input, lalu mengembalikan kecocokan terkecil.
sumber
import itertools as i
dan kemudiani.permutations
lebih pendek?