summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: 3e6e9520a0ce9626b9c2cab0fc25036a91a16fd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use std::io::{self, BufRead};

fn read_graph(line: String) -> (usize, Vec<Vec<u8>>) {
    let mut chars: Vec<u8> = Vec::new();
    for character in line.chars() {
        chars.push((character as i32 - 63) as u8);
    }
    // TODO: spec allows multi-byte vector size
    let n = chars[0] as usize;
    let bytes = &chars[1..];

    let mut mat: Vec<Vec<u8>> = vec![vec![0; n]; n];
    let mut i = 0;
    for col in 1..n {
        for row in 0..col {
            let bit: u8 = bytes[i / 6] >> (5 - i % 6) & 1;
            mat[row][col] = bit;
            mat[col][row] = bit;
            i += 1;
        }
    }
    return (n, mat);
}

fn main() {
    let stdin = io::stdin();

    for line in stdin.lock().lines() {
        let (n, mat) = read_graph(line.unwrap());

        println!("Vector of size {}", n);
        for row in 0..n {
            for col in 0..n {
                print!("{} ", mat[row][col]);
            }
            println!("");
        }
    }

}