| Task: | Robotti | 
| Sender: | leonard | 
| Submission time: | 2024-10-30 17:52:12 +0200 | 
| Language: | Rust (2021) | 
| Status: | READY | 
| Result: | 30 | 
| group | verdict | score | 
|---|---|---|
| #1 | ACCEPTED | 30 | 
| #2 | TIME LIMIT EXCEEDED | 0 | 
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #2 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #3 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #4 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #5 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #6 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #7 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #8 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #9 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #10 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #11 | ACCEPTED | 0.00 s | 1, 2 | details | 
| #12 | ACCEPTED | 0.01 s | 2 | details | 
| #13 | ACCEPTED | 0.00 s | 2 | details | 
| #14 | ACCEPTED | 0.02 s | 2 | details | 
| #15 | ACCEPTED | 0.08 s | 2 | details | 
| #16 | ACCEPTED | 0.07 s | 2 | details | 
| #17 | ACCEPTED | 0.00 s | 2 | details | 
| #18 | ACCEPTED | 0.07 s | 2 | details | 
| #19 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #20 | ACCEPTED | 0.01 s | 2 | details | 
| #21 | ACCEPTED | 0.00 s | 2 | details | 
| #22 | ACCEPTED | 0.02 s | 2 | details | 
| #23 | TIME LIMIT EXCEEDED | -- | 2 | details | 
| #24 | TIME LIMIT EXCEEDED | -- | 2 | details | 
Code
use rand::prelude::*;
fn main() {
    let debug_mode = std::env::args().any(|x| x == "debug".to_string());
    let auto = std::env::args().any(|x| x == "auto".to_string());
    let mut n: String = "".into();
    std::io::stdin().read_line(&mut n).expect("IO Ongelma :(");
    let n: usize = n.trim().parse().expect("Eka rivi ei ollut numero");
    let mut line: String = "".into();
    if !auto {
        // **..**..R..** juttu
        std::io::stdin()
            .read_line(&mut line)
            .expect("IO Ongelma :(");
    } else {
        let mut rng = rand::thread_rng();
        for _ in 0..n {
            let num = rng.gen_range(0.0..=1.);
            if num < 0.3 {
                line.push('*');
            } else {
                line.push('.');
            }
        }
        let half = n / 2;
        line.replace_range(half..=half, "R");
    }
    let mut askeleet = 0;
    let mut kolikot = 0;
    let mut robotti_pos = pos_of_c(&line, 'R')
        .first()
        .expect("Ei R:ää (robottia)")
        .clone();
    let mut kolikko_positions = pos_of_c(&line, '*').clone();
    let time = get_timer();
    while let Some((close, close_ind)) = closest(&robotti_pos, &kolikko_positions) {
        // Optimisaatio
        let diff = close as i32 - robotti_pos as i32;
        askeleet += diff.abs();
        robotti_pos = (robotti_pos as i32 + diff) as u32;
        kolikot += 1;
        kolikko_positions.remove(close_ind);
    }
    println!("{} {}", askeleet, kolikot);
    if debug_mode {
        println!("Kesti {}", get_timer() - time);
    }
}
fn get_timer() -> f64 {
    std::time::SystemTime::now()
        .duration_since(std::time::UNIX_EPOCH)
        .expect("Time went backwards")
        .as_secs_f64()
}
#[inline(always)]
fn closest(a: &u32, b: &[u32]) -> Option<(u32, usize)> {
    let mut c = u32::MAX;
    let mut c_index = 0;
    // Tää meinaa että onko duplikaatti positio
    let mut wurst = false;
    if b.is_empty() {
        return None;
    }
    for i in 0..b.len() {
        let diff = *a as i32 - b[i] as i32;
        let diff = if diff < 0 { -diff } else { diff } as u32;
        //a.abs_diff(b[i]);
        if diff < c {
            c = diff;
            c_index = i;
            wurst = false;
        } else if diff == c {
            wurst = true;
        }
    }
    // Tyhmä ropotti >:(
    if wurst {
        return None;
    }
    Some((b[c_index], c_index))
}
fn pos_of_c(s: &str, c: char) -> Vec<u32> {
    // *
    let mut pos = vec![];
    for (i, char) in s.chars().enumerate() {
        if char == c {
            pos.push(i as u32);
        }
    }
    pos
}
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: ACCEPTED
| input | 
|---|
| 10 **.R...***  | 
| correct output | 
|---|
| 12 5 | 
| user output | 
|---|
| 12 5 | 
Test 4
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 10 ***R******  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 5
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 R................................  | 
| correct output | 
|---|
| 947 9 | 
| user output | 
|---|
| 947 9 | 
Test 6
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 .................................  | 
| correct output | 
|---|
| 886 9 | 
| user output | 
|---|
| 886 9 | 
Test 7
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 .....*..*....**..**..*......*....  | 
| correct output | 
|---|
| 1287 400 | 
| user output | 
|---|
| 1287 400 | 
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: ACCEPTED
| input | 
|---|
| 1000 R*****************************...  | 
| correct output | 
|---|
| 999 999 | 
| user output | 
|---|
| 999 999 | 
Test 11
Group: 1, 2
Verdict: ACCEPTED
| input | 
|---|
| 1000 ******************************...  | 
| correct output | 
|---|
| 999 999 | 
| user output | 
|---|
| 999 999 | 
Test 12
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 .......**........*...........*...  | 
| correct output | 
|---|
| 10971 999 | 
| user output | 
|---|
| 10971 999 | 
Test 13
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 *..*....*......*.....*..*........  | 
| correct output | 
|---|
| 9999 999 | 
| user output | 
|---|
| 9999 999 | 
Test 14
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 *.*.*...**.*...*....**.**.**.....  | 
| correct output | 
|---|
| 18766 5000 | 
| user output | 
|---|
| 18766 5000 | 
Test 15
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 R*****************************...  | 
| correct output | 
|---|
| 9999 9999 | 
| user output | 
|---|
| 9999 9999 | 
Test 16
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 10000 ******************************...  | 
| correct output | 
|---|
| 9999 9999 | 
| user output | 
|---|
| 9999 9999 | 
Test 17
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 200000 .................................  | 
| correct output | 
|---|
| 0 0 | 
| user output | 
|---|
| 0 0 | 
Test 18
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 200000 .................................  | 
| correct output | 
|---|
| 299934 10000 | 
| user output | 
|---|
| 299934 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: ACCEPTED
| input | 
|---|
| 200000 R................................  | 
| correct output | 
|---|
| 133765 3 | 
| user output | 
|---|
| 133765 3 | 
Test 22
Group: 2
Verdict: ACCEPTED
| input | 
|---|
| 200000 R................................  | 
| correct output | 
|---|
| 199982 5000 | 
| user output | 
|---|
| 199982 5000 | 
Test 23
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 R*****************************...  | 
| correct output | 
|---|
| 199999 199999 | 
| user output | 
|---|
| (empty) | 
Test 24
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 200000 ******************************...  | 
| correct output | 
|---|
| 199999 199999 | 
| user output | 
|---|
| (empty) | 
