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 ba5eba11może być interpretowana jako 0xBA5EBA11liczba 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 1przed 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ą 1przed 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