0xUsernames
Há tantas pessoas usando um serviço de mensagens que estão ficando sem espaço para armazenar todos os nomes de usuário! Para corrigir isso, eles começarão a armazenar nomes de usuário como hexadecimal, sempre que possível.
Se um nome de usuário consistir apenas em caracteres 0123456789ABCDEF
(sem distinção entre maiúsculas e minúsculas), ele poderá ser convertido em um hexadecimal e armazenado como um número inteiro. Por exemplo, o nome de usuário ba5eba11
pode ser interpretado como 0xBA5EBA11
um número inteiro hexadecimal.
Mas que tal 05AB1E
? Isso tem um zero à esquerda, que seria perdido. Portanto, sempre que convertermos um nome de usuário, adicione um 1
antes de a antes de lê-lo como um número inteiro.
O desafio
Sua tarefa é escrever um programa ou função que, dado um nome de usuário não vazio como uma string, 'hexa-comprima' o nome de usuário:
- Se puder ser interpretado como um número inteiro hexadecimal, acrescente 1, interprete como hexadecimal e imprima o resultado como base 10.
- Caso contrário, basta retornar a string não modificada.
Isso é código-golfe , então a solução mais curta (em bytes) vence! Funções de conversão de base incorporadas são permitidas.
Casos de teste
Você pode supor que quaisquer números inteiros resultantes estejam dentro do intervalo inteiro padrão do seu idioma.
Como nos nomes de usuário na maioria dos sistemas de mensagens, as seqüências de entrada conterão apenas alfanuméricos e sublinhados.
Lembre-se de que você sempre precisa adicionar um líder 1
antes da conversão!
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Para referência, aqui está uma implementação do Python 3 que eu usei para os casos de teste (não destruídos):
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name