diff --git a/2025/09/p2.rs b/2025/09/p2.rs index 8315b30..3c5233c 100644 --- a/2025/09/p2.rs +++ b/2025/09/p2.rs @@ -4,7 +4,7 @@ //! //! I think even adyacent is within the "other rectangle thing", because -use std::ops::Range; +use std::{collections::BinaryHeap, ops::Range}; #[unsafe(no_mangle)] pub extern "Rust" fn challenge_usize(buf: &[u8]) -> usize { @@ -14,27 +14,29 @@ pub extern "Rust" fn challenge_usize(buf: &[u8]) -> usize { .collect::>(); // assuming each coord is contiguous to the prev one - let mut edges = coords + let edges = coords .iter() .cloned() .chain([coords[0]]) - .map_windows(|&[a, b]| (a, b)) - .collect::>(); + .map_windows(|&[a, b]| (a.0.abs_diff(b.0) + a.1.abs_diff(b.1), (a, b))) + .collect::>(); - edges.sort_by(|(a1, a2), (b1, b2)| { - (a1.0.abs_diff(a2.0) + a1.1.abs_diff(a2.1)) - .cmp(&(b1.0.abs_diff(b2.0) + b1.1.abs_diff(b2.1))) - }); + // edges.sort_by(|(a1, a2), (b1, b2)| { + // (a1.0.abs_diff(a2.0) + a1.1.abs_diff(a2.1)) + // .cmp(&(b1.0.abs_diff(b2.0) + b1.1.abs_diff(b2.1))) + // }); let mut max_area = 0; for (i, coor1) in coords.iter().enumerate() { - for coor2 in coords.iter().skip(i) { + for coor2 in coords.iter().skip(i + 1) { let dx = coor1.0.abs_diff(coor2.0) + 1; let dy = coor1.1.abs_diff(coor2.1) + 1; let area = dx * dy; - if is_really_contained((*coor1, *coor2), &edges) { - max_area = max_area.max(area); + if area > max_area + && is_really_contained((*coor1, *coor2), edges.iter().map(|&(_, v)| v)) + { + max_area = area; } } } @@ -46,7 +48,7 @@ pub extern "Rust" fn challenge_usize(buf: &[u8]) -> usize { /// well contained fn is_really_contained( (rect0, rect1): ((usize, usize), (usize, usize)), - edges: &[((usize, usize), (usize, usize))], + edges: impl Iterator, ) -> bool { let (rect0, rect1) = ( (rect0.0.min(rect1.0), rect0.1.min(rect1.1)), @@ -81,10 +83,7 @@ fn mkrange(a: T, b: T) -> Range { } fn rangeoverlap(a: &Range, b: &Range) -> bool { - if a.end <= b.start { - return false; - } - if a.start >= b.end { + if a.end <= b.start || a.start >= b.end { return false; } diff --git a/2025/medium.txt b/2025/medium.txt new file mode 100644 index 0000000..4627344 --- /dev/null +++ b/2025/medium.txt @@ -0,0 +1,496 @@ +97924,50397 +97924,51628 +98415,51628 +98415,52850 +98292,52850 +98292,54078 +98276,54078 +98276,55288 +98043,55288 +98043,56423 +97303,56423 +97303,57711 +97692,57711 +97692,58821 +96973,58821 +96973,60116 +97239,60116 +97239,61228 +96629,61228 +96629,62473 +96581,62473 +96581,63611 +96121,63611 +96121,64861 +96028,64861 +96028,65764 +94900,65764 +94900,67161 +95183,67161 +95183,68139 +94341,68139 +94341,69483 +94384,69483 +94384,70602 +93878,70602 +93878,71361 +92651,71361 +92651,72634 +92470,72634 +92470,73502 +91529,73502 +91529,74935 +91566,74935 +91566,75703 +90486,75703 +90486,76625 +89679,76625 +89679,77482 +88795,77482 +88795,78448 +88075,78448 +88075,79469 +87427,79469 +87427,80940 +87309,80940 +87309,81352 +85915,81352 +85915,82359 +85225,82359 +85225,83372 +84529,83372 +84529,84413 +83848,84413 +83848,84973 +82697,84973 +82697,85857 +81860,85857 +81860,86358 +80693,86358 +80693,87278 +79886,87278 +79886,88018 +78928,88018 +78928,89234 +78313,89234 +78313,89561 +77051,89561 +77051,90688 +76335,90688 +76335,91332 +75289,91332 +75289,91489 +73962,91489 +73962,92160 +72945,92160 +72945,92340 +71672,92340 +71672,93077 +70689,93077 +70689,93624 +69607,93624 +69607,94386 +68613,94386 +68613,94825 +67476,94825 +67476,95271 +66341,95271 +66341,95771 +65222,95771 +65222,96253 +64092,96253 +64092,96442 +62873,96442 +62873,96830 +61712,96830 +61712,97260 +60555,97260 +60555,97242 +59301,97242 +59301,97199 +58056,97199 +58056,97224 +56834,97224 +56834,97907 +55698,97907 +55698,97847 +54465,97847 +54465,97941 +53251,97941 +53251,98315 +52049,98315 +52049,97884 +50816,97884 +50816,98050 +49601,98050 +49601,97738 +48394,97738 +48394,97503 +47196,97503 +47196,97878 +45954,97878 +45954,97660 +44754,97660 +44754,97727 +43519,97727 +43519,97225 +42364,97225 +42364,97121 +41150,97121 +41150,97347 +39860,97347 +39860,96656 +38765,96656 +38765,95899 +37709,95899 +37709,96368 +36315,96368 +36315,95856 +35193,95856 +35193,94957 +34215,94957 +34215,94420 +33128,94420 +33128,94259 +31893,94259 +31893,94403 +30507,94403 +30507,93364 +29638,93364 +29638,92743 +28592,92743 +28592,92645 +27272,92645 +27272,91967 +26249,91967 +26249,91324 +25210,91324 +25210,90253 +24444,90253 +24444,90070 +23112,90070 +23112,89351 +22123,89351 +22123,88789 +21018,88789 +21018,87886 +20168,87886 +20168,86962 +19347,86962 +19347,86043 +18535,86043 +18535,85116 +17740,85116 +17740,84601 +16558,84601 +16558,83509 +15930,83509 +15930,82715 +15007,82715 +15007,82025 +13957,82025 +13957,81151 +13098,81151 +13098,79859 +12754,79859 +12754,79147 +11692,79147 +11692,77947 +11271,77947 +11271,77372 +9969,77372 +9969,75883 +10009,75883 +10009,75017 +9112,75017 +9112,74052 +8356,74052 +8356,73174 +7420,73174 +7420,71902 +7208,71902 +7208,70981 +6313,70981 +6313,69530 +6548,69530 +6548,68561 +5737,68561 +5737,67493 +5130,67493 +5130,66441 +4451,66441 +4451,65197 +4304,65197 +4304,64071 +3813,64071 +3813,62733 +4061,62733 +4061,61563 +3763,61563 +3763,60526 +2868,60526 +2868,59320 +2658,59320 +2658,58003 +3110,58003 +3110,56912 +2236,56912 +2236,55612 +2815,55612 +2815,54463 +2176,54463 +2176,53256 +1991,53256 +1991,52027 +2191,52027 +2191,50822 +1746,50822 +1746,50372 +94926,50372 +94926,48373 +1650,48373 +1650,47151 +1748,47151 +1748,45959 +2182,45959 +2182,44724 +2070,44724 +2070,43482 +2000,43482 +2000,42352 +2701,42352 +2701,41171 +2990,41171 +2990,39906 +2866,39906 +2866,38738 +3231,38738 +3231,37620 +3768,37620 +3768,36462 +4129,36462 +4129,35396 +4769,35396 +4769,34029 +4511,34029 +4511,32910 +5004,32910 +5004,31796 +5503,31796 +5503,30544 +5679,30544 +5679,29790 +6959,29790 +6959,28477 +7028,28477 +7028,27438 +7667,27438 +7667,26258 +8049,26258 +8049,25547 +9236,25547 +9236,24498 +9831,24498 +9831,23395 +10350,23395 +10350,22054 +10551,22054 +10551,21180 +11427,21180 +11427,20298 +12278,20298 +12278,19275 +12950,19275 +12950,18389 +13789,18389 +13789,17359 +14468,17359 +14468,16786 +15633,16786 +15633,15459 +16026,15459 +16026,14915 +17198,14915 +17198,14289 +18270,14289 +18270,13257 +18983,13257 +18983,12899 +20257,12899 +20257,11476 +20687,11476 +20687,11226 +22019,11226 +22019,10137 +22742,10137 +22742,9365 +23699,9365 +23699,8665 +24708,8665 +24708,8556 +26063,8556 +26063,7609 +26928,7609 +26928,7486 +28239,7486 +28239,6654 +29181,6654 +29181,6166 +30298,6166 +30298,5931 +31519,5931 +31519,5378 +32603,5378 +32603,5291 +33861,5291 +33861,4883 +34995,4883 +34995,4410 +36109,4410 +36109,3349 +37068,3349 +37068,2952 +38233,2952 +38233,3324 +39575,3324 +39575,2539 +40655,2539 +40655,3047 +41985,3047 +41985,2019 +43056,2019 +43056,2589 +44360,2589 +44360,1841 +45505,1841 +45505,2455 +46775,2455 +46775,1706 +47951,1706 +47951,2282 +49186,2282 +49186,1769 +50399,1769 +50399,2442 +51599,2442 +51599,2360 +52811,2360 +52811,2429 +54019,2429 +54019,1925 +55291,1925 +55291,2650 +56429,2650 +56429,2307 +57711,2307 +57711,2657 +58890,2657 +58890,3006 +60063,3006 +60063,2863 +61350,2863 +61350,3206 +62530,3206 +62530,3937 +63593,3937 +63593,4278 +64762,4278 +64762,4357 +66024,4357 +66024,5363 +66953,5363 +66953,5729 +68110,5729 +68110,6224 +69216,6224 +69216,6704 +70329,6704 +70329,7396 +71337,7396 +71337,8022 +72371,8022 +72371,7912 +73818,7912 +73818,8887 +74662,8887 +74662,9895 +75460,9895 +75460,10341 +76610,10341 +76610,10916 +77686,10916 +77686,11166 +79014,11166 +79014,12141 +79809,12141 +79809,12986 +80694,12986 +80694,13676 +81709,13676 +81709,14453 +82654,14453 +82654,15685 +83163,15685 +83163,16111 +84454,16111 +84454,17061 +85231,17061 +85231,18137 +85860,18137 +85860,19057 +86653,19057 +86653,19729 +87758,19729 +87758,20935 +88197,20935 +88197,22019 +88774,22019 +88774,23062 +89394,23062 +89394,23670 +90679,23670 +90679,25126 +90652,25126 +90652,26103 +91374,26103 +91374,27203 +91885,27203 +91885,27989 +93001,27989 +93001,29416 +92856,29416 +92856,30167 +94124,30167 +94124,31508 +94095,31508 +94095,32411 +95112,32411 +95112,33829 +94797,33829 +94797,34839 +95584,34839 +95584,35890 +96309,35890 +96309,37146 +96368,37146 +96368,38359 +96544,38359 +96544,39540 +96830,39540 +96830,40764 +96909,40764 +96909,41928 +97289,41928 +97289,43153 +97305,43153 +97305,44320 +97745,44320 +97745,45563 +97541,45563 +97541,46736 +98122,46736 +98122,47964 +98003,47964 +98003,49176 +98319,49176 +98319,50397