day 5
This commit is contained in:
parent
79c92789c2
commit
7e4021e32d
8
Cargo.lock
generated
8
Cargo.lock
generated
|
@ -46,6 +46,14 @@ version = "0.1.0"
|
||||||
name = "day_4-2"
|
name = "day_4-2"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day_5-1"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day_5-2"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.6.4"
|
version = "2.6.4"
|
||||||
|
|
283
day_5/input.txt
Normal file
283
day_5/input.txt
Normal file
|
@ -0,0 +1,283 @@
|
||||||
|
seeds: 515785082 87905039 2104518691 503149843 720333403 385234193 1357904101 283386167 93533455 128569683 2844655470 24994629 3934515023 67327818 2655687716 8403417 3120497449 107756881 4055128129 9498708
|
||||||
|
|
||||||
|
seed-to-soil map:
|
||||||
|
2025334497 3876763368 16729580
|
||||||
|
1877945250 2032519622 95086460
|
||||||
|
0 679167893 381174930
|
||||||
|
717319608 469672599 20842400
|
||||||
|
1677700339 1823837909 22353530
|
||||||
|
634816620 1372848321 73458998
|
||||||
|
2756794066 2812828157 182758452
|
||||||
|
3324095721 3392359690 456362171
|
||||||
|
969898963 32396659 196640650
|
||||||
|
1973031710 2127606082 52302787
|
||||||
|
4095486882 3893492948 33982348
|
||||||
|
381174930 591894131 9141137
|
||||||
|
3247991211 2466896352 76104510
|
||||||
|
1645303680 0 32396659
|
||||||
|
3023330013 4070306098 224661198
|
||||||
|
2329063131 1900645524 131874098
|
||||||
|
2042064077 3115509825 242853312
|
||||||
|
969753308 1446307319 145655
|
||||||
|
4214866116 3035408645 80101180
|
||||||
|
589310441 1846191439 28201780
|
||||||
|
4129469230 2811864212 963945
|
||||||
|
510217282 1276450763 79093159
|
||||||
|
2989333460 3358363137 33996553
|
||||||
|
3780457892 2179908869 286987483
|
||||||
|
738162008 229037309 231591300
|
||||||
|
2460937229 3927475296 26993487
|
||||||
|
1205326488 1547352475 237698559
|
||||||
|
2487930716 2543000862 268863350
|
||||||
|
4170255211 3998614525 21910631
|
||||||
|
1543924548 490514999 101379132
|
||||||
|
1443025047 1446452974 100899501
|
||||||
|
2939552518 4020525156 49780942
|
||||||
|
2284917389 3954468783 44145742
|
||||||
|
617512221 1355543922 17304399
|
||||||
|
4067445375 3848721861 28041507
|
||||||
|
1166539613 1785051034 38786875
|
||||||
|
708275618 460628609 9043990
|
||||||
|
390316067 1156549548 119901215
|
||||||
|
4192165842 1877945250 22700274
|
||||||
|
4130433175 2995586609 39822036
|
||||||
|
1700053869 601035268 78132625
|
||||||
|
1778186494 1060342823 96206725
|
||||||
|
|
||||||
|
soil-to-fertilizer map:
|
||||||
|
0 2341619969 92369762
|
||||||
|
1167455233 3617741643 38094704
|
||||||
|
1499102298 1681004272 234557927
|
||||||
|
3376581938 2517836559 179214694
|
||||||
|
2914723756 619913619 149410902
|
||||||
|
161434282 0 41510814
|
||||||
|
3649464352 3314750891 40779782
|
||||||
|
2317356783 1915562199 186244783
|
||||||
|
713485962 950249988 47781849
|
||||||
|
421834722 1125088099 56442466
|
||||||
|
2507552861 3655836347 34407787
|
||||||
|
3565617524 2433989731 83846828
|
||||||
|
2678581348 103843947 189846804
|
||||||
|
995696604 565539077 54374542
|
||||||
|
410018942 2894022626 11815780
|
||||||
|
938203483 303511643 57493121
|
||||||
|
586429700 998031837 127056262
|
||||||
|
3064134658 1533041508 147962764
|
||||||
|
2219062401 2305658720 35961249
|
||||||
|
2050866563 393391944 168195838
|
||||||
|
3803001923 4143671264 151296032
|
||||||
|
814953468 2101806982 123250015
|
||||||
|
1050071146 1508839376 17695066
|
||||||
|
2629883889 1526534442 6507066
|
||||||
|
92369762 3199390767 69064520
|
||||||
|
3212097422 3355530673 164484516
|
||||||
|
4049139793 3803001923 245827503
|
||||||
|
2541960648 3549487250 55536061
|
||||||
|
2255023650 41510814 62333133
|
||||||
|
478277188 842097476 108152512
|
||||||
|
213047569 2697051253 196971373
|
||||||
|
3954297955 4048829426 48488938
|
||||||
|
4002786893 4097318364 46352900
|
||||||
|
1733660225 1181530565 317206338
|
||||||
|
2649109287 3520015189 29472061
|
||||||
|
2636390955 3605023311 12718332
|
||||||
|
2503601566 561587782 3951295
|
||||||
|
202945096 1498736903 10102473
|
||||||
|
1140539167 2278742654 26916066
|
||||||
|
3555796632 293690751 9820892
|
||||||
|
1205549937 2905838406 293552361
|
||||||
|
1067766212 769324521 72772955
|
||||||
|
2597496709 361004764 32387180
|
||||||
|
761267811 2225056997 53685657
|
||||||
|
2868428152 3268455287 46295604
|
||||||
|
|
||||||
|
fertilizer-to-water map:
|
||||||
|
152178464 250673346 55422
|
||||||
|
152233886 237175480 13497866
|
||||||
|
3154188384 1047083609 4715554
|
||||||
|
3582007164 1051799163 5818075
|
||||||
|
3259979115 2494521724 322028049
|
||||||
|
402907232 308602731 62253347
|
||||||
|
4236473989 2233392950 58493307
|
||||||
|
2707774309 1208011821 30397527
|
||||||
|
3587825239 2917624950 58473157
|
||||||
|
896622971 631491687 63460153
|
||||||
|
465160579 250728768 57873963
|
||||||
|
165731752 0 237175480
|
||||||
|
2439165 370856078 149739299
|
||||||
|
3074181106 3899730566 80007278
|
||||||
|
3059559654 1999627040 14621452
|
||||||
|
1312214893 3041353489 50783396
|
||||||
|
960083124 694951840 352131769
|
||||||
|
2680544515 1972397246 27229794
|
||||||
|
631491687 1238409348 57882415
|
||||||
|
3646298396 3092136885 387540126
|
||||||
|
2592786348 2014248492 87758167
|
||||||
|
1513392872 3479677011 420053555
|
||||||
|
2509534881 1681896910 83251467
|
||||||
|
0 520595377 2439165
|
||||||
|
2738171836 1352203735 287691765
|
||||||
|
1362998289 1057617238 150394583
|
||||||
|
3158903938 2816549773 101075177
|
||||||
|
4033838522 2291886257 202635467
|
||||||
|
1933446427 1296291763 55911972
|
||||||
|
689374102 1765148377 207248869
|
||||||
|
2152304019 1639895500 42001410
|
||||||
|
1989358399 2135702712 97690238
|
||||||
|
3025863601 2102006659 33696053
|
||||||
|
2087048637 2976098107 65255382
|
||||||
|
2194305429 3979737844 315229452
|
||||||
|
|
||||||
|
water-to-light map:
|
||||||
|
2953662638 2442860750 178173989
|
||||||
|
1541545030 2734817557 190358536
|
||||||
|
754320741 167246313 76339023
|
||||||
|
1856345147 4205331132 89636164
|
||||||
|
4252036650 1935658232 42930646
|
||||||
|
155447228 526835738 21442665
|
||||||
|
854896092 243585336 283250402
|
||||||
|
1353462278 548278403 77281269
|
||||||
|
3280902948 2925176093 9989800
|
||||||
|
1430743547 1124319386 47116063
|
||||||
|
3675997643 3263466919 126502268
|
||||||
|
3189943537 3895004042 77007091
|
||||||
|
3439702455 2103030459 136553424
|
||||||
|
1836535231 2083220543 19809916
|
||||||
|
1207650119 1274680470 145812159
|
||||||
|
2726058004 2958658296 227604634
|
||||||
|
3131836627 4078001241 58106910
|
||||||
|
3290892748 4136108151 65420425
|
||||||
|
1138146494 74127343 49701217
|
||||||
|
320969084 0 74127343
|
||||||
|
3356313173 4038105259 39895982
|
||||||
|
2313549351 2239583883 7585248
|
||||||
|
3908092261 2247169131 195691619
|
||||||
|
205670012 625559672 115299072
|
||||||
|
830659764 1100083058 24236328
|
||||||
|
3424990872 3972011133 14711583
|
||||||
|
80982326 1171435449 74464902
|
||||||
|
3576255879 1835916468 99741764
|
||||||
|
176889893 1245900351 28780119
|
||||||
|
395096427 740858744 359224314
|
||||||
|
2533259155 1541545030 192798849
|
||||||
|
3396209155 2706035840 28781717
|
||||||
|
1945981311 4201528576 3802556
|
||||||
|
0 123828560 23615345
|
||||||
|
3802499911 3789411692 105592350
|
||||||
|
1949783867 3986722716 51382543
|
||||||
|
2509766752 2935165893 23492403
|
||||||
|
4167035549 2621034739 85001101
|
||||||
|
23615345 1420492629 57366981
|
||||||
|
3266950628 3249514599 13952320
|
||||||
|
1731903566 1978588878 104631665
|
||||||
|
2211976762 1734343879 101572589
|
||||||
|
2001166410 3578601340 210810352
|
||||||
|
2321134599 3389969187 188632153
|
||||||
|
1187847711 147443905 19802408
|
||||||
|
4103783880 3186262930 63251669
|
||||||
|
|
||||||
|
light-to-temperature map:
|
||||||
|
70532163 2072528772 6548798
|
||||||
|
4144686847 1559382043 150280449
|
||||||
|
54527625 2056524234 16004538
|
||||||
|
3807793247 2758133633 336893600
|
||||||
|
650952420 859025504 83666107
|
||||||
|
1904509744 3183659444 2786814
|
||||||
|
780330456 3472688125 531542959
|
||||||
|
77080961 54527625 154573827
|
||||||
|
2350216539 1865381176 99600417
|
||||||
|
3084022977 1715376404 150004772
|
||||||
|
2107664798 4058224014 213619824
|
||||||
|
1773073526 793980359 19333216
|
||||||
|
231654788 2452888407 305245226
|
||||||
|
3781460885 2030191872 26332362
|
||||||
|
2939630982 2331937347 79772249
|
||||||
|
560023472 1070561556 50945056
|
||||||
|
2478552333 1313852724 245529319
|
||||||
|
3234027749 526405562 267574797
|
||||||
|
536900014 4271843838 23123458
|
||||||
|
1873309968 1709662492 5713912
|
||||||
|
1879023880 2427402543 25485864
|
||||||
|
2724081652 2116388017 215549330
|
||||||
|
1922425580 2079077570 37310447
|
||||||
|
734618527 813313575 45711929
|
||||||
|
1702870875 971426988 70202651
|
||||||
|
3019403231 3186446258 64619746
|
||||||
|
3767451847 4044214976 14009038
|
||||||
|
3575105735 1121506612 192346112
|
||||||
|
1959736027 3324759354 147928771
|
||||||
|
1792406742 2411709596 15692947
|
||||||
|
1808099689 1964981593 65210279
|
||||||
|
1907296558 3095027233 15129022
|
||||||
|
1311873415 209101452 317304110
|
||||||
|
2449816956 942691611 28735377
|
||||||
|
610968528 4004231084 39983892
|
||||||
|
2321284622 1041629639 28931917
|
||||||
|
3501602546 3110156255 73503189
|
||||||
|
1629177525 3251066004 73693350
|
||||||
|
|
||||||
|
temperature-to-humidity map:
|
||||||
|
2698939019 1899653215 333343198
|
||||||
|
636293562 2781983613 635230295
|
||||||
|
3050376312 0 239799964
|
||||||
|
92201313 2779048878 2934735
|
||||||
|
3290176276 2660814640 25026650
|
||||||
|
2134083411 2489247727 2136257
|
||||||
|
3851297241 3604655691 314442217
|
||||||
|
1483568567 866597732 152309188
|
||||||
|
333293267 1018906920 303000295
|
||||||
|
0 2685841290 1438147
|
||||||
|
1635877755 2687279437 53836876
|
||||||
|
3032282217 2471153632 18094095
|
||||||
|
26400590 1558914368 65800723
|
||||||
|
1271523857 1346869658 212044710
|
||||||
|
2136219668 239799964 524786786
|
||||||
|
2661006454 2741116313 37932565
|
||||||
|
1859145287 1624715091 274938124
|
||||||
|
1689714631 2491383984 169430656
|
||||||
|
1438147 1321907215 24962443
|
||||||
|
3315202926 764586750 102010982
|
||||||
|
95136048 2232996413 238157219
|
||||||
|
3604655691 3919097908 90929169
|
||||||
|
3695584860 4010027077 155712381
|
||||||
|
|
||||||
|
humidity-to-location map:
|
||||||
|
2245504116 1166524785 164267337
|
||||||
|
2409771453 1729601904 604997365
|
||||||
|
120247692 2545941209 34587342
|
||||||
|
3116311219 3036964896 76986730
|
||||||
|
1512620570 0 147162638
|
||||||
|
3512343576 4259469787 35497509
|
||||||
|
1169583301 1336067922 123578155
|
||||||
|
3921210971 3312190478 126745070
|
||||||
|
2181345242 2427978815 64158874
|
||||||
|
0 1459646077 120247692
|
||||||
|
4223038352 3474502707 71928944
|
||||||
|
779681654 1579893769 149708135
|
||||||
|
3894412843 3962661335 26798128
|
||||||
|
1659783208 1330792122 5275800
|
||||||
|
500368604 393220323 51352254
|
||||||
|
3686138511 3754387003 208274332
|
||||||
|
632498588 2492137689 53803520
|
||||||
|
1135055763 147162638 34527538
|
||||||
|
686302108 2334599269 93379546
|
||||||
|
551720858 2731943364 80777730
|
||||||
|
306544451 181690176 42409340
|
||||||
|
4115726396 3237074496 75115982
|
||||||
|
3547841085 4014859186 138297426
|
||||||
|
3080744060 3438935548 35567159
|
||||||
|
1293161456 2812721094 202047724
|
||||||
|
929389789 960858811 205665974
|
||||||
|
4190842378 3113951626 32195974
|
||||||
|
1736823657 516337226 444521585
|
||||||
|
154835034 224099516 151709417
|
||||||
|
3036964896 3614528274 43779164
|
||||||
|
1495209180 375808933 17411390
|
||||||
|
1665059008 444572577 71764649
|
||||||
|
348953791 2580528551 151414813
|
||||||
|
3299611124 3546431651 68096623
|
||||||
|
3421416680 3146147600 90926896
|
||||||
|
4047956041 3989459463 25399723
|
||||||
|
3367707747 3700678070 53708933
|
||||||
|
4073355764 3658307438 42370632
|
||||||
|
3193297949 4153156612 106313175
|
8
day_5/part_1/Cargo.toml
Normal file
8
day_5/part_1/Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[package]
|
||||||
|
name = "day_5-1"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
49
day_5/part_1/src/main.rs
Normal file
49
day_5/part_1/src/main.rs
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
fn main() {
|
||||||
|
let input = include_str!("../../input.txt").trim_end();
|
||||||
|
let mut segments: Vec<&str> = input.split("\n\n").collect::<Vec<&str>>();
|
||||||
|
let mut numbers: Vec<i64> = segments
|
||||||
|
.remove(0)
|
||||||
|
.replace("seeds: ", "")
|
||||||
|
.split(" ")
|
||||||
|
.map(|num| num.parse::<i64>().unwrap())
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
for segment in segments {
|
||||||
|
let mut new_numbers: Vec<i64> = Vec::new();
|
||||||
|
let mut lines = segment.trim().lines();
|
||||||
|
lines.next(); // Remove first line
|
||||||
|
|
||||||
|
for line in lines {
|
||||||
|
let values = line
|
||||||
|
.split(" ")
|
||||||
|
.map(|num| num.parse::<i64>().unwrap())
|
||||||
|
.collect::<Vec<i64>>();
|
||||||
|
|
||||||
|
let dest_start = values[0];
|
||||||
|
let source_start = values[1];
|
||||||
|
let range_len = values[2];
|
||||||
|
|
||||||
|
let mut to_delete: Vec<usize> = Vec::new();
|
||||||
|
for i in 0..numbers.len() {
|
||||||
|
let num = numbers[i];
|
||||||
|
|
||||||
|
if num >= source_start && num < source_start + range_len {
|
||||||
|
new_numbers.push(dest_start + (num - source_start));
|
||||||
|
to_delete.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
to_delete.sort_by(|a, b| b.cmp(a));
|
||||||
|
for i in to_delete {
|
||||||
|
numbers.remove(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for num in new_numbers {
|
||||||
|
numbers.push(num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
numbers.sort();
|
||||||
|
println!("Result: {}", numbers.first().unwrap());
|
||||||
|
}
|
8
day_5/part_2/Cargo.toml
Normal file
8
day_5/part_2/Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[package]
|
||||||
|
name = "day_5-2"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
125
day_5/part_2/src/main.rs
Normal file
125
day_5/part_2/src/main.rs
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
#[derive(Copy, Clone, Debug)]
|
||||||
|
struct Pair {
|
||||||
|
first: i64,
|
||||||
|
last: i64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Pair {
|
||||||
|
fn increment(&self, difference: i64) -> Pair {
|
||||||
|
Pair {
|
||||||
|
first: self.first + difference,
|
||||||
|
last: self.last + difference,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_same(&self, other: &Pair) -> bool {
|
||||||
|
self.first == other.first && self.last == other.last
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let input = include_str!("../../input.txt").trim_end();
|
||||||
|
let mut segments: Vec<&str> = input.split("\n\n").collect::<Vec<&str>>();
|
||||||
|
let mut numbers: Vec<Pair> = Vec::new();
|
||||||
|
let mut input_numbers: Vec<i64> = segments
|
||||||
|
.remove(0)
|
||||||
|
.replace("seeds: ", "")
|
||||||
|
.split(" ")
|
||||||
|
.map(|num| num.parse::<i64>().unwrap())
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
while !input_numbers.is_empty() {
|
||||||
|
let first = input_numbers.remove(0);
|
||||||
|
let last = first + input_numbers.remove(0) - 1;
|
||||||
|
|
||||||
|
numbers.push(Pair {
|
||||||
|
first: first,
|
||||||
|
last: last,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for segment in segments {
|
||||||
|
let mut new_numbers: Vec<Pair> = Vec::new();
|
||||||
|
let mut lines = segment.trim().lines();
|
||||||
|
lines.next();
|
||||||
|
|
||||||
|
for line in lines {
|
||||||
|
let values = line
|
||||||
|
.split(" ")
|
||||||
|
.map(|num| num.parse::<i64>().unwrap())
|
||||||
|
.collect::<Vec<i64>>();
|
||||||
|
|
||||||
|
let dest_start = values[0];
|
||||||
|
let source_start = values[1];
|
||||||
|
let range_len = values[2];
|
||||||
|
let source_end = source_start + range_len - 1;
|
||||||
|
|
||||||
|
for item in numbers.clone() {
|
||||||
|
// Item is not in range
|
||||||
|
if (item.first < source_start && item.last < source_start) || (item.first > source_end && item.last > source_end) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item is completely within range
|
||||||
|
if item.first >= source_start && item.last <= source_end {
|
||||||
|
new_numbers.push(item.increment(dest_start - source_start));
|
||||||
|
numbers.retain(|i| !i.is_same(&item));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item is overflowing to the left
|
||||||
|
if item.first < source_start && item.last <= source_end {
|
||||||
|
new_numbers.push(Pair {
|
||||||
|
first: source_start,
|
||||||
|
last: item.last,
|
||||||
|
}.increment(dest_start - source_start));
|
||||||
|
numbers.push(Pair {
|
||||||
|
first: item.first,
|
||||||
|
last: source_start - 1,
|
||||||
|
});
|
||||||
|
numbers.retain(|i| !i.is_same(&item));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item is overflowing to the right
|
||||||
|
if item.first >= source_start && item.last > source_end {
|
||||||
|
new_numbers.push(Pair {
|
||||||
|
first: item.first,
|
||||||
|
last: source_end,
|
||||||
|
}.increment(dest_start - source_start));
|
||||||
|
numbers.push(Pair {
|
||||||
|
first: source_end + 1,
|
||||||
|
last: item.last,
|
||||||
|
});
|
||||||
|
numbers.retain(|i| !i.is_same(&item));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item is overflowing on both sides
|
||||||
|
if source_start > item.first && source_end < item.last {
|
||||||
|
new_numbers.push(Pair {
|
||||||
|
first: source_start,
|
||||||
|
last: source_end,
|
||||||
|
}.increment(dest_start - source_start));
|
||||||
|
numbers.push(Pair {
|
||||||
|
first: item.first,
|
||||||
|
last: source_start - 1,
|
||||||
|
});
|
||||||
|
numbers.push(Pair {
|
||||||
|
first: source_end + 1,
|
||||||
|
last: item.last,
|
||||||
|
});
|
||||||
|
numbers.retain(|i| !i.is_same(&item));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for num in &new_numbers {
|
||||||
|
numbers.push(*num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
numbers.sort_by(|a, b| a.first.cmp(&b.first));
|
||||||
|
println!("Result: {}", &numbers[0].first);
|
||||||
|
}
|
Loading…
Reference in a new issue