| Task: | Robotti | 
| Sender: | villsukka | 
| Submission time: | 2024-10-28 23:33:00 +0200 | 
| Language: | Rust (2021) | 
| Status: | READY | 
| Result: | 0 | 
| group | verdict | score | 
|---|---|---|
| #1 | WRONG ANSWER | 0 | 
| #2 | WRONG ANSWER | 0 | 
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #2 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #3 | WRONG ANSWER | 0.00 s | 1, 2 | details | 
| #4 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #5 | WRONG ANSWER | 0.00 s | 1, 2 | details | 
| #6 | TIME LIMIT EXCEEDED | -- | 1, 2 | details | 
| #7 | TIME LIMIT EXCEEDED | -- | 1, 2 | details | 
| #8 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #9 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #10 | WRONG ANSWER | 0.00 s | 1, 2 | details | 
| #11 | TIME LIMIT EXCEEDED | -- | 1, 2 | details | 
| #12 | WRONG ANSWER | 0.00 s | 2 | details | 
| #13 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #14 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #15 | WRONG ANSWER | 0.00 s | 2 | details | 
| #16 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #17 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #18 | WRONG ANSWER | 0.01 s | 2 | details | 
| #19 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #20 | ACCEPTED | 0.00 s | 2 | details | 
| #21 | WRONG ANSWER | 0.01 s | 2 | details | 
| #22 | WRONG ANSWER | 0.01 s | 2 | details | 
| #23 | WRONG ANSWER | 0.01 s | 2 | details | 
| #24 | TIME LIMIT EXCEEDED | -- | 2 | details | 
Compiler report
warning: variants `Left`, `Right`, and `Same` are never constructed
  --> input/code.rs:12:5
   |
