Submission details
Task:Tulkki
Sender:xheater
Submission time:2025-11-04 18:01:10 +0200
Language:Rust (2021)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#20.00 s1, 2, 3details
#3ACCEPTED0.00 s1, 2, 3details
#4ACCEPTED0.00 s1, 2, 3details
#5ACCEPTED0.00 s1, 2, 3details
#6ACCEPTED0.00 s1, 2, 3details
#7ACCEPTED0.00 s2, 3details
#8ACCEPTED0.00 s2, 3details
#9ACCEPTED0.00 s2, 3details
#10ACCEPTED0.00 s2, 3details
#11ACCEPTED0.00 s2, 3details
#12ACCEPTED0.00 s2, 3details
#13ACCEPTED0.00 s3details
#14ACCEPTED0.00 s3details
#15ACCEPTED0.02 s3details
#16ACCEPTED0.00 s3details
#17ACCEPTED0.04 s3details
#18ACCEPTED0.01 s3details

Code

use std::{char, collections::HashMap, io::{self, BufRead}};
#[derive(Debug)]
enum OPERATION{
    CLEAR(char),
    PRINT(char),
    INCREASE(char),
    REPEAT(char, Vec<OPERATION>),
}
fn run_operations(list: &Vec<OPERATION>, map: &mut HashMap<char,i32>){
    for command in list{
        match command {
            OPERATION::CLEAR(char) => if let Some(juusto) = map.get_mut(char){*juusto = 0},
            OPERATION::PRINT(char) => if let Some(juusto) = map.get_mut(char){print!("{} ", juusto)},
            OPERATION::INCREASE(char) => if let Some(juusto) = map.get_mut(char){*juusto += 1},
            OPERATION::REPEAT(char , juustot) => if let Some(juusto) = map.get_mut(char){let thing = *juusto as usize; for _i in 0..thing{run_operations(juustot, map);}},
        }
    }
}

fn find_match_index(txt: &Vec<char>, index:usize)->usize{
    let mut count = 1;
    let mut i = index + 1;
    while count != 0{
        if txt.len() > i{
            if txt[i] == '('{
                count += 1;
            }else if txt[i] == ')'{
                count -= 1;
            }
            i += 1;
        }else{
            //print!("error");
            break;
        }
    }
    return i-1;
}
fn string_to_operation(text: Vec<char>, start:usize, finish:usize) -> Vec<OPERATION>{
    let mut rtrn: Vec<OPERATION> = Vec::new();
    let mut j = start;
    while j < finish{
        if j + 6 < text.len(){
            if text[j] == 'C' && text[j+1] == 'L'{
                rtrn.push(OPERATION::CLEAR(text[j + 6]));
            }
            else if text[j] == 'P' && text[j+1] == 'R'{
                rtrn.push(OPERATION::PRINT(text[j + 6]));
            }
            else if text[j] == 'I' && text[j+1] == 'N' && text[j+2] == 'C'{
                rtrn.push(OPERATION::INCREASE(text[j + 9]));
            }
            else if text[j] == 'R' && text[j+1] == 'E' && text[j+2] == 'P'{
                let end:usize =find_match_index(&text, j + 16);
                rtrn.push(OPERATION::REPEAT(text[j + 7], string_to_operation(text.clone(), j + 16, end-1)));
                j = end;
            }
        }
        else{
            //print!("problem");
        }
        j += 1;
    }
    return rtrn;
}
fn main(){
    let mut variables: HashMap<char, i32> = HashMap::new();
    let alphabets: Vec<char> = vec!['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
    for letter in alphabets{
        variables.insert(letter, 0);
    }
    let stdin = io::stdin();
    let mut lines: Vec<String> = Vec::new();

    for line in stdin.lock().lines() {
        let l = line.unwrap();
        lines.push(l);
    }
    lines.retain(|l| !l.is_empty());
    lines.retain(|l| l.chars().next().unwrap() != '#');

    let input = lines.join(" ");
    //print!("{}", input);
    let chars:Vec<char> = input.chars().collect();
    //print!("{:?}", chars);
    let index = 0;
    let length = chars.len();
    let _ops= string_to_operation(chars, index, length);
    //println!("{:?}", _ops);
    run_operations(&_ops,&mut variables);
}

Test details

Test 1 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
PRINT X
INCREASE X
PRINT X
INCREASE X
PRINT X
...

correct output
0 1 2 0 

user output
0 1 2 0 

Test 2 (public)

Group: 1, 2, 3

Verdict:

input
INCREASE
X
# aybabtu
   PRINT    X
INCREASE # test
...

correct output
1 3 

user output

Feedback: Output is shorter than expected

Test 3 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
# Create number 3
INCREASE X
INCREASE X
INCREASE X

...

correct output

user output

Test 4 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
INCREASE A
PRINT A
INCREASE B
PRINT B
INCREASE C
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 5 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
INCREASE X
INCREASE X
INCREASE X
INCREASE X
INCREASE X
...

correct output
999 

user output
999 

Test 6 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
PRINT X
PRINT X
PRINT X
PRINT X
PRINT X
...

correct output
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

user output
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

Test 7 (public)

Group: 2, 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
5 5 5 5 5 

user output
5 5 5 5 5 

Test 8 (public)

Group: 2, 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
0 0 0 0 0 

user output
0 0 0 0 0 

Test 9 (public)

Group: 2, 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
6 7 8 9 10 

user output
6 7 8 9 10 

Test 10 (public)

Group: 2, 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
5 5 

user output
5 5 

Test 11 (public)

Group: 2, 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
20 

user output
20 

Test 12 (public)

Group: 2, 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A

INCREASE B
INCREASE B
...

correct output
42 

user output
42 

Test 13 (public)

Group: 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 

user output
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 

Test 14 (public)

Group: 3

Verdict: ACCEPTED

input
# Create number 3
INCREASE A INCREASE A INCREASE...

correct output
12 

user output
12 

Test 15 (public)

Group: 3

Verdict: ACCEPTED

input
INCREASE X
INCREASE X
INCREASE X
INCREASE X
INCREASE X
...

correct output
531441 

user output
531441 

Test 16 (public)

Group: 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
1337 

user output
1337 

Test 17 (public)

Group: 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A

REPEAT A TIMES (
    REPEAT A TIMES (
...

correct output
1 2 1 2 1 1 3 4 3 4 3 4 3 4 3 ...

user output
1 2 1 2 1 1 3 4 3 4 3 4 3 4 3 ...

Test 18 (public)

Group: 3

Verdict: ACCEPTED

input
# Efficient algorithm for find...

correct output
2 3 5 7 11 13 17 19 23 29 31 3...

user output
2 3 5 7 11 13 17 19 23 29 31 3...