0x用户名
有太多人在使用消息传递服务,以至于他们用光了存储所有用户名的空间!为了解决这个问题,他们将在可能的情况下开始以十六进制存储用户名。
如果用户名仅包含字符0123456789ABCDEF
(不区分大小写),则可以将其转换为十六进制并存储为整数。例如,用户名ba5eba11
可以解释为0xBA5EBA11
十六进制整数。
但是呢05AB1E
?那是一个前导零,它将丢失。因此,无论何时转换用户名,都必须1
在将其读取为整数之前确保在前面加上a 。
挑战
您的任务是编写一个给定非空用户名作为字符串的程序或函数,以“六压缩”用户名:
- 如果可以将其解释为十六进制整数,则将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