Este é um algoritmo muito, muito simples, que tenho certeza de que pode ser resolvido em muitas linguagens diferentes. Na Espanha, os cartões de identificação (conhecidos como DNI ) consistem em 8 números e um caractere de controle. O caractere de controle é calculado com o seguinte algoritmo: divida o número por 23, pegue o restante da operação e substitua-o por um caractere de acordo com esta tabela:
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
Se o DNI pertence a uma pessoa estrangeira a viver em Espanha, o primeiro dígito é alterado para X, You Ze é chamado de NIE . Nesse caso, as seguintes substituições são feitas antes de calcular o caractere de controle:
X Y Z
0 1 2
Existem muitas calculadoras on-line que ajudam a obter o caractere de controle, mas qual é a duração do código? Escreva um algoritmo (programa ou função) que receba um stringcom o número DNI (que sempre consistirá em 8 caracteres alfanuméricos) e retorne apenas o caractere de controle único calculado e nada mais (uma nova linha à direita é aceita).
Notas:
- O DNI é sempre escrito em letras maiúsculas, mas em seu algoritmo você pode escolher a entrada e a saída em maiúsculas ou minúsculas, apenas seja consistente.
- Na vida real, alguns NIEs emitidos antes de 2008 têm 8 dígitos após o
X,YouZ, mas, para os propósitos deste jogo, você pode considerar que eles têm 7 dígitos como têm atualmente. - Você pode considerar que a sequência de entrada sempre terá 8 caracteres, mas se não estiverem no formato "8 dígitos" nem no formato "[XYZ] mais 7 dígitos", será necessário retornar um erro (de sua escolha) ou apenas jogar uma exceção.
Casos de teste:
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>
Este é o código-golfe , portanto, pode ganhar o código mais curto para cada idioma!