From 3178c07f84cfa6ebdd23a1f4fdb6a079d86d18b7 Mon Sep 17 00:00:00 2001 From: Bastian Gruber Date: Mon, 22 May 2023 12:50:04 +0000 Subject: [PATCH] Solved: Big world test --- problem_06/src/server.rs | 2 ++ problem_06/src/ticketing.rs | 40 ++++++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/problem_06/src/server.rs b/problem_06/src/server.rs index c086557..7ac6053 100644 --- a/problem_06/src/server.rs +++ b/problem_06/src/server.rs @@ -198,6 +198,7 @@ impl Handler { ClientFrames::IAmCamera { road, mile, limit } => { info!("Receive new camera: {road} at {mile} with limit {limit}"); if self.connection_type.is_some() { + let _ = send_message.send(ServerFrames::Error { msg: "Already connected as camera".to_string() }).await; return Err("Already connected".into()); } self.set_connection_type(ConnectionType::Camera); @@ -213,6 +214,7 @@ impl Handler { } ClientFrames::IAmDispatcher { roads } => { if self.connection_type.is_some() { + let _ = send_message.send(ServerFrames::Error { msg: "Already connected as dispatcher".to_string() }).await; return Err("Already connected".into()); } diff --git a/problem_06/src/ticketing.rs b/problem_06/src/ticketing.rs index ab6ac65..42f5141 100644 --- a/problem_06/src/ticketing.rs +++ b/problem_06/src/ticketing.rs @@ -51,25 +51,33 @@ pub(crate) async fn issue_possible_ticket(db: Arc>, plate: Plate, came let day_start = timestamp1 / 86400; let day_end = timestamp2 / 86400; + + let spans_multiple_days = day_start != day_end; + + if spans_multiple_days && (db.is_plate_ticketed_for_day(day_start, plate_name.clone()) || db.is_plate_ticketed_for_day(day_end, plate_name.clone())) { + continue; + } + + + if db.is_plate_ticketed_for_day(day_start, plate_name.clone()) { + continue; + } + for day in day_start..=day_end { - info!("Day {day} for {ticket:?}"); - if db.is_plate_ticketed_for_day(day, plate_name.clone()) { - info!("Ticket already issued: {ticket:?}"); - continue; - } - + info!("Ticket for day {day} for {ticket:?}"); db.ticket_plate(day, plate_name.clone()); - let dispatcher = db.get_dispatcher_for_road(road.clone()); - - if dispatcher.is_none() { - info!("No dispatcher yet for this road: {ticket:?}"); - db.add_open_ticket(ticket.clone()); - continue; - } - - info!("Sending ticket: {ticket:?}"); - let _ = dispatcher.unwrap().send(ticket.clone().into()).await; } + + let dispatcher = db.get_dispatcher_for_road(road.clone()); + + if dispatcher.is_none() { + info!("No dispatcher yet for this road: {ticket:?}"); + db.add_open_ticket(ticket.clone()); + continue; + } + + info!("Sending ticket: {ticket:?}"); + let _ = dispatcher.unwrap().send(ticket.clone().into()).await; } }