diff options
| author | nekineki <nekineki@nekineki.net> | 2023-12-05 07:36:46 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2023-12-05 07:37:21 +0100 |
| commit | 8d63b218ebc0611d32c95ea8cf29f0efc3f614a4 (patch) | |
| tree | ab2f22f3b15bf2c10b714bf24b9c2ab7d97d7fe8 /2023 | |
| parent | ea117b92bbafaebaab58f20dcce2221b301af74c (diff) | |
day05
Diffstat (limited to '2023')
| -rw-r--r-- | 2023/Cargo.toml | 7 | ||||
| -rw-r--r-- | 2023/day05.rs | 92 | ||||
| -rw-r--r-- | 2023/in/day05.pzl | 165 | ||||
| -rw-r--r-- | 2023/in/day05.ref | 33 |
4 files changed, 295 insertions, 2 deletions
diff --git a/2023/Cargo.toml b/2023/Cargo.toml index 87f7902..98c23a7 100644 --- a/2023/Cargo.toml +++ b/2023/Cargo.toml @@ -5,6 +5,11 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[profile.release] +opt-level = 3 + +[dependencies] + [[bin]] name = "day01" path = "day01.rs" @@ -104,5 +109,3 @@ path = "/day24.rs" [[bin]] name = "day25" path = "day25.rs" - -[dependencies] diff --git a/2023/day05.rs b/2023/day05.rs new file mode 100644 index 0000000..c879d49 --- /dev/null +++ b/2023/day05.rs @@ -0,0 +1,92 @@ +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_mut)] +use std::cmp::min; +use std::fs::File; +use std::io::Read; + +#[derive(Debug)] +struct SeedMap { + dest: u64, + src: u64, + len: u64, +} + +fn do_map(val: u64, sms: &Vec<SeedMap>) -> u64 { + for sm in sms.iter() { + if (sm.src..sm.src + sm.len).contains(&val) { + return val + sm.dest - sm.src; + } + } + return val; +} + +fn main() { + // let filename = "in/day05.ref"; + let filename = "in/day05.pzl"; + + let mut f = File::open(filename).expect("cannot open file"); + let mut content = String::new(); + f.read_to_string(&mut content).expect("cannot read file"); + let mut chunks = content.trim_end().split("\n\n"); + // println!("{:?}", chunks); + + let mut res1; + let mut res2 = 999999999999; + + let mut seeds: Vec<u64> = chunks + .next() + .unwrap() + .split_once(":") + .unwrap() + .1 + .split(" ") + .filter_map(|x| x.parse().ok()) + .collect::<Vec<u64>>(); + + let mut all_maps: Vec<Vec<SeedMap>> = Vec::new(); + for chunk in chunks { + let mut chunk = chunk.split('\n'); + let line = chunk.next(); + let mut map_vec: Vec<SeedMap> = Vec::new(); + for line in chunk { + let vals = line + .split(" ") + .filter_map(|x| x.parse().ok()) + .collect::<Vec<u64>>(); + map_vec.push(SeedMap { + dest: vals[0], + src: vals[1], + len: vals[2], + }); + } + all_maps.push(map_vec); + } + + let mut final_seed1 = Vec::new(); + for mut seed in seeds.clone().into_iter() { + for m in all_maps.iter() { + seed = do_map(seed, m); + } + final_seed1.push(seed); + } + final_seed1.sort(); + res1 = final_seed1[0]; + + let seed_pairs: Vec<_> = seeds + .chunks_exact(2) + .map(|x| (x[0] as u64, x[1] as u64)) + .collect(); + + for (start, len) in seed_pairs.clone().into_iter() { + for mut seed in start..(start + len) { + for m in all_maps.iter() { + seed = do_map(seed, m); + } + res2 = min(res2, seed); + } + } + + println!("res1: {}", res1); + println!("res2: {}", res2); +} diff --git a/2023/in/day05.pzl b/2023/in/day05.pzl new file mode 100644 index 0000000..84381c2 --- /dev/null +++ b/2023/in/day05.pzl @@ -0,0 +1,165 @@ +seeds: 950527520 85181200 546703948 123777711 63627802 279111951 1141059215 246466925 1655973293 98210926 3948361820 92804510 2424412143 247735408 4140139679 82572647 2009732824 325159757 3575518161 370114248 + +seed-to-soil map: +3642212803 1631134559 163560083 +490926575 928751267 67070832 +557997407 23457277 146367872 +1526937660 2215630922 150973756 +3370882556 1217101081 21950620 +1998387949 1553503793 77630766 +1700281630 3586410917 298106319 +1677911416 1187175123 22370214 +1361013180 1890531530 165924480 +157249059 169825149 28413033 +1236300152 2104867413 110763509 +3048056947 3311996711 274414206 +1347063661 1173225604 13949519 +3322471153 2056456010 42709335 +3400388920 3884517236 61733835 +704365279 355487241 15789127 +3462122755 1794694642 95836888 +4043589752 1302126249 251377544 +3601338302 4254092795 40874501 +3557959643 4210714136 43378659 +3805772886 3946251071 237816866 +3365180488 2099165345 5702068 +185662092 19444885 4012392 +209119369 371276368 153333015 +2806369338 4184067937 26646199 +720154406 524609383 275667693 +189674484 0 19444885 +3392833176 1209545337 7555744 +362452384 800277076 128474191 +1173225604 1239051701 63074548 +2833015537 2366604678 215041410 +2076018715 2581646088 730350623 +0 198238182 157249059 + +soil-to-fertilizer map: +3460224655 4061418601 42469328 +2583088941 2211297482 32584821 +332145562 90342895 63482901 +2528755615 1387266751 32998710 +2197749180 696338617 193485827 +2391235007 2169459779 41837703 +395628463 1106056857 212736766 +158816023 1996130240 173329539 +608365229 553497263 142841354 +2945065740 425270652 128226611 +68473128 0 90342895 +2615673762 153825796 271444856 +2433072710 3107109424 95682905 +3073292351 976556879 129499978 +3969026580 3537847573 248317798 +751206583 889824444 86732435 +837939018 1420265461 575864779 +1413803797 2243882303 783945383 +4217344378 3460224655 77622918 +3502693983 4103887929 191079367 +0 1318793623 68473128 +3693773350 3786165371 275253230 +2887118618 3049162302 57947122 +2561754325 3027827686 21334616 + +fertilizer-to-water map: +1751080383 1821072608 33265395 +4137558434 4169230929 125736367 +3296451041 3015767106 200702605 +0 1326187179 494885429 +3623687794 2963533004 52234102 +3192345181 2859427144 104105860 +1720274003 150099674 16362281 +1535290150 1141203326 184983853 +1736636284 166461955 14444099 +2888685656 3812924581 152666193 +3793268338 3216469711 344290096 +494885429 0 80107449 +2744325907 3668564832 144359749 +2708433812 3965590774 35892095 +3497153646 4042696781 126534148 +4263294801 4011024286 31672495 +1844603063 80107449 69992225 +3041351849 2708433812 150993332 +3675921896 3560759807 107805025 +574992878 180906054 960297272 +1784345778 1854338003 60257285 +3783726921 4001482869 9541417 + +water-to-light map: +3535151283 3877657516 42746103 +649917020 553881424 674909939 +3807807238 1821616588 484912477 +95679819 472295571 81585853 +1324826959 286073377 186222194 +4292719715 1819369007 2247581 +177265672 1324471182 186577971 +2102818048 3206912207 157155638 +2259973686 2823586602 100381277 +0 1228791363 95679819 +3577897386 3851861395 25796121 +363843643 0 286073377 +2530300196 3364067845 487793550 +3018093746 2306529065 90018685 +3603693507 4090853565 204113731 +2360354963 3920403619 169945233 +1819369007 4090348852 504713 +1819873720 2923967879 282944328 +3108112431 2396547750 427038852 + +light-to-temperature map: +4211717977 1537920618 83249319 +2812170666 2785100632 907832086 +3720002752 3692932718 462018744 +809029346 1621169937 408226713 +2495104775 2468034741 317065891 +1890424927 2029396650 438638091 +2329063018 740254029 124497721 +4182021496 4223726779 29696481 +1217256059 864751750 673168868 +2453560739 4253423260 41544036 +740254029 4154951462 68775317 + +temperature-to-humidity map: +247604558 3495276000 30921272 +1341115815 1344043806 205388222 +1546504037 3081217791 414058209 +1960562246 0 459661266 +0 959204089 247604558 +3388962113 1206808647 137235159 +278525830 1549432028 563047162 +841572992 459661266 499542823 +2420223512 2112479190 968738601 + +humidity-to-location map: +358497203 1012762605 163293355 +3035263355 2859367155 247612329 +1021885490 1293357218 103090913 +4143961841 3795114494 151005455 +3578373583 4227561425 8426352 +2859178122 2177370950 6068675 +0 1639932830 187421121 +521790558 232394351 43765724 +3838880131 4235987777 10124834 +1294200510 23652296 201098270 +2865246797 3380887726 170016558 +2177370950 4100409404 127152021 +3282875684 3954902589 51287689 +1124976403 1891601121 169224107 +3334163373 3550904284 244210210 +565556282 224750566 7643785 +3586799935 2183439625 194442871 +573200067 0 23652296 +3781242806 3946119949 8782640 +2716371460 3238081064 142806662 +2304522971 2377882496 116771158 +3790025446 4246112611 48854685 +1495298780 447236157 565526448 +596852363 1585957916 53974914 +840337062 1827353951 64247170 +187421121 276160075 171076082 +2622152334 4006190278 94219126 +2491050754 3106979484 131101580 +650827277 1396448131 189509785 +2421294129 2789610530 69756625 +3849004965 2494653654 294956876 +904584232 1176055960 117301258 diff --git a/2023/in/day05.ref b/2023/in/day05.ref new file mode 100644 index 0000000..f756727 --- /dev/null +++ b/2023/in/day05.ref @@ -0,0 +1,33 @@ +seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4 |
