思路:

  1. 分割奇偶数组,分别排序后填回再进行转换,
  2. 由于是16位按照8421码逆序之后变换字符,所以可以先排除对称内容:0000,0110,1001,1111,所以十六组实际上可以只做十二组 match
  3. 但是要记得 f 要转换为 F,所以需要十三组 match .
  4. 对于 ascii 码表要熟记。

alt

代码:

use std::io::{self, *};

fn main() {
    let stdin = io::stdin();
    for line in stdin.lock().lines() {
        let ll = line.unwrap();
        let mut v = Vec::from(ll.split(" ").collect::<String>());
        let l = v.len();
        if l > 2 {
            let mut odd = vec![];
            let mut eve = vec![];
            let mut i = 0;
            while i < l {
                eve.push(v[i]);
                i += 2;
            }
            i = 1;
            while i < l {
                odd.push(v[i]);
                i += 2;
            }
            eve.sort();
            odd.sort();
            i = 0;
            while i < eve.len() {
                if 2 * i < l {
                    v[2 * i] = eve[i];   
                }
                i += 1;
            }
            i = 0;
            while i < odd.len() {
                if 2 * i + 1 < l {
                    v[2 * i + 1] = odd[i];   
                }
                i += 1;
            }
        }
        for i in 0..l {
            v[i] = match v[i] {
                49 => 56,// 1 => 8 
                50 => 52,// 2 => 4
                51 => 67,// 3 => C
                52 => 50,// 4 => 2 
                53 => 65,// 5 => A
                55 => 69,// 7 => E
                56 => 49,// 8 => 1
                65 | 97 => 53,//A|a => 5
                66 | 98 => 68,//B|b => D
                67 | 99 => 51,//C|c => 3
                68 | 100 => 66,//D|d => B 
                69 | 101 => 55,//E|e => 7
                102 => 70,//f => F
                _ => v[i],
            };
        }
        for i in 0..l {
            print!("{}",char::from(v[i]));
        }
    }
}