yttria_coding/
graycode.rs1pub fn generate_gray_code(n_bits: u8) -> Vec<u8> {
2 assert!(n_bits > 0);
3
4 if n_bits == 1 {
5 vec![0u8, 1]
6 } else {
7 let last_code = generate_gray_code(n_bits - 1);
8
9 let mut last_code_reversed = last_code.clone();
10 last_code_reversed.reverse();
11
12 for i in last_code_reversed.iter_mut() {
13 *i |= 1 << (n_bits - 1);
14 }
15
16 [last_code, last_code_reversed].concat()
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn test_gray_codes() {
26 let code = generate_gray_code(1);
27 println!("{code:?}");
28
29 let code = generate_gray_code(2);
30 println!("{code:?}");
31
32 let code = generate_gray_code(3);
33 println!("{code:?}");
34 }
35}