11 | enum Direction {
   |      --------- variants in this enum
12 |     Left(i32),
   |     ^^^^
13 |     Right(i32),
   |     ^^^^^
14 |     Same,
   |     ^^^^
   |
   = note: `Direction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
   = note: `#[warn(dead_code)]` on by default
warning: method `get_inner` is never used
  --> input/code.rs:18:8
   |
17 | impl Direction {
   | -------------- method in this implementation
18 |     fn get_inner(&self) -> i32 {
   |        ^^^^^^^^^
warning: 2 warnings emittedCode
use std::io::stdin;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
enum RoomType {
    Robot,
    Coin,
    Empty,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
enum Direction {
    Left(i32),
    Right(i32),
    Same,
}
impl Direction {
    fn get_inner(&self) -> i32 {
        match self {
            Direction::Left(x) => *x,
            Direction::Right(x) => *x,
            Direction::Same => 0,
        }
    }
}
impl From<char> for RoomType {
    fn from(value: char) -> Self {
        match value {
            'R' => RoomType::Robot,
            '*' => RoomType::Coin,
            '.' => RoomType::Empty,
            _ => panic!(),
        }
    }
}
fn main() {
    let mut line = String::new();
    stdin().read_line(&mut line).unwrap();
    let len: usize = line.strip_suffix('\n').unwrap_or(&line).parse().unwrap();
    line = "".to_string();
    stdin().read_line(&mut line).unwrap();
    let arr: Vec<RoomType> = line
        .strip_suffix('\n')
        .unwrap()
        .chars()
        .map(|c| c.into())
        .collect();
    let mut robot_pos = arr
        .iter()
        .position(|x| *x == RoomType::Robot)
        .expect("No robot");
    let mut coin_count = 0;
    let mut steps = 0;
    let mut lp = robot_pos;
    let mut rp = robot_pos;
    let mut right_wall_hit = false;
    let mut left_wall_hit = false;
    loop {
        let left_distance = robot_pos - lp;
        let right_distance = rp - robot_pos;
        if left_wall_hit && right_wall_hit {
            break;
        }
        if left_distance < right_distance && !left_wall_hit {
            lp = match lp.checked_sub(1) {
                Some(x) => x,
                None => {
                    left_wall_hit = true;
                    0
                }
            };
            match arr[lp] {
                RoomType::Coin => {
                    robot_pos = lp;
                    coin_count += 1;
                    steps += left_distance;
                }
                _ => (),
            }
        } else if left_distance == right_distance {
            match (arr[lp] == RoomType::Coin, arr[rp] == RoomType::Coin) {
                (true, true) => break,
                (true, false) => {
                    robot_pos = lp;
                    coin_count += 1;
                    steps += left_distance;
                }
                (false, true) => {
                    robot_pos = rp;
                    coin_count += 1;
                    steps += left_distance;
                }
                (false, false) => {
                    if lp == 0 && rp == len - 1 {
                        break;
                    }
                    if rp < len - 1 {
                        rp += 1
                    };
                    lp = lp.saturating_sub(1);
                }
            }
        } else {
            if rp < len - 1 {
                rp += 1;
            } else {
                right_wall_hit = true;
            }
            match arr[rp] {
                RoomType::Coin => {
                    robot_pos = rp;
                    coin_count += 1;
                    steps += right_distance;
                }
                _ => (),
            }
        }
    }
    println!("{} {}", steps, coin_count);
}
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1 R  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 2
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 10 ...R......  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 3
Group: 1, 2
Verdict: WRONG ANSWER
| input | 
|---|
| 10 **.R...***  | 
| correct output | 
|---|
| 12 5 | 
| user output | 
|---|
| 8 7 | 
Test 4
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 10 ***R******  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 5
Group: 1, 2
Verdict: WRONG ANSWER
| input | 
|---|
| 1000 R................................  | 
| correct output | 
|---|
| 947 9 | 
| user output | 
|---|
| 938 9 | 
Test 6
Group: 1, 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 1000 .................................  | 
| correct output | 
|---|
| 886 9 | 
| user output | 
|---|
| (empty) | 
Test 7
Group: 1, 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 1000 .....*..*....**..**..*......*....  | 
| correct output | 
|---|
| 1287 400 | 
| user output | 
|---|
| (empty) | 
Test 8
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 ************.*****************...  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 9
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 ******************************...  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 10
Group: 1, 2
Verdict: WRONG ANSWER
| input | 
|---|
| 1000 R*****************************...  | 
| correct output | 
|---|
| 999 999 | 
| user output | 
|---|
| 1 999 | 
Test 11
Group: 1, 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 1000 ******************************...  | 
| correct output | 
|---|
| 999 999 | 
| user output | 
|---|
| (empty) | 
Test 12
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 10000 .......**........*...........*...  | 
| correct output | 
|---|
| 10971 999 | 
| user output | 
|---|
| 9974 999 | 
Test 13
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 10000 *..*....*......*.....*..*........  | 
| correct output | 
|---|
| 9999 999 | 
| user output | 
|---|
| (empty) | 
Test 14
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 10000 *.*.*...**.*...*....**.**.**.....  | 
| correct output | 
|---|
| 18766 5000 | 
| user output | 
|---|
| (empty) | 
Test 15
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 10000 R*****************************...  | 
| correct output | 
|---|
| 9999 9999 | 
| user output | 
|---|
| 1 9999 | 
Test 16
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 10000 ******************************...  | 
| correct output | 
|---|
| 9999 9999 | 
| user output | 
|---|
| (empty) | 
Test 17
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 .................................  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| (empty) | 
Test 18
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 200000 .................................  | 
| correct output | 
|---|
| 299934 10000 | 
| user output | 
|---|
| 289936 10000 | 
Test 19
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 **.***....**..**.....***.*..*....  | 
| correct output | 
|---|
| 299998 100000 | 
| user output | 
|---|
| (empty) | 
Test 20
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 200000 ******************************...  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 21
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 200000 R................................  | 
| correct output | 
|---|
| 133765 3 | 
| user output | 
|---|
| 133762 3 | 
Test 22
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 200000 R................................  | 
| correct output | 
|---|
| 199982 5000 | 
| user output | 
|---|
| 194982 5000 | 
Test 23
Group: 2
Verdict: WRONG ANSWER
| input | 
|---|
| 200000 R*****************************...  | 
| correct output | 
|---|
| 199999 199999 | 
| user output | 
|---|
| 1 199999 | 
Test 24
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 ******************************...  | 
| correct output | 
|---|
| 199999 199999 | 
| user output | 
|---|
| (empty) | 
