Il s'agit d'un algorithme très très simple, qui, j'en suis sûr, peut être résolu dans de nombreuses langues différentes. En Espagne, les cartes d'identité (appelées DNI ) se composent de 8 chiffres et d'un caractère de contrôle. Le caractère de contrôle est calculé avec l'algorithme suivant: divisez le nombre par 23, prenez le reste de l'opération et remplacez-le par un caractère selon ce tableau:
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
Si le DNI appartient à une personne étrangère vivant en Espagne, le premier chiffre est changé X
, Y
ou Z
il est appelé NIE . Dans ce cas, les substitutions suivantes sont effectuées avant de calculer le caractère de contrôle:
X Y Z
0 1 2
Il existe de nombreuses calculatrices en ligne qui vous aident à obtenir le caractère de contrôle, mais combien de temps pouvez-vous écrire ce code? Écrivez un algorithme (programme ou fonction) qui reçoit un string
avec le numéro DNI (qui sera toujours composé de 8 caractères alphanumériques) et ne renvoie que le seul caractère de contrôle calculé et rien de plus (une nouvelle ligne de fin est acceptée).
Remarques:
- Le DNI est toujours écrit en majuscules, mais dans votre algorithme, vous pouvez choisir l'entrée et la sortie en majuscules ou en minuscules, soyez juste cohérent.
- Dans la vraie vie, certains NPI émis avant 2008 ont 8 chiffres après la
X
,Y
ouZ
, mais pour les besoins de ce jeu, vous pouvez considérer qu'ils ont 7 chiffres car ils ont de nos jours. - Vous pouvez considérer que la chaîne d'entrée aura toujours 8 caractères, mais s'ils ne sont pas au format "8 chiffres" ni au format "[XYZ] plus 7 chiffres", vous devez renvoyer une erreur (de votre choix) ou simplement jeter une exception.
Cas de test:
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>
C'est du code-golf , alors le code le plus court pour chaque langue peut gagner!