Řešení KSP úlohy 33-3-4 Obsazování území https://ksp.mff.cuni.cz/h/ulohy/33/zadani3.html#task-33-3-4
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

#### 52 lines 1.8 KiB Raw Normal View History

 ```use db::LayoutDB; ``` 3 years ago ```use city::{City, SIZE}; ``` ```use itertools::Itertools; ``` 3 years ago ```use crate::combine::transpose_layout; ``` ``` ``` ```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()); ``` ``` ``` 3 years ago ``` eprintln!("Building a transposed city..."); ``` ``` let transposed_city = transpose_city(&city); ``` ``` eprintln!("Finished building a transposed city"); ``` ``` ``` 3 years ago ``` loop { ``` ``` let sorted: Vec<_> = db.layouts().iter() ``` ``` .sorted_by(|x, y| city::get_price(&city, x.houses()).cmp(&city::get_price(&city, y.houses()))) ``` ``` .map(|layout| layout.clone()) ``` ``` .collect(); ``` 3 years ago ``` ``` 3 years ago ``` const TOP_LAYOUT_COUNT: usize = 1000; ``` 3 years ago ``` ``` 3 years ago ``` let chosen_layouts: Vec<_> = sorted.iter().take(TOP_LAYOUT_COUNT).map(|l| l.houses().clone()).collect(); ``` 3 years ago ``` ``` 3 years ago ``` eprintln!("Starting to combine {} top houses DB; vertical cuts", TOP_LAYOUT_COUNT); ``` ``` combine::try_combine(&city, &chosen_layouts, &chosen_layouts, &mut db, false); ``` ``` ``` ``` let transposed_chosen_layouts: Vec<_> = chosen_layouts.iter().map(|x| transpose_layout(x)).collect(); ``` ``` eprintln!("Starting to combine {} top houses DB; horizontal cuts", TOP_LAYOUT_COUNT); ``` ``` combine::try_combine(&transposed_city, &transposed_chosen_layouts, &transposed_chosen_layouts, &mut db, true); ``` ``` } ``` 3 years ago ```} ``` ``` ``` ```fn transpose_city(city: &City) -> City { ``` ``` let mut transposed_prices = vec![0u16; SIZE * SIZE]; ``` ``` for y in 0..SIZE { ``` ``` for x in 0..SIZE { ``` ``` // Sorry, cache! Not worth optimizing with blocks, ``` ``` // this is not going to be ran often. ``` ``` transposed_prices[y * SIZE + x] = city.get_price_xy(y, x); ``` ``` } ``` ``` } ``` ``` ``` ``` City::new(transposed_prices) ``` ```} ```