0xUsernames
Il y a tellement de gens qui utilisent un service de messagerie qu'ils manquent d'espace pour stocker tous les noms d'utilisateur! Pour résoudre ce problème, ils vont commencer à stocker les noms d'utilisateur sous forme hexadécimale, si possible.
Si un nom d'utilisateur se compose uniquement des caractères 0123456789ABCDEF
(insensible à la casse), il peut être converti en hexadécimal et stocké sous forme d'entier. Par exemple, le nom d'utilisateur ba5eba11
peut être interprété comme 0xBA5EBA11
un entier hexadécimal.
Mais qu'en est-il 05AB1E
? Cela a un zéro de tête, qui serait perdu. Ainsi, chaque fois que nous convertissons un nom d'utilisateur, nous nous assurons de faire précéder un 1
avant de le lire comme un entier.
Le défi
Votre tâche consiste à écrire un programme ou une fonction qui, étant donné un nom d'utilisateur non vide sous forme de chaîne, «hexa-compresse» le nom d'utilisateur:
- S'il peut être interprété comme un entier hexadécimal, ajoutez un 1, interprétez-le comme hexadécimal, puis imprimez le résultat en base 10.
- Sinon, renvoyez simplement la chaîne non modifiée.
Il s'agit de code-golf , donc la solution la plus courte (en octets) l'emporte! Les fonctions de conversion de base intégrées sont autorisées.
Cas de test
Vous pouvez supposer que tous les entiers résultants se trouvent dans la plage d'entiers standard de votre langue.
Comme pour les noms d'utilisateur sur la plupart des systèmes de messagerie, les chaînes d'entrée ne contiendront que des caractères alphanumériques et des traits de soulignement.
N'oubliez pas, vous devez toujours ajouter un interligne 1
avant la conversion!
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Pour référence, voici une implémentation de Python 3 que j'ai utilisée pour les cas de test (non golfée):
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name