0x Nazwy użytkowników
Tak wielu ludzi korzysta z usługi przesyłania wiadomości, że zabrakło miejsca na przechowywanie wszystkich nazw użytkowników! Aby to naprawić, zaczną przechowywać nazwy użytkowników w systemie szesnastkowym, o ile to możliwe.
Jeśli nazwa użytkownika składa się tylko z znaków 0123456789ABCDEF
(bez rozróżniania wielkości liter), można ją przekonwertować na postać szesnastkową i zapisać jako liczbę całkowitą. Na przykład nazwa użytkownika ba5eba11
może być interpretowana jako 0xBA5EBA11
liczba szesnastkowa.
Ale co z tym 05AB1E
? To ma wiodące zero, które zostałoby utracone. Tak więc, za każdym razem, gdy konwertujemy nazwę użytkownika, upewniamy się, że poprzedzamy ją znakiem 1
przed odczytaniem jej jako liczby całkowitej.
Wyzwanie
Twoim zadaniem jest napisanie programu lub funkcji, która, biorąc pod uwagę niepustą nazwę użytkownika jako ciąg, „hexa-kompresuje” nazwę użytkownika:
- Jeśli można go interpretować jako liczbę szesnastkową, należy poprzedzić 1, interpretować jako wartość szesnastkową, a następnie wydrukować wynik jako podstawę 10.
- W przeciwnym razie po prostu zwróć ciąg niezmodyfikowany.
To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie (w bajtach)! Wbudowane podstawowe funkcje konwersji są dozwolone.
Przypadki testowe
Możesz założyć, że wszelkie wynikowe liczby całkowite mieszczą się w standardowym zakresie liczb całkowitych twojego języka.
Podobnie jak w przypadku nazw użytkowników w większości systemów przesyłania komunikatów, łańcuchy wejściowe będą zawierać tylko znaki alfanumeryczne i znaki podkreślenia.
Pamiętaj, że zawsze musisz dodać wiodącą 1
przed konwersją!
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Dla porównania, oto implementacja Pythona 3, której użyłem dla przypadków testowych (nie golfowych):
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name