知识点

str.padStart(4, '0') 表示在str的前面填充0直到str的长度为4,同理还有padEnd

arr = arr.filter(Boolean)表示过滤掉空字符,不改变原数组

parseInt(str, 2)表示将str由二进制变为十进制

parseInt(str, 16)表示将str由十六进制变为十进制

str.toString(2)表示将str由十进制变为二进制

str.toString(16)表示将str由十进制变为十六进制

其他非十进制转为其他非十进制,需得先转为十进制,再转为其他进制

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    let str = await readline()
    // 第一步
    let arr = str.replace(' ', '').split('')
    let len = arr.length
    let arr1 = [], arr2 = []
    while(arr.length) {
        arr1.push(arr.shift())
        arr2.push(arr.shift())
    }

    // 第二步
    arr1.sort()
    arr2 = arr2.filter(Boolean).sort()
    while(arr.length < len) {
        arr.push(arr1.shift())
        arr.push(arr2.shift())
    }
    arr = arr.filter(Boolean) // 过滤掉空值

    // 第三步
    let res = arr.map(el => 
        el = parseInt(el, 16) ? parseInt(parseInt(el, 16).toString(2).padStart(4, '0').split('').reverse().join(''), 2).toString(16).toUpperCase() : el
    ).join('')
    console.log(res)
}()