0xUsernames
Ci sono così tante persone che usano un servizio di messaggistica che stanno esaurendo lo spazio per memorizzare tutti i nomi utente! Per risolvere questo problema, inizieranno a memorizzare i nomi utente come esadecimali, ove possibile.
Se un nome utente è composto solo da caratteri 0123456789ABCDEF
(senza distinzione tra maiuscole e minuscole), può essere convertito in esadecimale e archiviato come numero intero. Ad esempio, il nome utente ba5eba11
può essere interpretato come 0xBA5EBA11
un numero intero esadecimale.
Ma che dire 05AB1E
? Ha uno zero iniziale, che andrebbe perso. Quindi, ogni volta che convertiamo un nome utente, ci assicuriamo di anteporre a1
prima di leggerlo come intero.
La sfida
Il tuo compito è scrivere un programma o una funzione che, dato un nome utente non vuoto come stringa, "hexa-comprime" il nome utente:
- Se può essere interpretato come un numero intero esadecimale, anteporre un 1, interpretarlo come esadecimale e quindi stampare il risultato come base 10.
- Altrimenti, restituisci la stringa non modificata.
Questo è code-golf , quindi vince la soluzione più breve (in byte)! Le funzioni di conversione di base integrate sono consentite.
Casi test
Puoi presumere che qualsiasi numero intero risultante rientri nell'intervallo intero standard della tua lingua.
Come per i nomi utente sulla maggior parte dei sistemi di messaggistica, le stringhe di input conterranno solo caratteri alfanumerici e di sottolineatura.
Ricorda, devi sempre aggiungere un lead 1
prima della conversione!
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Per riferimento, ecco un'implementazione di Python 3 che ho usato per i casi di test (non risolto):
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name