Submission details
Task:Monikulmio
Sender:Jaksu
Submission time:2025-10-27 21:30:01 +0200
Language:Rust (2021)
Status:READY
Result:70
Feedback
groupverdictscore
#1ACCEPTED70
Test results
testverdicttimescore
#1ACCEPTED0.00 s7details
#2ACCEPTED0.00 s7details
#3ACCEPTED0.00 s7details
#4ACCEPTED0.00 s7details
#5ACCEPTED0.00 s7details
#6ACCEPTED0.00 s7details
#7ACCEPTED0.00 s7details
#8ACCEPTED0.00 s7details
#9ACCEPTED0.00 s7details
#10ACCEPTED0.00 s7details

Compiler report

warning: value assigned to `point` is never read
  --> input/code.rs:18:13
   |
18 |     let mut point = (0,0);
   |             ^^^^^
   |
   = help: maybe it is overwritten before being read?
   = note: `#[warn(unused_assignments)]` on by default

warning: 1 warning emitted

Code

use std::{io, str::SplitAsciiWhitespace};
fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read input");
    
    let mut substringiter = input.split_ascii_whitespace();
    
    let height = parse(&mut substringiter);
    let width = parse(&mut substringiter);
    let mut grid: Vec<String> = vec!();
    for _rownum in 0..height {
        grid.push(".".repeat(width));
    }

    let pointamount = parse(&mut substringiter);
    let mut previouspoint = (0, 0);
    let mut firstpoint = (0, 0);
    let mut point = (0,0);

    for index in 0..(pointamount+1) {
        if index != pointamount {
            point = get_point();
        } else {
            point = firstpoint;
        }
        grid[point.0].replace_range((point.1)..(point.1+1), "*");

        if index != 0 {
            let dy = (point.0 as isize)-(previouspoint.0 as isize);
            let dx = (point.1 as isize)-(previouspoint.1 as isize);

            if dx == 0 {
                let range1 = match point.0 > previouspoint.0 {
                    true => (previouspoint.0+1)..point.0,
                    false => (point.0+1)..previouspoint.0,
                };
                for rownum in range1 {
                    grid[rownum].replace_range((point.1)..(point.1+1), "|");
                }
            } else if dy == 0 {
                let range = match point.1 > previouspoint.1 {
                    true => (previouspoint.1+1)..(point.1),
                    false => (point.1+1)..(previouspoint.1),
                };
                grid[point.0].replace_range(range, "=".repeat(dx.abs() as usize - 1).as_str());
            } else {
                let kulmakerroin = dy/dx;
                if kulmakerroin == 1 {
                    let rangey = match point.0 > previouspoint.0 {
                        true => (previouspoint.0+1)..point.0,
                        false => (point.0+1)..previouspoint.0,
                    };

                    for rownum in rangey {
                        let x = previouspoint.1+1+(rownum-previouspoint.0)*(kulmakerroin as usize);
                        grid[rownum].replace_range((x-1)..x, (92 as char).to_string().as_str())
                    }
                } else {
                    let rangey = match point.0 > previouspoint.0 {
                        true => (previouspoint.0+1)..point.0,
                        false => (point.0+1)..previouspoint.0,
                    };

                    for rownum in rangey {
                        let x = previouspoint.1+1-(rownum-previouspoint.0);
                        grid[rownum].replace_range((x-1)..x, "/");
                    }
                }
            }
        } else {
            firstpoint = point;
        }

        previouspoint = point;
    }

    for rownum in 0..height {
        println!("{}", grid[rownum]);
    }
}

pub fn parse(iter: &mut SplitAsciiWhitespace) -> usize {
    let s = match iter.next() {
        Some(s) => s.parse().unwrap(),
        None => 0,
    };
    return s;
}

pub fn get_point() -> (usize, usize) {
    let mut point = String::new();
    io::stdin().read_line(&mut point).expect("Failed to read input");

    let mut pointiter = point.split_ascii_whitespace();
    let y = parse(&mut pointiter)-1;
    let x = parse(&mut pointiter)-1;
    let output = (y, x);
    return output;
}

Test details

Test 1 (public)

Verdict: ACCEPTED

input
8 9 5
5 2
2 5
5 8
7 8
...

correct output
.........
....*....
.../#\...
../###\..
.*#####*.
...

user output
.........
....*....
.../.\...
../...\..
.*.....*.
...

Feedback: Lines are drawn correctly. Incorrect fill character on row 3, col 5: expected '#', got '.'

Test 2 (public)

Verdict: ACCEPTED

input
20 40 4
5 10
5 30
15 30
15 10

correct output
.................................

user output
.................................

Feedback: Lines are drawn correctly. Incorrect fill character on row 6, col 11: expected '#', got '.'

Test 3 (public)

Verdict: ACCEPTED

input
20 40 29
8 7
13 2
14 2
9 7
...

correct output
.................................

user output
.................................

Feedback: Lines are drawn correctly. Incorrect fill character on row 4, col 30: expected '#', got '.'

Test 4 (public)

Verdict: ACCEPTED

input
20 40 14
5 12
5 25
8 28
13 28
...

correct output
.................................

user output
.................................

Feedback: Lines are drawn correctly. Incorrect fill character on row 4, col 10: expected '#', got '.'

Test 5 (public)

Verdict: ACCEPTED

input
20 40 12
3 20
7 16
7 9
11 13
...

correct output
.................................

user output
.................................

Feedback: Lines are drawn correctly. Incorrect fill character on row 4, col 20: expected '#', got '.'

Test 6 (public)

Verdict: ACCEPTED

input
9 35 33
2 3
2 8
4 8
4 5
...

correct output
.................................

user output
.................................

Feedback: Lines are drawn correctly. Incorrect fill character on row 3, col 3: expected '#', got '.'

Test 7 (public)

Verdict: ACCEPTED

input
30 100 69
6 10
6 14
7 14
7 18
...

correct output
.................................

user output
.................................

Feedback: Lines are drawn correctly. Incorrect fill character on row 7, col 10: expected '#', got '.'

Test 8 (public)

Verdict: ACCEPTED

input
40 60 192
11 3
11 5
10 6
11 7
...

correct output
.................................

user output
.................................

Feedback: Lines are drawn correctly. Incorrect fill character on row 3, col 30: expected '#', got '.'

Test 9 (public)

Verdict: ACCEPTED

input
50 100 142
1 1
1 7
1 11
1 14
...

correct output
*=====*===*==*...................

user output
*=====*===*==*...................

Feedback: Lines are drawn correctly. Incorrect fill character on row 2, col 11: expected '#', got '.'

Test 10 (public)

Verdict: ACCEPTED

input
100 100 1000
10 1
4 7
1 4
1 9
...

correct output
...*====*........................

user output
...*====*........................

Feedback: Lines are drawn correctly. Incorrect fill character on row 2, col 6: expected '#', got '.'