สร้างฟังก์ชั่นที่สั้นที่สุดเพื่อแปลงสตริงของตัวเลขโรมันให้เป็นจำนวนเต็ม
กฎสำหรับตัวอักษรแต่ละตัวสามารถพบได้ที่หน้าวิกิพีเดีย ตัวอักษรที่สูงกว่า 1,000 จะมีเครื่องหมายวงเล็บล้อมรอบพวกเขาเพื่อให้สัญญาณที่สูงกว่า
ที่ต้องการ:
- ต้องแปลงตัวเลขโรมัน 1 ถึง 500,000
- ต้องเสร็จในเวลาไม่ถึงนาที
- ไม่ใช้ฟังก์ชันในตัวที่สามารถให้ประโยชน์ (เช่น: ฟังก์ชันที่แปลงตัวเลขโรมันเป็นจำนวนเต็ม)
- เป็นฟังก์ชั่น
ฟังก์ชันไม่จำเป็นต้องรองรับเศษส่วน อินพุตที่ไม่ถูกต้องควรส่งคืนหมายเลข 0
ฟังก์ชั่นที่สั้นที่สุดชนะ ในกรณีที่เสมอกันผู้ที่มีคะแนนมากที่สุดชนะ
กรณีทดสอบ
อินพุต
III
เอาท์พุต
3
อินพุต
IIII
เอาท์พุต
0
อินพุต
XVI
เอาท์พุต
16
อินพุต
(C)(D)(L)MMI
เอาท์พุต
452001
ไม่เหมาะสมสำหรับฉันหมายถึงสิ่งผิดกฎหมายดังนั้นควรคืน 0
—
Martin York
@Anon: หมายเลขเป็น mistype จากเมื่อฉันเปลี่ยนกรณีทดสอบที่สามเดิม ไม่จำเป็นต้องสนับสนุนรูปแบบที่ไม่เหมาะสมเพราะจะถือว่าเป็นการป้อนข้อมูลที่ไม่ถูกต้อง
—
เควินบราวน์
การปฏิบัติมาตรฐาน (และข้อมูลจำเพาะของคำถามนี้ซ้ำกัน) มีไว้สำหรับการป้อนข้อมูลที่ไม่ถูกต้องที่จะไม่ได้กำหนดพฤติกรรม เนื่องจากคำถามนี้มีอายุสี่ขวบและมีคำตอบเดียวเราควรเปลี่ยนข้อกำหนดหรือไม่
—
lirtosiast
@KevinBrown ฉันไม่เห็นแหล่งที่มาหรือคำอธิบายสำหรับตัวอักษรที่วงเล็บ ฉันคิดว่าคุณควรเปลี่ยนข้อมูลจำเพาะเพื่อให้ตรงกับcodegolf.stackexchange.com/q/16254/43319จากนั้นคำตอบจากที่นั่นสามารถโยกย้ายได้ที่นี่
—
Adám
(C)(D)(L)MMI
จะเป็น 452,001 คุณได้รับคุณค่าของคุณอย่างไร? นอกจากนี้สิ่งนี้จำเป็นต้องสนับสนุนฟอร์ม "ไม่เหมาะสม" (เช่นIC
แทนXCIX
) หรือไม่