| Task: | Tulkki |
| Sender: | wolruso |
| Submission time: | 2025-10-29 22:13:15 +0200 |
| Language: | Rust (2021) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 12 |
| #2 | ACCEPTED | 32 |
| #3 | ACCEPTED | 56 |
| 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.01 s | 3 | details |
| #16 | ACCEPTED | 0.00 s | 3 | details |
| #17 | ACCEPTED | 0.54 s | 3 | details |
| #18 | ACCEPTED | 0.00 s | 3 | details |
Code
use std::io::stdin;
#[derive(PartialEq, Clone, Copy)]
enum CommandType {
NULL,
INCREASE,
CLEAR,
PRINT,
REPEAT,
}
struct CommandTree {
typ: CommandType,
args: usize,
children: Vec<CommandTree>,
parent: Option<*mut CommandTree>,
}
fn main() {
let mut vars = [0; 26];
let mut command_tree = CommandTree {
typ: CommandType::NULL,
args: 0,
children: Vec::new(),
parent: None,
};
let mut cmd = &mut command_tree as *mut CommandTree;
let mut current_cmd = 1001;
unsafe {
for ln in stdin().lines() {
let l = ln.unwrap();
let tokens = l.split_ascii_whitespace();
for token in tokens {
let i = token.find('#');
let mut t = token;
if let Some(indx) = i {
if indx == 0 {
break;
} else {
t = &t[0..indx];
}
}
if current_cmd == 1001 {
match t {
"INCREASE" => {
(*cmd).children.push(CommandTree {
typ: CommandType::INCREASE,
args: 0,
children: Vec::new(),
parent: Some(cmd),
});
current_cmd = (*cmd).children.len() - 1;
}
"CLEAR" => {
(*cmd).children.push(CommandTree {
typ: CommandType::CLEAR,
args: 0,
children: Vec::new(),
parent: Some(cmd),
});
current_cmd = (*cmd).children.len() - 1;
}
"PRINT" => {
(*cmd).children.push(CommandTree {
typ: CommandType::PRINT,
args: 0,
children: Vec::new(),
parent: Some(cmd),
});
current_cmd = (*cmd).children.len() - 1;
}
"REPEAT" => {
(*cmd).children.push(CommandTree {
typ: CommandType::REPEAT,
args: 0,
children: Vec::new(),
parent: Some(cmd),
});
current_cmd = (*cmd).children.len() - 1;
}
")" => {
cmd = (*cmd).parent.unwrap();
current_cmd = 1001;
}
_ => {}
}
} else {
let v = (t.as_bytes()[0] - 'A' as u8) as usize;
(*cmd).children[current_cmd].args = v;
if let CommandType::REPEAT = (*cmd).children[current_cmd].typ {
cmd = &mut (*cmd).children[current_cmd] as *mut CommandTree;
}
current_cmd = 1001;
}
if let Some(_) = i {
break;
}
}
}
}
process_commands(&command_tree, &mut vars);
}
fn process_commands(cmd: &CommandTree, vars: &mut [usize; 26]) {
let times;
if let CommandType::REPEAT = cmd.typ {
times = vars[cmd.args];
} else {
times = 1;
}
for _ in 0..times {
for c in &cmd.children {
match c.typ {
CommandType::INCREASE => vars[c.args] += 1,
CommandType::CLEAR => vars[c.args] = 0,
CommandType::PRINT => println!("{}", vars[c.args]),
CommandType::REPEAT => {
process_commands(&c, vars);
}
_ => {}
}
}
}
}
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 ... |
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 ... |
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 ... |
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 ... |
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 ... |
