Sasaran:
Tulis fungsi yang mengambil angka sebagai input dan mengembalikan angka romawi untuk nomor tersebut sebagai output.
Simbol Angka Romawi:
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000
Sebagai contoh tentang apa yang saya maksud ketika saya mengatakan "angka romawi tangan pendek", mari pertimbangkan mencari angka romawi untuk mewakili tahun 1983, karena itulah tahun saya dilahirkan. Salah satu opsi adalah melakukan ini dengan cara biasa (10 huruf):
1983 = MCMLXXXIII = (1000 - 100 + 1000 + 50 + 30 + 3)
Pilihan lainnya adalah melakukannya dengan cara singkat (6 karakter):
1983 = MXVIIM = (1000 - (10 + 10) + 1000 + 3)
Tahukah Anda apa artinya ini?!? !! ?? Jika saya roman saya bisa menyelamatkan 4 karakter setiap kali saya menulis tanggal lahir saya! Woot Woot !!
Namun, sebelum saya maju dalam kegembiraan, saya memiliki pertanyaan untuk ditulis, jadi saya mungkin harus mendefinisikan aturan angka romawi tangan pendek sehingga kita semua berada di halaman yang sama:
Aturan Angka Romawi Singkat:
- Selalu pertimbangkan simbol dari kiri ke kanan hingga tidak ada lagi karakter yang perlu dipertimbangkan.
- Jika tidak ada simbol bernilai lebih tinggi di sebelah kanan simbol saat ini:
- Tambahkan nilai simbol saat ini ke total angka romawi ini.
- Jika ada simbol bernilai lebih tinggi di sebelah kanan simbol yang Anda pertimbangkan:
- Temukan simbol bernilai tertinggi paling kanan di sebelah kanan simbol saat ini
- Pertimbangkan semua karakter hingga simbol itu sebagai satu angka romawi
- Hitung nilai angka romawi itu menggunakan langkah-langkah ini
- Kurangi nilai angka romawi dari total angka romawi ini.
- Pindah ke simbol berikutnya setelah grup yang baru saja Anda pertimbangkan
- Setiap angka romawi harus memiliki setidaknya 1 simbol di dalamnya.
- Itu dia! Apa pun yang mengikuti aturan ini akan diterima!
Contoh:
IIIIV = (-(1+1+1+1)+5) = 1 //Don't ask me why you'd want to do this!
VVX = (-(5+5) + 10) = 0 //Who said you couldn't represent 0 with roman numerals?!!?
VVXM = (-(-(5+5) + 10) + 1000) = 1000 //Again...don't ask me why you'd want to do this!
MXIIXMI = (1000-(10-(1+1)+10)+1000+1) = 1983 //Ahhh...such a great year :)
Aturan Pertanyaan:
Buat fungsi yang mengambil nomor tunggal sebagai input dan mengembalikan angka romawi untuk nomor itu sebagai output menggunakan aturan di atas. Hitung codeGolfScore dari fungsi ini.
example input: 2011 example possible output: MMXI another possible output: MMVVIVV //(2000 + 10 - 4 + 5)
Dengan menggunakan fungsi Anda dari aturan 1, buat angka romawi antara -1000 (benar, NEGATIF seribu) dan 3.000. Kemudian jumlah panjang karakter angka romawi ini untuk mendapatkan totalCharacterCount Anda . Berikut beberapa pseudocode yang akan diklarifikasi:
totalCharacterCount = 0; for(currentNumber = -1000; currentNumber <= 3000; currentNumber++){ totalCharacterCount += getRomanNumeral(currentNumber).length; } return totalCharacterCount;
finalScore = codeGolfScore + totalCharacterCount
- Final FinalScore terendah !
Catatan: Karena jumlah total Karakter adalah dalam sepuluh-ribuan +, algoritma karakter-panjang harus menjadi prioritas utama. Skor kode-golf hanyalah tie-breaker jika beberapa pengguna menemukan algoritma atau algoritma optimal yang dekat satu sama lain.
Selamat mencoba, dan bersenang-senang di perayaan MMXII Anda besok malam !!!
""
diizinkan untuk nol atau apakah kita harus menggunakan VVX
atau sesuatu yang setara?
IXV = -(-1 + 10) + 5 = -4
(kemenangan paling kanan), atau IXV = -1 + 10 + 5 = 14
(kemenangan bernilai tertinggi)?
DDDDM
berdiri untuk-1000
?