Submission details
Task:Maalaus
Sender:Jaksu
Submission time:2025-10-30 21:39:16 +0200
Language:Rust (2021)
Status:COMPILE ERROR

Compiler report

error[E0425]: cannot find value `colors` in this scope
  --> input/code.rs:96:18
   |
96 |     for color in colors {
   |                  ^^^^^^
   |
help: the binding `colors` is available in a different scope in the same function
  --> input/code.rs:33:17
   |
33 |         let mut colors: Vec<usize> = vec!();
   |                 ^^^^^^

error: aborting due to previous error

For more information about this error, try `rustc --explain E0425`.

Code

use std::io;

fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read input");

    let startdata: Vec<usize> = input.split_ascii_whitespace().map(|e| e.parse::<usize>().unwrap()).collect();

    if startdata[2] == 1 {
        let mut color: usize = 0;
        let mut onerowvector: Vec<usize> = vec!();
        let mut onecolvector: Vec<usize> = vec!();
        for step in 1..(startdata[3]+1) {
            let mut stepinput = String::new();
            io::stdin().read_line(&mut stepinput).expect("Failed to read input");

            let stepdata = parse_input(&stepinput);
            if stepdata.2 {
                if !onerowvector.contains(&stepdata.0) {
                    color += startdata[1];
                    color -= onecolvector.len();
                    onerowvector.push(stepdata.0);
                }
            } else {
                if !onecolvector.contains(&stepdata.0) {
                    color += startdata[0];
                    color -= onerowvector.len();
                    onecolvector.push(stepdata.0);
                }
            }
        }
    } else {
        let mut colors: Vec<usize> = vec!();
        for color in 0..startdata[2] {
            colors.push(0);
        }
        let mut rowvector: Vec<(usize, usize, usize)> = vec!();
        let mut colvector: Vec<(usize, usize, usize)> = vec!();
        for step in 1..(startdata[3]+1) {
            let mut stepinput = String::new();
            io::stdin().read_line(&mut stepinput).expect("Failed to read input");

            let stepdata = parse_input(&stepinput);

            if stepdata.2 {
                let mut targetstep = 0;
                let mut targetcolor = startdata[2];
                colors[stepdata.1] += startdata[1];
                rowvector.push((stepdata.0, stepdata.1, step));
                for rownum in (0..(rowvector.len()-1)).rev() {
                    if rowvector[rownum].0 == stepdata.0 {
                        targetcolor = rowvector[rownum].1;
                        targetstep = rowvector[rownum].2;
                        rowvector[rownum].2 = 0;
                        break;
                    }
                }            for col in colvector.iter().rev() {                if col.2 != 0 {                    if col.2 < targetstep {                        break;
                        } else {
                            colors[col.1] -= 1;
                            if targetcolor != startdata[2] {
                                colors[targetcolor] += 1;
                            }
                        }
                    }
                }
                if targetcolor != startdata[2] {
                    colors[targetcolor] -= startdata[1];
                }
            } else {
                let mut targetstep = 0;
                let mut targetcolor = startdata[2];
                colors[stepdata.1] += startdata[0];
                colvector.push((stepdata.0, stepdata.1, step));
                for colnum in (0..(colvector.len()-1)).rev() {
                    if colvector[colnum].0 == stepdata.0 {
                        targetcolor = colvector[colnum].1;
                        targetstep = colvector[colnum].2;
                        colvector[colnum].2 = 0;
                        break;
                    }
                }            for row in rowvector.iter().rev() {                if row.2 != 0 {                    if row.2 < targetstep {                        break;
                        } else {
                            colors[row.1] -= 1;
                            if targetcolor != startdata[2] {
                                colors[targetcolor] += 1;
                            }
                        }
                    }
                }
                if targetcolor != startdata[2] {
                    colors[targetcolor] -= startdata[0];
                }
            }   
        }
    }
    for color in colors {
        println!("{}", color);
    }
}

pub fn parse_input(input: &String) -> (usize, usize, bool) {
    let datavector: Vec<&str> = input.split_ascii_whitespace().collect();
    let command = match datavector[0] {
        "R" => true,
        "C" => false,
        _ => false,
    };
 
    let index = datavector[1].parse::<usize>().unwrap();
    let color = datavector[2].parse::<usize>().unwrap();
 
    return (index-1, color-1, command);
}