0xUsernames
Есть так много людей, использующих службу обмена сообщениями, что им не хватает места для хранения всех имен пользователей! Чтобы исправить это, они начнут хранить имена пользователей как шестнадцатеричные, где это возможно.
Если имя пользователя состоит только из символов 0123456789ABCDEF
(без учета регистра), оно может быть преобразовано в шестнадцатеричное и сохранено как целое число. Например, имя пользователя ba5eba11
может быть интерпретировано как 0xBA5EBA11
шестнадцатеричное целое число.
Но как насчет 05AB1E
? Это ведущий ноль, который будет потерян. Таким образом, всякий раз, когда мы конвертируем имя пользователя, мы обязательно ставим перед ним 1
перед чтением его как целое число.
Соревнование
Ваша задача - написать программу или функцию, которая, учитывая непустое имя пользователя в виде строки, «гекса-сжимает» имя пользователя:
- Если его можно интерпретировать как шестнадцатеричное целое число, добавьте 1, интерпретируйте как шестнадцатеричное и затем выведите результат как основание 10.
- В противном случае просто верните строку без изменений.
Это код-гольф , поэтому выигрывает самое короткое решение (в байтах)! Встроенные функции преобразования базы разрешены.
Тестовые случаи
Вы можете предположить, что любые результирующие целые числа находятся в пределах стандартного целочисленного диапазона вашего языка.
Как и имена пользователей в большинстве систем обмена сообщениями, входные строки будут содержать только буквенно-цифровые символы и подчеркивания.
Помните, что вам всегда нужно добавить ведущий 1
перед преобразованием!
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Для справки, вот реализация Python 3, которую я использовал для тестовых случаев (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