CSES - Datatähti 2022 loppu - Results
Submission details
Task:Kanava
Sender:xnor
Submission time:2022-01-22 16:26:33 +0200
Language:Rust
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttimescore
#10.01 s0details

Code

use std::io::{stdin, BufRead, BufReader};

fn main() {
    let mut stdin = BufReader::new(stdin());
    let mut cur_line = String::new();
    stdin.read_line(&mut cur_line).unwrap();

    if cur_line.trim() == "1" {
        cur_line.clear();
        stdin.read_line(&mut cur_line).unwrap();
        let k: usize = cur_line.trim().parse().unwrap();
        for _ in 0..k {
            let mut input = String::new();
            stdin.read_line(&mut input).unwrap();
            input = input.trim().into();

            let l = input.len() as u8;
            print!("{}", l / 6);
            print_base_3((l % 6) / 3);
            print!("{}", l % 2);

            for cp in input.bytes() {
                let c = cp - b'a';
                print_base_3(c / 12);
                print!("{}", (c % 12) / 6);
                print_base_3((c % 6) / 2);
                print!("{}", c % 2);
            }
            println!()
        }
    } else {
        let mut input = String::new();
        stdin.read_line(&mut input).unwrap();
        input = input.trim().into();

        let mut output = Vec::new();

        let mut cs = input.chars().collect::<Vec<_>>();

        while !cs.is_empty() {
            let mut cur = String::new();
            let l = 6 * base_2_to_int(cs[0]) + 2 * base_3_to_int(cs[1]) + base_2_to_int(cs[2]);
            let mut i = 3;

            for _ in 0..l {
                let c = 12 * base_3_to_int(cs[i])
                    + 6 * base_2_to_int(cs[i + 1])
                    + 2 * base_3_to_int(cs[i + 2])
                    + base_2_to_int(cs[i + 3]);

                cur.push((c + b'a') as char);

                i += 4;
            }

            cs = cs[i..].into();
            output.push(cur);
        }

        println!("{}", output.len());
        for s in output {
            println!("{}", s);
        }
    }
}

fn print_base_3(x: u8) {
    match x {
        0 => print!("0"),
        1 => print!("1"),
        2 => print!("_"),
        _ => (),
    }
}

fn base_2_to_int(x: char) -> u8 {
    match x {
        '0' => 0,
        '1' => 1,
        _ => 0,
    }
}

fn base_3_to_int(x: char) -> u8 {
    match x {
        '0' => 0,
        '1' => 1,
        '_' => 2,
        _ => 0,
    }
}

Test details

Test 1

Verdict:

input
1
520
cbmcsyv
uvub
yh
...

correct output
(empty)

user output
(empty)

Error:
thread 'main' panicked at 'index out of bounds: the len is 24 but the index is 24', input/code.rs:47:41
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace