diff options
Diffstat (limited to '2023/05')
| -rw-r--r-- | 2023/05/5a.c | 45 | ||||
| -rw-r--r-- | 2023/05/5b.c | 71 | ||||
| -rw-r--r-- | 2023/05/example.txt | 33 | ||||
| -rw-r--r-- | 2023/05/in.txt | 258 |
4 files changed, 407 insertions, 0 deletions
diff --git a/2023/05/5a.c b/2023/05/5a.c new file mode 100644 index 0000000..15d2805 --- /dev/null +++ b/2023/05/5a.c | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | #include <inttypes.h> | ||
| 2 | #include <stdbool.h> | ||
| 3 | #include <stdio.h> | ||
| 4 | #include <stdlib.h> | ||
| 5 | #include <string.h> | ||
| 6 | |||
| 7 | #define N 100 | ||
| 8 | |||
| 9 | bool isnum(char c) { return c >= '0' && c <= '9'; } | ||
| 10 | |||
| 11 | int main() { | ||
| 12 | char *buf, line[N]; | ||
| 13 | int64_t i, m, ns, seed[N], next[N], r[3]; | ||
| 14 | |||
| 15 | for (ns = 0, buf = fgets(line, N, stdin); *buf; buf++) { | ||
| 16 | if (!isnum(*buf)) continue; | ||
| 17 | next[ns++] = atoll(buf); | ||
| 18 | while (isnum(*buf)) buf++; | ||
| 19 | } | ||
| 20 | |||
| 21 | |||
| 22 | while ((buf = fgets(line, N, stdin)) != NULL) { | ||
| 23 | if (!isnum(*buf)) { | ||
| 24 | memcpy(seed, next, ns * sizeof(int64_t)); | ||
| 25 | fgets(line, N, stdin); /* Discard description */ | ||
| 26 | continue; | ||
| 27 | } | ||
| 28 | |||
| 29 | for (i = 0; *buf; buf++) { | ||
| 30 | r[i++] = atoll(buf); | ||
| 31 | while (isnum(*buf)) buf++; | ||
| 32 | } | ||
| 33 | |||
| 34 | for (i = 0; i < ns; i++) | ||
| 35 | if (seed[i] >= r[1] && seed[i] < r[1] + r[2]) | ||
| 36 | next[i] = seed[i] + (r[0] - r[1]); | ||
| 37 | } | ||
| 38 | |||
| 39 | m = next[0]; | ||
| 40 | for (i = 1; i < ns; i++) | ||
| 41 | m = m > next[i] ? next[i] : m; | ||
| 42 | |||
| 43 | printf("%" PRId64 "\n", m); | ||
| 44 | return 0; | ||
| 45 | } | ||
diff --git a/2023/05/5b.c b/2023/05/5b.c new file mode 100644 index 0000000..aeac8c0 --- /dev/null +++ b/2023/05/5b.c | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | /* For part 2 we save ranges as (first, last) instead of (first, length) */ | ||
| 2 | |||
| 3 | #include <inttypes.h> | ||
| 4 | #include <stdbool.h> | ||
| 5 | #include <stdio.h> | ||
| 6 | #include <stdlib.h> | ||
| 7 | #include <string.h> | ||
| 8 | |||
| 9 | #define N 10000 | ||
| 10 | |||
| 11 | #define MIN(a, b) ((a)<(b)?(a):(b)) | ||
| 12 | #define MAX(a, b) ((a)>(b)?(a):(b)) | ||
| 13 | |||
| 14 | bool isnum(char c) { return c >= '0' && c <= '9'; } | ||
| 15 | |||
| 16 | void append(int64_t dst[][2], int64_t src[][2], int64_t *nr, int64_t *nnr) { | ||
| 17 | for (int i = 0; i < *nnr; i++) { | ||
| 18 | dst[i+*nr][0] = src[i][0]; | ||
| 19 | dst[i+*nr][1] = src[i][1]; | ||
| 20 | } | ||
| 21 | *nr += *nnr; | ||
| 22 | *nnr = 0; | ||
| 23 | } | ||
| 24 | |||
| 25 | int64_t readl(int64_t nums[], char *buf) { | ||
| 26 | int64_t i; | ||
| 27 | for (i = 0; *buf; buf++) { | ||
| 28 | if (!isnum(*buf)) continue; | ||
| 29 | nums[i++] = atoll(buf); | ||
| 30 | while (isnum(*buf)) buf++; | ||
| 31 | } | ||
| 32 | return i; | ||
| 33 | } | ||
| 34 | |||
| 35 | int main() { | ||
| 36 | char *buf, line[N]; | ||
| 37 | int64_t i, li, ri, m, nr, nnr, r[3], range[N][2], next[N][2], aux[N]; | ||
| 38 | |||
| 39 | nnr = readl(aux, fgets(line, N, stdin)) / 2; | ||
| 40 | for (i = 0; i < nnr; i++) { | ||
| 41 | next[i][0] = aux[2*i]; | ||
| 42 | next[i][1] = aux[2*i+1] + next[i][0] - 1; | ||
| 43 | } | ||
| 44 | |||
| 45 | for (nr = 0; (buf = fgets(line, N, stdin)) != NULL; ) { | ||
| 46 | if (!isnum(*buf)) { | ||
| 47 | append(range, next, &nr, &nnr); | ||
| 48 | continue; | ||
| 49 | } | ||
| 50 | |||
| 51 | readl(r, buf); | ||
| 52 | for (i = 0; i < nr; i++) { | ||
| 53 | li = range[i][0]; | ||
| 54 | ri = range[i][1]; | ||
| 55 | if (li > ri || r[1] > ri || r[1]+r[2]-1 < li) continue; | ||
| 56 | range[i][1] = MIN(ri, r[1]-1); | ||
| 57 | next[nnr][0] = MAX(li, r[1]) + r[0]-r[1]; | ||
| 58 | next[nnr++][1] = MIN(ri, r[1]+r[2]-1) + r[0]-r[1]; | ||
| 59 | range[nr][0] = MAX(li, r[1]+r[2]); | ||
| 60 | range[nr++][1] = ri; | ||
| 61 | } | ||
| 62 | } | ||
| 63 | |||
| 64 | append(range, next, &nr, &nnr); | ||
| 65 | for (i = 0, m = -1; i < nr; i++) | ||
| 66 | if (range[i][0] <= range[i][1]) | ||
| 67 | m = m == -1 || m > range[i][0] ? range[i][0] : m; | ||
| 68 | |||
| 69 | printf("%" PRId64 "\n", m); | ||
| 70 | return 0; | ||
| 71 | } | ||
diff --git a/2023/05/example.txt b/2023/05/example.txt new file mode 100644 index 0000000..f756727 --- /dev/null +++ b/2023/05/example.txt | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | seeds: 79 14 55 13 | ||
| 2 | |||
| 3 | seed-to-soil map: | ||
| 4 | 50 98 2 | ||
| 5 | 52 50 48 | ||
| 6 | |||
| 7 | soil-to-fertilizer map: | ||
| 8 | 0 15 37 | ||
| 9 | 37 52 2 | ||
| 10 | 39 0 15 | ||
| 11 | |||
| 12 | fertilizer-to-water map: | ||
| 13 | 49 53 8 | ||
| 14 | 0 11 42 | ||
| 15 | 42 0 7 | ||
| 16 | 57 7 4 | ||
| 17 | |||
| 18 | water-to-light map: | ||
| 19 | 88 18 7 | ||
| 20 | 18 25 70 | ||
| 21 | |||
| 22 | light-to-temperature map: | ||
| 23 | 45 77 23 | ||
| 24 | 81 45 19 | ||
| 25 | 68 64 13 | ||
| 26 | |||
| 27 | temperature-to-humidity map: | ||
| 28 | 0 69 1 | ||
| 29 | 1 0 69 | ||
| 30 | |||
| 31 | humidity-to-location map: | ||
| 32 | 60 56 37 | ||
| 33 | 56 93 4 | ||
diff --git a/2023/05/in.txt b/2023/05/in.txt new file mode 100644 index 0000000..ed6cba2 --- /dev/null +++ b/2023/05/in.txt | |||
| @@ -0,0 +1,258 @@ | |||
| 1 | seeds: 1347397244 12212989 2916488878 1034516675 2821376423 8776260 2240804122 368941186 824872000 124877531 1597965637 36057332 4091290431 159289722 1875817275 106230212 998513229 159131132 2671581775 4213184 | ||
| 2 | |||
| 3 | seed-to-soil map: | ||
| 4 | 2988689842 4194451945 100515351 | ||
| 5 | 2936009234 3353543976 52680608 | ||
| 6 | 588295233 2638661119 66434163 | ||
| 7 | 3932833115 2936009234 88315480 | ||
| 8 | 3525561241 3331695912 21848064 | ||
| 9 | 1622262003 1969921080 210668061 | ||
| 10 | 2160566101 909457337 162053391 | ||
| 11 | 1832930064 1887384181 82536899 | ||
| 12 | 3625461917 3024324714 307371198 | ||
| 13 | 3547409305 3680043285 78052612 | ||
| 14 | 1915466963 588295233 240773057 | ||
| 15 | 3089205193 3758095897 436356048 | ||
| 16 | 4021148595 3406224584 273818701 | ||
| 17 | 2156240020 2705095282 4326081 | ||
| 18 | 1164190025 2180589141 458071978 | ||
| 19 | 2477360206 829068290 80389047 | ||
| 20 | 2322619492 2709421363 154740714 | ||
| 21 | 654729396 1377923552 509460629 | ||
| 22 | 2557749253 1211672006 166251546 | ||
| 23 | 2724000799 1071510728 140161278 | ||
| 24 | |||
| 25 | soil-to-fertilizer map: | ||
| 26 | 3961802244 3774724750 90737174 | ||
| 27 | 3164426550 3931513861 70563571 | ||
| 28 | 147221566 1279409424 704464 | ||
| 29 | 1394834067 2074132435 40845148 | ||
| 30 | 3795834030 2142537807 47621185 | ||
| 31 | 4083197470 4095560143 199407153 | ||
| 32 | 2722903919 2876212954 93296050 | ||
| 33 | 3467494732 2775293966 100918988 | ||
| 34 | 1809650294 1815421878 66426374 | ||
| 35 | 505665614 275280169 12031240 | ||
| 36 | 2142537807 4002077432 60985377 | ||
| 37 | 1577608496 331482268 177958690 | ||
| 38 | 2590855103 2196397738 132048816 | ||
| 39 | 1942888942 1978207624 24340152 | ||
| 40 | 756722275 120895382 4815243 | ||
| 41 | 3435289775 3899308904 32204957 | ||
| 42 | 1967229094 715059087 147748489 | ||
| 43 | 3955563498 2190158992 6238746 | ||
| 44 | 356096070 125710625 149569544 | ||
| 45 | 2520387506 2704826369 70467597 | ||
| 46 | 517696854 2041922514 32209921 | ||
| 47 | 1755567186 0 54083108 | ||
| 48 | 348569226 1280113888 7526844 | ||
| 49 | 761537518 1597328127 34415327 | ||
| 50 | 1114796271 1631743454 128592301 | ||
| 51 | 0 1494456232 102871895 | ||
| 52 | 1070625412 287311409 44170859 | ||
| 53 | 549906775 1287640732 206815500 | ||
| 54 | 102871895 710084154 4974933 | ||
| 55 | 1298474695 1881848252 96359372 | ||
| 56 | 3843455215 2549697361 112108283 | ||
| 57 | 3761987050 3865461924 33846980 | ||
| 58 | 4052539418 2674168317 30658052 | ||
| 59 | 1435679215 862807576 141929281 | ||
| 60 | 795952845 1004736857 274672567 | ||
| 61 | 3729489716 4063062809 32497334 | ||
| 62 | 2203523184 3085216895 316864322 | ||
| 63 | 2931907860 3402081217 11267883 | ||
| 64 | 107846828 2002547776 39374738 | ||
| 65 | 2816199969 2969509004 115707891 | ||
| 66 | 3568413720 3413349100 161075996 | ||
| 67 | 2943175743 2328446554 221250807 | ||
| 68 | 3234990121 3574425096 200299654 | ||
| 69 | 4282604623 2661805644 12362673 | ||
| 70 | 147926030 509440958 200643196 | ||
| 71 | 1876076668 54083108 66812274 | ||
| 72 | 1243388572 1760335755 55086123 | ||
| 73 | |||
| 74 | fertilizer-to-water map: | ||
| 75 | 2460553918 850437816 63304366 | ||
| 76 | 1259757436 1986466040 193004355 | ||
| 77 | 2879827793 2638634287 61837387 | ||
| 78 | 39629536 0 3143529 | ||
| 79 | 2160922553 2535779758 68016930 | ||
| 80 | 2523858284 922523353 36811379 | ||
| 81 | 52449107 1199799263 207670511 | ||
| 82 | 2692884203 2603796688 34837599 | ||
| 83 | 3755186617 147251641 492169035 | ||
| 84 | 3266515480 3620937477 292130997 | ||
| 85 | 1596851845 4077877285 217090011 | ||
| 86 | 2727721802 913742182 8781171 | ||
| 87 | 3055087322 3913068474 164808811 | ||
| 88 | 2228939483 2179470395 229525704 | ||
| 89 | 3668162112 1052896909 87024505 | ||
| 90 | 3219896133 1539684314 30399976 | ||
| 91 | 1510550909 1679599925 86300936 | ||
| 92 | 0 3143529 39629536 | ||
| 93 | 2560669663 1407469774 132214540 | ||
| 94 | 1452761791 1142010145 57789118 | ||
| 95 | 260119618 2700471674 920465803 | ||
| 96 | 3250296109 1036677538 16219371 | ||
| 97 | 1813941856 1026924408 9753130 | ||
| 98 | 4247355652 2488168114 47611644 | ||
| 99 | 1823694986 959334732 67589676 | ||
| 100 | 2831305507 639420676 48522286 | ||
| 101 | 2736502973 52449107 94802534 | ||
| 102 | 1180585421 2408996099 79172015 | ||
| 103 | 2941665180 1765900861 113422142 | ||
| 104 | 2458465187 1139921414 2088731 | ||
| 105 | 3558646477 1570084290 109515635 | ||
| 106 | 1891284662 687942962 162494854 | ||
| 107 | 2053779516 1879323003 107143037 | ||
| 108 | |||
| 109 | water-to-light map: | ||
| 110 | 2196302869 3170532562 121192468 | ||
| 111 | 3065704582 2916528129 254004433 | ||
| 112 | 2858667310 1154274853 9085577 | ||
| 113 | 3789349818 1163360430 70779786 | ||
| 114 | 2064226029 1434838179 90165206 | ||
| 115 | 1448515654 725716988 103420445 | ||
| 116 | 2690533041 2124509945 168134269 | ||
| 117 | 347894075 3345882022 38285799 | ||
| 118 | 3966625235 2618593488 35838159 | ||
| 119 | 4186823059 4134088017 89981817 | ||
| 120 | 1701108140 1088713231 65561622 | ||
| 121 | 2589948930 2518009377 100584111 | ||
| 122 | 4283393470 4230658428 11573826 | ||
| 123 | 0 3384167821 347894075 | ||
| 124 | 1638541363 2061943168 62566777 | ||
| 125 | 1296314418 573515752 152201236 | ||
| 126 | 1065865126 194284013 230449292 | ||
| 127 | 1766669762 1991838394 70104774 | ||
| 128 | 830054797 2292644214 110248534 | ||
| 129 | 3595088014 3291725030 12245358 | ||
| 130 | 1978385607 1905997972 85840422 | ||
| 131 | 3607333372 424733305 148782447 | ||
| 132 | 3511869770 2833309885 83218244 | ||
| 133 | 4134088017 4242232254 52735042 | ||
| 134 | 2154391235 3303970388 41911634 | ||
| 135 | 494720868 3732061896 335333929 | ||
| 136 | 1836774536 1234140216 141611071 | ||
| 137 | 2317495337 1633544379 272453593 | ||
| 138 | 4002463394 2402892748 64932431 | ||
| 139 | 940303331 829137433 125561795 | ||
| 140 | 1551936099 954699228 27518372 | ||
| 141 | 4276804876 4224069834 6588594 | ||
| 142 | 3756115819 2467825179 33233999 | ||
| 143 | 2867752887 0 19073457 | ||
| 144 | 386179874 1525003385 108540994 | ||
| 145 | 1579454471 1375751287 59086892 | ||
| 146 | 3319709015 2501059178 16950199 | ||
| 147 | 3336659214 19073457 175210556 | ||
| 148 | 3860129604 982217600 106495631 | ||
| 149 | 2886826344 2654431647 178878238 | ||
| 150 | |||
| 151 | light-to-temperature map: | ||
| 152 | 977891457 1797846421 453265654 | ||
| 153 | 3607226990 3913974738 161345346 | ||
| 154 | 2303244644 3266224873 12707372 | ||
| 155 | 1537599301 3278932245 264559714 | ||
| 156 | 354466514 3168465761 62294113 | ||
| 157 | 747844586 3543491959 55668994 | ||
| 158 | 2982698313 3599160953 269886589 | ||
| 159 | 2067998119 2251112075 27763866 | ||
| 160 | 59336731 230685734 266868096 | ||
| 161 | 3768572336 1500157846 31849471 | ||
| 162 | 3856743875 939537646 438223421 | ||
| 163 | 2095761985 59336731 146190926 | ||
| 164 | 326204827 4075320084 28261687 | ||
| 165 | 1502134302 3230759874 35464999 | ||
| 166 | 1431157111 868560455 70977191 | ||
| 167 | 2315952016 2579115195 227102616 | ||
| 168 | 1802159015 1532007317 265839104 | ||
| 169 | 2241952911 807268722 61291733 | ||
| 170 | 3297512098 497553830 309714892 | ||
| 171 | 852851251 4103581771 2643427 | ||
| 172 | 3252584902 3869047542 44927196 | ||
| 173 | 855494678 1377761067 122396779 | ||
| 174 | 2543054632 4106225198 139404427 | ||
| 175 | 2682459059 2278875941 300239254 | ||
| 176 | 803513580 4245629625 49337671 | ||
| 177 | 416760627 205527657 25158077 | ||
| 178 | 3800421807 2806217811 56322068 | ||
| 179 | 441918704 2862539879 305925882 | ||
| 180 | |||
| 181 | temperature-to-humidity map: | ||
| 182 | 3507573 490548898 11693081 | ||
| 183 | 545755853 699222305 569882925 | ||
| 184 | 3794976513 167435410 77260251 | ||
| 185 | 0 1526297837 3507573 | ||
| 186 | 1335234764 1766508370 36536350 | ||
| 187 | 2131780538 502241979 64264976 | ||
| 188 | 3707588652 1679120509 87387861 | ||
| 189 | 96082543 2288930706 220305732 | ||
| 190 | 1371771114 1529805410 106547120 | ||
| 191 | 481810045 3044354609 63945808 | ||
| 192 | 15200654 1426594789 7560739 | ||
| 193 | 3206337878 109359655 58075755 | ||
| 194 | 2445677382 2019348918 269581788 | ||
| 195 | 1909096745 3571407035 4209780 | ||
| 196 | 3138678479 4049712539 66833109 | ||
| 197 | 3400069156 3490205314 81201721 | ||
| 198 | 4084645800 3846924477 65868498 | ||
| 199 | 2353535073 1434155528 92142309 | ||
| 200 | 1716598669 3935506457 114206082 | ||
| 201 | 3264413633 4116545648 30901597 | ||
| 202 | 1913306525 3628450464 218474013 | ||
| 203 | 3205511588 3461720938 826290 | ||
| 204 | 2748703371 2770603565 195642711 | ||
| 205 | 2715259170 244990096 33149766 | ||
| 206 | 1478318234 3108300417 88629505 | ||
| 207 | 22761393 0 73321150 | ||
| 208 | 3295315230 3575616815 45887125 | ||
| 209 | 3872236764 278139862 212409036 | ||
| 210 | 2196045514 1269105230 157489559 | ||
| 211 | 2972004168 2509236438 123906332 | ||
| 212 | 316388275 3296299168 165421770 | ||
| 213 | 1685215763 3025113077 18894296 | ||
| 214 | 2748408936 244695661 294435 | ||
| 215 | 3704521599 4147447245 3067053 | ||
| 216 | 1215008024 566506955 120226740 | ||
| 217 | 1830804751 3912792975 22713482 | ||
| 218 | 1704110059 686733695 12488610 | ||
| 219 | 3488217401 1803044720 216304198 | ||
| 220 | 1872711004 3044007373 347236 | ||
| 221 | 1566947739 2652335541 118268024 | ||
| 222 | 3481270877 3621503940 6946524 | ||
| 223 | 2944346082 3462547228 27658086 | ||
| 224 | 3095910500 1636352530 42767979 | ||
| 225 | 1115638778 3196929922 99369246 | ||
| 226 | 3341202355 2966246276 58866801 | ||
| 227 | 1853518233 2633142770 19192771 | ||
| 228 | 1873058240 73321150 36038505 | ||
| 229 | |||
| 230 | humidity-to-location map: | ||
| 231 | 336906655 0 11018487 | ||
| 232 | 4177510177 2085057023 105144397 | ||
| 233 | 1299579245 2985741466 175347598 | ||
| 234 | 643133711 2270603056 161424888 | ||
| 235 | 2404489601 1000033728 105953201 | ||
| 236 | 4282654574 2864154964 12312722 | ||
| 237 | 3409171342 3327025690 30826088 | ||
| 238 | 2119751049 2190201420 80401636 | ||
| 239 | 3393269098 3357851778 15902244 | ||
| 240 | 82121354 319849190 39107402 | ||
| 241 | 1953814423 3161089064 165936626 | ||
| 242 | 64524116 385149760 17597238 | ||
| 243 | 3439997430 2057119912 27937111 | ||
| 244 | 0 358956592 26193168 | ||
| 245 | 347925142 11018487 93152804 | ||
| 246 | 1484466972 2432027944 360604841 | ||
| 247 | 2510442802 643133711 347359888 | ||
| 248 | 26193168 402746998 38330948 | ||
| 249 | 1190305465 2946259551 39481915 | ||
| 250 | 2200152685 1105986929 204336916 | ||
| 251 | 3467934541 2792632785 71522179 | ||
| 252 | 804558599 3373754022 385746866 | ||
| 253 | 3539456720 1310323845 638053457 | ||
| 254 | 2857802690 3759500888 535466408 | ||
| 255 | 121228756 104171291 215677899 | ||
| 256 | 1229787380 2876467686 69791865 | ||
| 257 | 1474926843 990493599 9540129 | ||
| 258 | 1845071813 1948377302 108742610 | ||
