| Task: | Tulkki |
| Sender: | vulpesomnia |
| Submission time: | 2025-10-27 20:36:11 +0200 |
| Language: | Rust (2021) |
| Status: | READY |
| Result: | 44 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 12 |
| #2 | ACCEPTED | 32 |
| #3 | TIME LIMIT EXCEEDED | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #2 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #3 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #4 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #5 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #6 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
| #7 | ACCEPTED | 0.00 s | 2, 3 | details |
| #8 | ACCEPTED | 0.00 s | 2, 3 | details |
| #9 | ACCEPTED | 0.00 s | 2, 3 | details |
| #10 | ACCEPTED | 0.00 s | 2, 3 | details |
| #11 | ACCEPTED | 0.00 s | 2, 3 | details |
| #12 | ACCEPTED | 0.00 s | 2, 3 | details |
| #13 | ACCEPTED | 0.00 s | 3 | details |
| #14 | ACCEPTED | 0.00 s | 3 | details |
| #15 | ACCEPTED | 0.04 s | 3 | details |
| #16 | ACCEPTED | 0.00 s | 3 | details |
| #17 | TIME LIMIT EXCEEDED | -- | 3 | details |
| #18 | ACCEPTED | 0.02 s | 3 | details |
Compiler report
warning: variant `REPEAT_START` should have an upper camel case name --> input/code.rs:9:5 | 9 | REPEAT_START, | ^^^^^^^^^^^^ help: convert the identifier to upper camel case: `RepeatStart` | = note: `#[warn(non_camel_case_types)]` on by default warning: variant `REPEAT_END` should have an upper camel case name --> input/code.rs:10:5 | 10 | REPEAT_END, | ^^^^^^^^^^ help: convert the identifier to upper camel case: `RepeatEnd` warning: value assigned to `data` is never read --> input/code.rs:49:14 | 49 | (output, data) = run(&all_components, output, data); | ^^^^ | = help: maybe it is overwritten before being read? = note: `#[warn(unused_assignments)]` on by default warning: 3 warnings emitted
Code
use std::io::{self, Read};
#[derive(PartialEq, Copy, Clone, Debug)]
enum Component {
INCREASE,
CLEAR,
PRINT,
REPEAT,
REPEAT_START,
REPEAT_END,
VARIABLE(usize),
}
fn main() {
let mut input = String::new();
io::stdin().read_to_string(&mut input).unwrap();
let lines: Vec<&str> = input.lines().collect();
let mut all_components: Vec<Component> = Vec::with_capacity(1000);
for line in lines {
let mut line2 = line.to_string();
let mut comment_index: usize = 0;
// Remove useless stuff:
for ch in line2.chars() {
if ch == '#' {
line2.replace_range(comment_index..line.len(), "");
break;
}
comment_index += 1;
}
line2 = line2.replace("TIMES", "");
let components: Vec<String> = line2.split_whitespace().map(|s| s.to_string()).collect();
for component in components {
all_components.push(match component.as_str() {
"INCREASE" => Component::INCREASE,
"CLEAR" => Component::CLEAR,
"REPEAT" => Component::REPEAT,
"(" => Component::REPEAT_START,
")" => Component::REPEAT_END,
"PRINT" => Component::PRINT,
_ => Component::VARIABLE(get_variable_index(&component)),
})
}
}
let mut data = [0; 26];
let mut output = String::new();
(output, data) = run(&all_components, output, data);
output.pop();
println!("{}", output);
}
fn get_variable_index(a: &String) -> usize {
return ((a.chars().next().unwrap().to_ascii_lowercase()) as u8 - b'a') as usize;
}
// Use for recursion.
fn run(components: &Vec<Component>, mut output: String, mut data: [i32; 26]) -> (String, [i32; 26]) {
let mut repeat_amount = 0;
let mut catch_components = false;
let mut caught_components: Vec<Component> = Vec::with_capacity(1000);
let mut repeat_check = 1;
for (i, component) in components.iter().enumerate() {
if catch_components {
if *component == Component::REPEAT_START {
repeat_check += 1;
}
if *component == Component::REPEAT_END {
repeat_check -= 1;
}
if repeat_check == 0 {
catch_components = false;
for _ in 0..repeat_amount {
(output, data) = run(&caught_components, output, data)
}
repeat_check = 1;
}
caught_components.push(*component);
} else {
match component {
Component::INCREASE => data[return_index(&components[i+1])] += 1,
Component::CLEAR => data[return_index(&components[i+1])] = 0,
Component::PRINT => output = format!("{}{} ", output, data[return_index(&components[i+1])]),
Component::REPEAT => repeat_amount = data[return_index(&components[i+1])],
Component::REPEAT_START => {
catch_components = true;
caught_components = Vec::with_capacity(1000);
},
_ => continue,
}
}
}
return (output, data);
}
fn return_index(comp: &Component) -> usize {
if let Component::VARIABLE(idx) = comp {
return *idx;
} else {
return 0;
}
}
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: ACCEPTED
| input |
|---|
| INCREASE X # aybabtu PRINT X INCREASE # test ... |
| correct output |
|---|
| 1 3 |
| user output |
|---|
| 1 3 |
Test 3 (public)
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| # Create number 3 INCREASE X INCREASE X INCREASE X ... |
| correct output |
|---|
| 3 |
| user output |
|---|
| 3 |
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: TIME LIMIT EXCEEDED
| 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 |
|---|
| (empty) |
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... |
