0xНазви користувачів
Є стільки людей, які використовують послугу обміну повідомленнями, що у них не вистачає місця для зберігання всіх імен користувачів! Щоб виправити це, вони почнуть зберігати імена користувачів як шістнадцяткові, де це можливо.
Якщо ім'я користувача складається лише з символів 0123456789ABCDEF
(нечутливих до регістру), воно може бути перетворене в шістнадцятковий і збережене як ціле число. Наприклад, ім'я користувача ba5eba11
можна інтерпретувати як 0xBA5EBA11
шістнадцяткове число.
А як же 05AB1E
? Ось отриманий провідний нуль, який був би втрачений. Отже, кожного разу, коли ми перетворюємо ім'я користувача, ми обов'язково додаємо a 1
перед тим, як прочитати його як ціле число.
Змагання
Ваше завдання - написати програму або функцію, яка, надаючи непусте ім'я користувача як рядок, "hexa-стискає" ім'я користувача:
- Якщо це можна інтерпретувати як шістнадцяткове ціле число, додайте 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, яку я використовував для тестових випадків (необроблений):
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name