fn s2n(s: &str) -> u32 {
s.bytes().fold(0, |acc, b| acc * 26 + (b - b'A'+ 1) as u32)
}
fn n2s(n: u32) -> String {
fn aux(mut acc: String, n: u32) -> String {
if n < 1 {acc} else {
acc.insert(0, (((n - 1) % 26) as u8 + b'A') as char);
aux(acc, (n - 1) / 26)
}
}
aux("".to_string(), n)
}
fn main() {
for s in vec!("A", "AA", "ABC") {println!("{} => {}", s, s2n(s))};
for n in vec!(26, 266379) {println!("{} => {}", n, n2s(n))}
}
Zm4gczJuKHM6ICZzdHIpIC0+IHUzMiB7CiAgICBzLmJ5dGVzKCkuZm9sZCgwLCB8YWNjLCBifCBhY2MgKiAyNiArIChiIC0gYidBJysgMSkgYXMgdTMyKQp9CmZuIG4ycyhuOiB1MzIpIC0+IFN0cmluZyB7CiAgICBmbiBhdXgobXV0IGFjYzogU3RyaW5nLCBuOiB1MzIpIC0+IFN0cmluZyB7CiAgICAgICAgaWYgbiA8IDEge2FjY30gZWxzZSB7CiAgICAgICAgICAgIGFjYy5pbnNlcnQoMCwgKCgobiAtIDEpICUgMjYpIGFzIHU4ICsgYidBJykgYXMgY2hhcik7CiAgICAgICAgICAgIGF1eChhY2MsIChuIC0gMSkgLyAyNikKICAgICAgICB9CiAgICB9CiAgICBhdXgoIiIudG9fc3RyaW5nKCksIG4pCn0KZm4gbWFpbigpIHsKICAgIGZvciBzIGluIHZlYyEoIkEiLCAiQUEiLCAiQUJDIikge3ByaW50bG4hKCJ7fSA9PiB7fSIsIHMsIHMybihzKSl9OwogICAgZm9yIG4gaW4gdmVjISgyNiwgMjY2Mzc5KSB7cHJpbnRsbiEoInt9ID0+IHt9IiwgbiwgbjJzKG4pKX0KfQo=