Write language name in 3D ASCII: Difference between revisions

Added Rust solution (message is encrypted)
(Added Rust solution (message is encrypted))
Line 2,970:
\___\/
</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}}==
Anonymous user