นี่เป็นอัลกอริทึมที่ง่ายมากซึ่งฉันแน่ใจว่าสามารถแก้ไขได้ในหลายภาษา ในบัตรประจำตัวประชาชนสเปน (รู้จักกันในชื่อDNI ) ประกอบด้วยตัวเลข 8 ตัวและตัวควบคุม อักขระควบคุมคำนวณด้วยอัลกอริทึมต่อไปนี้: หารตัวเลขด้วย 23 ใช้เวลาที่เหลือของการดำเนินการและแทนที่ด้วยอักขระตามตารางนี้:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
T R W A G M Y F P D X B N J Z S Q V H L C K E
หาก DNI เป็นของคนต่างชาติที่อาศัยอยู่ในประเทศสเปนหลักแรกจะเปลี่ยนไปX
, Y
หรือZ
และมันจะเรียกว่าNIE ในกรณีนี้การทดแทนต่อไปนี้เกิดขึ้นก่อนการคำนวณอักขระควบคุม:
X Y Z
0 1 2
มีเครื่องคิดเลขออนไลน์มากมายที่ช่วยให้คุณได้รับตัวควบคุม แต่คุณเขียนรหัสนั้นสั้นแค่ไหน? เขียนอัลกอริทึม (โปรแกรมหรือฟังก์ชั่น) ที่รับ a string
ด้วยหมายเลข DNI (ซึ่งจะประกอบด้วยอักขระตัวอักษรผสมตัวเลข 8 ตัวเสมอ) และส่งกลับเฉพาะอักขระควบคุมเดียวที่คำนวณและไม่มีอะไรเพิ่มเติม (ยอมรับบรรทัดใหม่ที่ต่อท้าย)
หมายเหตุ:
- DNI เขียนเป็นตัวพิมพ์ใหญ่เสมอ แต่ในอัลกอริทึมของคุณคุณสามารถเลือกอินพุตและเอาต์พุตให้เป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กได้อย่างสอดคล้องกัน
- ในชีวิตจริง NIEs บางส่วนที่ออกก่อน 2008 มี 8 หลักหลัง
X
,Y
หรือZ
แต่สำหรับวัตถุประสงค์ของเกมนี้คุณสามารถพิจารณาพวกเขามี 7 หลักที่พวกเขามีในปัจจุบัน - คุณสามารถพิจารณาว่าสตริงอินพุตจะมีอักขระ 8 ตัวเสมอ แต่หากไม่อยู่ในรูปแบบ "8 หลัก" หรือรูปแบบ "[XYZ] บวก 7 หลัก" คุณต้องส่งคืนข้อผิดพลาด (ตามที่คุณเลือก) หรือเพียงแค่โยน ข้อยกเว้น.
กรณีทดสอบ:
00000010 -> X (HRM Juan Carlos I's DNI number)
01234567 -> L
98765432 -> M
69696969 -> T
42424242 -> Y
Z5555555 -> W (Z=2)
Y0000369 -> S (Y=1)
A1234567 -> <Error code or exception>
1231XX12 -> <Error code or exception>
นี่คือรหัส - กอล์ฟดังนั้นอาจเป็นรหัสที่สั้นที่สุดสำหรับแต่ละภาษาที่ชนะ!