翻转的时候注意会多左移一次,因此需要右移一位来抵消。
u = "".join(input().strip().split())
u_1 = u[0::2] # 奇数位
u_1 = sorted(u_1, key=lambda x:ord(x))
u_2 = u[1::2] # 偶数位
u_2 = sorted(u_2, key=lambda x:ord(x))
ord_a = ord("a")
ord_A = ord("A")
ord_f = ord("f")
ord_F = ord("F")
ord_0 = ord("0")
ord_9 = ord("9")
def process_num(c):
c_num = ord(c)
# 转化为十进制数
dec_num = 0
if ord_0 <= c_num <= ord_9:
dec_num = c_num - ord_0
elif ord_a <= c_num <= ord_f:
dec_num = c_num - ord_a + 10
elif ord_A <= c_num <= ord_F:
dec_num = c_num - ord_A + 10
else:
return c
# 翻转二进制
reverse_num = 0
for _ in range(4): # 十六进制只有4个数字
tmp = dec_num % 2
reverse_num += tmp
dec_num >>= 1
reverse_num <<= 1
reverse_num >>= 1
# 转化为大写的十六进制数
if 0 <= reverse_num <= 9:
result = str(reverse_num)
else:
result = chr(ord_A + reverse_num - 10)
return result
result = []
for each in range(len(u_2)):
result.append(process_num(u_1[each]))
result.append(process_num(u_2[each]))
if len(u_1) > len(u_2):
result.append(process_num(u_1[-1]))
print("".join(result))



京公网安备 11010502036488号