use db::LayoutDB; use city::City; use itertools::Itertools; mod city; mod db; mod combine; fn main() { let mut db = LayoutDB::from_file("layouts.sqlite").expect("Failed to load the DB"); eprintln!("Loaded the DB, {} stored layouts", db.layouts().len()); let city = City::read_from_file("01.in"); eprintln!("Loaded the city file, {} houses", city.get_house_count()); let layouts = db.layouts(); let sorted: Vec<_> = layouts.iter().sorted_by(|x, y| city::get_price(&city, x.houses()).cmp(&city::get_price(&city, y.houses()))).collect(); let first = sorted[1]; let second = sorted[0]; eprintln!("Combining layouts (ID {}, price {}) and (ID {}, price {})", first.id(), city::get_price(&city, first.houses()), second.id(), city::get_price(&city, second.houses()), ); combine::try_combine(&city, first.houses(), second.houses()); }