Write language name in 3D ASCII: Difference between revisions
Content added Content deleted
(Added Rust solution (message is encrypted)) |
|||
Line 2,970: | Line 2,970: | ||
\___\/ |
\___\/ |
||
</pre> |
</pre> |
||
=={{header|Rust}}== |
|||
<lang rust>pub fn char_from_id(id: u8) -> char { |
|||
[' ', '#', '/', '_', 'L', '|', '\n'][id as usize] |
|||
} |
|||
const ID_BITS: u8 = 3; |
|||
pub fn decode(code: &[u8]) -> String { |
|||
let mut ret = String::new(); |
|||
let mut carry = 0; |
|||
let mut carry_bits = 0; |
|||
for &b in code { |
|||
let mut bit_pos = ID_BITS - carry_bits; |
|||
let mut cur = b >> bit_pos; |
|||
let mask = (1 << bit_pos) - 1; |
|||
let id = carry | (b & mask) << carry_bits; |
|||
ret.push(char_from_id(id)); |
|||
while bit_pos + ID_BITS < 8 { |
|||
ret.push(char_from_id(cur & ((1 << ID_BITS) - 1))); |
|||
cur >>= ID_BITS; |
|||
bit_pos += ID_BITS; |
|||
} |
|||
carry = cur; |
|||
carry_bits = 8 - bit_pos; |
|||
} |
|||
ret |
|||
} |
|||
fn main() { |
|||
let code = [ |
|||
72, 146, 36, 0, 0, 0, 0, 0, 0, 0, 128, 196, 74, 182, 41, 1, 0, 0, 0, 0, 0, 0, 160, 196, 77, 0, |
|||
52, 1, 18, 0, 9, 144, 36, 9, 146, 36, 113, 147, 36, 9, 160, 4, 80, 130, 100, 155, 160, 41, 145, |
|||
155, 108, 74, 128, 38, 64, 19, 41, 73, 2, 160, 137, 155, 0, 84, 130, 38, 64, 19, 112, 155, 18, |
|||
160, 137, 155, 0, 160, 18, 42, 73, 18, 36, 73, 2, 128, 74, 76, 1, 0, 40, 128, 219, 38, 104, 219, |
|||
4, 0, 160, 0 |
|||
]; |
|||
println!("{}", decode(&code)); |
|||
}</lang> |
|||
{{out}} |
|||
<pre> ####### ## |
|||
/##___/## /## |
|||
|## |## ## ## ###### ###### |
|||
|####### /## /## ##___/ /_/##/ |
|||
|##__/## |## |##//##### |## |
|||
|## L/## |## |## L___/## |## |
|||
|## L/##L/###### ###### L/## |
|||
L/ L/ L____/ /____/ L/ </pre> |
|||
=={{header|Scala}}== |
=={{header|Scala}}== |