0x Tên người dùng
Có rất nhiều người sử dụng dịch vụ nhắn tin đến nỗi họ sắp hết dung lượng để lưu trữ tất cả tên người dùng! Để khắc phục điều này, họ sẽ bắt đầu lưu trữ tên người dùng dưới dạng thập lục phân, nếu có thể.
Nếu tên người dùng chỉ bao gồm các ký tự 0123456789ABCDEF
(không phân biệt chữ hoa chữ thường), nó có thể được chuyển đổi thành số thập lục phân và được lưu dưới dạng số nguyên. Ví dụ: tên người dùng ba5eba11
có thể được hiểu là 0xBA5EBA11
số nguyên thập lục phân.
Nhưng còn cái gì 05AB1E
? Điều đó có một số 0 hàng đầu, sẽ bị mất. Vì vậy, bất cứ khi nào chúng tôi chuyển đổi tên người dùng, chúng tôi đảm bảo đăng ký trước 1
khi đọc nó dưới dạng số nguyên.
Các thách thức
Nhiệm vụ của bạn là viết một chương trình hoặc hàm, với tên người dùng không trống dưới dạng chuỗi, 'hexa-nén' tên người dùng:
- Nếu nó có thể được hiểu là số nguyên thập lục phân, hãy thêm vào số 1, diễn giải dưới dạng thập lục phân, sau đó in kết quả dưới dạng cơ sở 10.
- Nếu không, chỉ cần trả về chuỗi không thay đổi.
Đây là môn đánh gôn , vì vậy giải pháp ngắn nhất (tính bằng byte) sẽ thắng! Chức năng chuyển đổi cơ sở tích hợp được cho phép.
Các trường hợp thử nghiệm
Bạn có thể giả sử rằng mọi số nguyên kết quả nằm trong phạm vi số nguyên chuẩn của ngôn ngữ của bạn.
Giống như tên người dùng trên hầu hết các hệ thống nhắn tin, các chuỗi đầu vào sẽ chỉ chứa các chữ số và dấu gạch dưới.
Hãy nhớ rằng, bạn luôn cần phải thêm một hàng đầu 1
trước khi chuyển đổi!
"ba5eba11" -> 7421737489
"05AB1E" -> 17148702
"dec0de" -> 31375582
"Beef" -> 114415
"da7aba5e" -> 7960443486
"500" -> 5376
"DENNIS" -> "DENNIS"
"Garth" -> "Garth"
"A_B_C" -> "A_B_C"
"0x000" -> "0x000"
Để tham khảo, đây là một triển khai Python 3 tôi đã sử dụng cho các trường hợp thử nghiệm (chưa được xử lý):
import re
def convert_name(name):
if re.fullmatch('^[0-9A-Fa-f]+$', name):
return int('1' + name.upper(), base = 16)
else:
return name