思路:
- 分割奇偶数组,分别排序后填回再进行转换,
- 由于是16位按照8421码逆序之后变换字符,所以可以先排除对称内容:0000,0110,1001,1111,所以十六组实际上可以只做十二组 match
- 但是要记得 f 要转换为 F,所以需要十三组 match .
- 对于 ascii 码表要熟记。
代码:
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]));
}
}
}