70 lines
1.9 KiB
Plaintext
70 lines
1.9 KiB
Plaintext
const ONE: &str = "●";
|
|
const FIVE: &str = "——";
|
|
const ZERO: &str = "Θ";
|
|
|
|
fn main() {
|
|
println!("{}", mayan(4005));
|
|
println!("{}", mayan(8017));
|
|
println!("{}", mayan(326_205));
|
|
println!("{}", mayan(886_205));
|
|
println!("{}", mayan(69));
|
|
println!("{}", mayan(420));
|
|
println!("{}", mayan(1_063_715_456));
|
|
}
|
|
|
|
fn mayan(dec: i64) -> String {
|
|
let mut digits = vec![];
|
|
let mut num = dec;
|
|
while num > 0 {
|
|
digits.push(num % 20);
|
|
num /= 20;
|
|
}
|
|
digits = digits.into_iter().rev().collect();
|
|
let mut boxes = vec!["".to_string(); 6];
|
|
let n = digits.len();
|
|
for (i, digit) in digits.iter().enumerate() {
|
|
if i == 0 {
|
|
boxes[0] = "┏━━━━".to_string();
|
|
if i == n - 1 {
|
|
boxes[0] += "┓";
|
|
}
|
|
} else if i == n - 1 {
|
|
boxes[0] += "┳━━━━┓";
|
|
} else {
|
|
boxes[0] += "┳━━━━";
|
|
}
|
|
for j in 1..5 {
|
|
boxes[j] += "┃";
|
|
let elem = 0.max(digit - (4 - j as i64) * 5);
|
|
if elem >= 5 {
|
|
boxes[j] += &format!("{: ^4}", FIVE);
|
|
} else if elem > 0 {
|
|
boxes[j] += &format!("{: ^4}", ONE.repeat(elem as usize % 15));
|
|
} else if j == 4 {
|
|
boxes[j] += &format!("{: ^4}", ZERO);
|
|
} else {
|
|
boxes[j] += &" ";
|
|
}
|
|
if i == n - 1 {
|
|
boxes[j] += "┃";
|
|
}
|
|
}
|
|
if i == 0 {
|
|
boxes[5] = "┗━━━━".to_string();
|
|
if i == n - 1 {
|
|
boxes[5] += "┛";
|
|
}
|
|
} else if i == n - 1 {
|
|
boxes[5] += "┻━━━━┛";
|
|
} else {
|
|
boxes[5] += "┻━━━━";
|
|
}
|
|
}
|
|
|
|
let mut mayan = format!("Mayan {}:\n", dec);
|
|
for b in boxes {
|
|
mayan += &(b + "\n");
|
|
}
|
|
mayan
|
|
}
|