思路

  • 一步步来
  • 字符排序使用 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);
}