Priority queue added on aoc 15
This commit is contained in:
33
advent_of_code/2022/15/Cargo.lock
generated
33
advent_of_code/2022/15/Cargo.lock
generated
@@ -2,11 +2,34 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.12.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indexmap"
|
||||||
|
version = "1.9.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"hashbrown",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "main"
|
name = "main"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nom",
|
"nom",
|
||||||
|
"priority-queue",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -30,3 +53,13 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
"minimal-lexical",
|
"minimal-lexical",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "priority-queue"
|
||||||
|
version = "1.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fff39edfcaec0d64e8d0da38564fad195d2d51b680940295fcc307366e101e61"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"indexmap",
|
||||||
|
]
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nom = "7.1.2"
|
nom = "7.1.2"
|
||||||
|
priority-queue = "1.3.2"
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ use nom::{
|
|||||||
sequence::{preceded, separated_pair},
|
sequence::{preceded, separated_pair},
|
||||||
IResult,
|
IResult,
|
||||||
};
|
};
|
||||||
|
use priority_queue::PriorityQueue;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
fn parse_input(input: &str) -> IResult<&str, Vec<((i32, i32), (i32, i32))>> {
|
fn parse_input(input: &str) -> IResult<&str, Vec<((i32, i32), (i32, i32))>> {
|
||||||
@@ -63,16 +64,19 @@ fn fill_line(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(PartialEq, Eq, Hash)]
|
||||||
enum EventType {
|
enum EventType {
|
||||||
Start,
|
Start,
|
||||||
Intersection,
|
Intersection,
|
||||||
|
Middle,
|
||||||
End,
|
End,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(PartialEq, Eq, Hash)]
|
||||||
struct Event {
|
struct Event {
|
||||||
x: i32,
|
coord: (i32, i32),
|
||||||
y: i32,
|
|
||||||
t: EventType,
|
t: EventType,
|
||||||
|
line_id: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
@@ -119,5 +123,54 @@ fn main() {
|
|||||||
// Je krijgt dan 3 event-types: start van een lijnstuk, een kruising en het einde van een lijnstuk.
|
// Je krijgt dan 3 event-types: start van een lijnstuk, een kruising en het einde van een lijnstuk.
|
||||||
// Enige is dat je alleen in de daadwerkelijke coordinaat-range zoals in de opgave dingen wilt
|
// Enige is dat je alleen in de daadwerkelijke coordinaat-range zoals in de opgave dingen wilt
|
||||||
// mee laten tellen.
|
// mee laten tellen.
|
||||||
const max_coord: i32 = 4000000;
|
const MAX_COORD: i32 = 8000000;
|
||||||
|
|
||||||
|
let mut event_queue: PriorityQueue<Event, (i32, i32)> = PriorityQueue::new();
|
||||||
|
let mut line_id = 0;
|
||||||
|
for &(sensor, beacon) in coord_list.iter() {
|
||||||
|
let sensor = (sensor.0 * 2, sensor.1 * 2);
|
||||||
|
let beacon = (beacon.0 * 2, beacon.1 * 2);
|
||||||
|
|
||||||
|
let dist = manhattan_dist(sensor, beacon);
|
||||||
|
|
||||||
|
let begin = (sensor.0 + dist, sensor.1);
|
||||||
|
let middle_1 = (sensor.0, sensor.1 - dist);
|
||||||
|
let middle_2 = (sensor.0, sensor.1 + dist);
|
||||||
|
let end = (sensor.0 - dist, sensor.1);
|
||||||
|
|
||||||
|
event_queue.push(
|
||||||
|
Event {
|
||||||
|
coord: begin,
|
||||||
|
t: EventType::Start,
|
||||||
|
line_id,
|
||||||
|
},
|
||||||
|
begin,
|
||||||
|
);
|
||||||
|
event_queue.push(
|
||||||
|
Event {
|
||||||
|
coord: middle_1,
|
||||||
|
t: EventType::Middle,
|
||||||
|
line_id,
|
||||||
|
},
|
||||||
|
middle_1,
|
||||||
|
);
|
||||||
|
event_queue.push(
|
||||||
|
Event {
|
||||||
|
coord: middle_2,
|
||||||
|
t: EventType::Middle,
|
||||||
|
line_id,
|
||||||
|
},
|
||||||
|
middle_2,
|
||||||
|
);
|
||||||
|
event_queue.push(
|
||||||
|
Event {
|
||||||
|
coord: end,
|
||||||
|
t: EventType::End,
|
||||||
|
line_id,
|
||||||
|
},
|
||||||
|
end,
|
||||||
|
);
|
||||||
|
|
||||||
|
line_id += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user