思路
- 一步步来
- 字符排序使用 codePointAt
- 合并后遍历,逐个判断是否需要转化,需要则转为二进制字符串并且保持 4 位,缺位补 0,翻转转二进制,再转 16 进制,再大写
while(input = readline()) {
const [a, b] = input.split(' ');
let result = '';
// step 1
let str = a + b;
// step 2
let idx = 0;
let oddArr = [];
let evenArr = [];
while (idx !== str.length) {
if (idx % 2 === 0) {
evenArr.push(str[idx]);
} else {
oddArr.push(str[idx]);
}
idx++;
}
oddArr.sort((a, b) => a.codePointAt() - b.codePointAt());
evenArr.sort((a, b) => a.codePointAt() - b.codePointAt());
while (idx !== 0) {
result += (str.length - idx) % 2 === 0 ? evenArr.shift() : oddArr.shift();
idx--;
}
// step 3
let last = '';
while (idx !== result.length) {
let i = result[idx];
if((i > 'F' && i < 'a') || i > 'f') {
last += i;
} else {
let temp = [...parseInt(i, 16).toString(2).padStart(4, '0')].reverse().join('');
last += parseInt(temp, 2).toString('16').toUpperCase();
}
idx++;
}
console.log(last);
}