0xUsernames
Es gibt so viele Leute, die einen Nachrichtendienst nutzen, dass ihnen der Speicherplatz ausgeht, um alle Benutzernamen zu speichern! Um dies zu beheben, werden die Benutzernamen nach Möglichkeit hexadezimal gespeichert.
Wenn ein Benutzername nur aus Zeichen besteht 0123456789ABCDEF
(ohne Berücksichtigung der Groß- und Kleinschreibung), kann er in ein Hexadezimalzeichen konvertiert und als Ganzzahl gespeichert werden. Beispielsweise kann der Benutzername ba5eba11
als 0xBA5EBA11
hexadezimale Ganzzahl interpretiert werden .
Aber was ist mit 05AB1E
? Das hat eine führende Null, die verloren gehen würde. Wenn wir also einen Benutzernamen konvertieren, müssen wir a voranstellen, 1
bevor wir ihn als Ganzzahl lesen.
Die Herausforderung
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die bei einem nicht leeren Benutzernamen als Zeichenfolge den Benutzernamen hexadezimal komprimiert:
- Wenn es als hexadezimale Ganzzahl interpretiert werden kann, stellen Sie eine 1 voran, interpretieren Sie es als hexadezimal und geben Sie das Ergebnis als Basis 10 aus.
- Andernfalls geben Sie einfach die Zeichenfolge unverändert zurück.
Das ist Code-Golf , also gewinnt die kürzeste Lösung (in Bytes)! Eingebaute Basisumwandlungsfunktionen sind zulässig.
Testfälle
Sie können davon ausgehen, dass sich alle resultierenden Ganzzahlen innerhalb des Standard-Ganzzahlbereichs Ihrer Sprache befinden.
Wie bei Benutzernamen auf den meisten Nachrichtensystemen enthalten die Eingabezeichenfolgen nur alphanumerische Zeichen und Unterstriche.
Denken Sie daran, dass Sie 1
vor der Konvertierung immer einen Lead hinzufügen müssen !
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Als Referenz ist hier eine Python 3-Implementierung, die ich für die Testfälle verwendet habe (ungolfed):
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name