Это очень очень простой алгоритм, который, я уверен, может быть решен во многих разных языках. В Испании идентификационные карты (известные как 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 всегда пишется в верхнем регистре, но в вашем алгоритме вы можете выбрать ввод и вывод в верхнем или нижнем регистре, просто быть последовательными.
- В реальной жизни некоторые NIE, выпущенные до 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>
Это код-гольф , поэтому победит самый короткий код для каждого языка!