Đây là một thuật toán rất đơn giản, mà tôi chắc chắn có thể được giải bằng nhiều ngôn ngữ khác nhau. Ở Tây Ban Nha, thẻ ID (được gọi là DNI ) bao gồm 8 số và ký tự điều khiển. Ký tự điều khiển được tính toán với thuật toán sau: chia số cho 23, lấy phần còn lại của thao tác và thay thế bằng ký tự theo bảng này:
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
Nếu DNI thuộc về một người nước ngoài sinh sống tại Tây Ban Nha, chữ số đầu tiên được thay đổi để X
, Y
hay Z
và nó được gọi là một NIE . Trong trường hợp này, các thay thế sau được thực hiện trước khi tính toán ký tự điều khiển:
X Y Z
0 1 2
Có rất nhiều máy tính trực tuyến giúp bạn có được ký tự điều khiển, nhưng, bạn có thể viết mã đó ngắn đến mức nào? Viết một thuật toán (chương trình hoặc hàm) nhận được string
bằng số DNI (sẽ luôn bao gồm 8 ký tự chữ và số) và chỉ trả về một ký tự điều khiển duy nhất được tính và không có gì nữa (một dòng mới được chấp nhận).
Ghi chú:
- DNI luôn được viết bằng chữ in hoa, nhưng trong thuật toán của bạn, bạn có thể chọn đầu vào và đầu ra là chữ hoa hoặc chữ thường, chỉ cần nhất quán.
- Trong cuộc sống thực, một số NIE được phát hành trước năm 2008 có 8 chữ số sau
X
,Y
hoặcZ
, nhưng với mục đích của trò chơi này, bạn có thể xem xét chúng có 7 chữ số như hiện nay. - Bạn có thể xem xét rằng chuỗi đầu vào sẽ luôn có 8 ký tự, nhưng nếu chúng không ở định dạng "8 chữ số" cũng như định dạng "[XYZ] cộng với 7 chữ số", bạn phải trả về lỗi (do bạn chọn) hoặc chỉ ném một ngoại lệ.
Các trường hợp thử nghiệm:
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>
Đây là môn đánh gôn , vì vậy có thể mã ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!