My attempts to solve puzzles of Advent of Code
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(2023): day 1 and 2

Signed-off-by: Kaushik Chakraborty <git@kaushikc.org>

+1497 -41
+1
.gitignore
··· 19 19 codex.tags 20 20 .ghc.environment.* 21 21 target/ 22 + *.olean
+1000
data/2023/day1.txt
··· 1 + ckmb52fldxkseven3fkjgcbzmnr7 2 + gckhqpb6twoqnjxqplthree2fourkspnsnzxlz1 3 + 2onetwocrgbqm7 4 + frkh2nineqmqxrvdsevenfive 5 + four9two 6 + six7sixqrdfive3twonehsk 7 + xkvsone2 8 + one65 9 + rggxsff1seven 10 + djbcgrrtqdshpqqzj43rgcr 11 + br89fivetwoqggnxjfourtl3 12 + zoneight47five5sixjxd74 13 + 4five1 14 + 5seveneighteightzzbnzsvdjnkvndsxlttfour 15 + htdcmsl12ninethreepkqtdlvtl 16 + twocghtvtdlfchfqnjhrfour19 17 + rptwofiveonecvlldmppxtrvj3 18 + 6gqsvsqpzxj 19 + 5twomgkzsvg 20 + 4ninedflntfsn1 21 + 4threethree 22 + 43two6eight9 23 + 4gqnkntjthree9one45 24 + 9lmjgqnkxqvfrzhbcfrlltjxjlkjfrlmb3 25 + ninethreejkcbplfg4kseventwo 26 + mbkfgktwolbvsptgsixseven1oneightzvm 27 + m5fvqfkkk 28 + tptqnsxmsevencrkdmxms55zrfmpmzv7lzqlnmbkzt 29 + bqccqhbdgeight7 30 + four7nine1eight 31 + 8fivethndnpztzninepdkfive8 32 + 1sixxvqdfourlnpdrfbnnx41vhqgth 33 + sgpkgdb9 34 + fivetwoq7cdprnjdjhs3three9 35 + 1mfvptbhqshblvvvdl 36 + ztftqgbzld8jkcmsrdfzonemzdmbzxpfour 37 + dfkctqcjbmfourhszmlvtkeightthree2 38 + 4onersrfjcskckcxcj4sevenzzzpsixeight 39 + 1fourr5gxpone 40 + seven74ninersgvvmtgsix 41 + jvtwonefivetwosbpglbx2two 42 + fourfivecxgssssixtwofour4 43 + 3zcgcjdcpbgqdfnhxtneight 44 + fourfour29cpbccthree44 45 + 6six9foureight5xmfdf 46 + four77 47 + tqtnjshdmtwo3four8one27 48 + one52 49 + nine32five3six 50 + qcjbjrpqdtpvveightpmzs17fourjvghvl 51 + 5293gmtdttfpmrlhvlt9 52 + 2zonenfglkskxhn3gxbrtxtcpfive 53 + three5cfourfvmqlnhp4two 54 + three4knrdzxpr 55 + fmpvqkxgeightthreebdrng9tdcffvsfctwo 56 + jpktgx8fivegqeight5three 57 + 7sevennine 58 + 3two3 59 + nfthhzcq2 60 + plmbtrzbnbmt1nine 61 + 149hvjbktkmbj8mtnrblcvfive7seven 62 + bfthree1 63 + six6kqprz86two6 64 + jthree6 65 + nine2hzrlcqrt7eight 66 + nnzhkhpdb8rbnqmxrfive 67 + rkszqnp1 68 + t1 69 + 5sixlmxkgmxrgveight3 70 + sevenlptpdhtjpgxconedvtrrnngn8 71 + nlpvxbscttbbpgndnc7jvrtcjxbsxnqvfcxdcfrgtrdkjflzlrqcnmfourkznnmrv 72 + 7kllgxpb6 73 + two4eightfgrsix1five7six 74 + one2three6hmktjgmbxhbjl 75 + bqjtxhntjreightsevendgcfpmkld14four 76 + 22pgcslxtdhkhz8ninethreethreejcklznxq 77 + 146gqthree85twoseven 78 + vlvxlmkfpcxsstsevencdbbdsix6 79 + 5sixseven48 80 + llljbtxtrrpssrfthree9dpvrndphhn 81 + qkhvq5 82 + svrfthree8bdhjshcftdnine4 83 + nfqnfkpchl5pcstz 84 + pbx5mfkfour8 85 + cptwonethreeptwo9gzmlkv9 86 + gdpkprlzr6466fxlvfour 87 + dlnpklqtfivesixfptrdh9four 88 + onedpfskdd38qfvbjdnpglone 89 + 4sevenseven5qf 90 + onepgmmhlgmtvone3c 91 + 247tsnmkd 92 + threeznnnbtfive5tmdfxtwothree3ndjcszrb 93 + oneeight6rhfiveone 94 + threethreethreestvgljm4seven 95 + bfbrk3vqsmone39hzzxdgp6eight 96 + 98rndphxhcbl 97 + 57fourlntgdngzpdsjkbbxnv7 98 + twons4 99 + three4threesixtwo2hf 100 + lgqtcllzsevenhrrhqsmsnncmlz7 101 + 8fnngjrxtljncbvlt7ninehfzrthree 102 + 12mltqtqqrvjmjsbthnzpdjtwo1 103 + lf1onevdmn2 104 + 3twozlqnddmrsixslphpvb 105 + five4nrtcjmvj 106 + cksgmkszrbsrgfkq7tqjxsshxxh7vngsnjt 107 + mfiveone7 108 + kkvtwone5sevenfcfnngpmjktrpxk7djgzmdthreehpp 109 + fxbgtcjp4pxpjv5rbfllhfcpfive8 110 + 2gxrkjdtvxmnvs76 111 + npvvleightlpd354vrfh1 112 + zbnzdlzpqzsixnine4sevenqtddzzm6 113 + 6cxrhdvzbmthree98 114 + 77eightnine32four 115 + 56tshj77one 116 + 161xk26mspxkchfourfive 117 + onenineljnsmvmfb7 118 + 6hxvmqtwo 119 + khzninetwo3pbtsqxlqj3 120 + 1nine3 121 + 6xrzjskblfq 122 + kbtsbckkonethreetwofour7lgcbxmjkjpnine 123 + fivethreecrjznine7 124 + 8qxjdsspgn 125 + vdoneightsix7h9 126 + 5bsjl 127 + gfllsrrrmzbfqdrlnvtdzr3 128 + 7hs2 129 + 1onelseventwo 130 + fivetwo3 131 + 2gnxv9sevenseven 132 + gmmhshzvsixzssixseven6fivehbdvsjdz 133 + 75onegckzsnpnine1xfslhfour6 134 + sixgjhnfvsjnrsixeightnine49 135 + nineseven929rlsdkcpbjrjdlptjbzp2 136 + 9hbpplffngltfourpgk 137 + twoldknnqxkkvvdjldqthree373 138 + cceight9two 139 + zmeightwohkgs6 140 + 6sevenfdmqkss4fivethreesevenfourqfnsvvsj 141 + 4two9njeightnine 142 + two3gzseveneightfour88eight 143 + 2clqj 144 + 1ndvbhbtql 145 + five4sixseven5ghlgbmdgfnqpfdm 146 + 34dt 147 + 9sevenrl5 148 + dpbpqppsixngvmkflllcrtn8 149 + sixgvsctkrp53sbsx 150 + nine9qdrqfourjc 151 + zvppfjpqch24 152 + sg4txzzfoursevenninethreesqcdznksix 153 + one3six2 154 + 5bgdjzxbrlsl3sixlbxtjdpgfkjmq2 155 + drsldhgjtrvmmz3jgrp6 156 + qkeightwosix95nine445cfnine 157 + fivetwo82scjct7onegblrqrggv9 158 + threepfgljkghzc9 159 + 8qvzljppstpnpeight9 160 + 8nine98tkxcfqtg 161 + sevensix4two 162 + 2eightthree 163 + cvhhmcgknj6threefive87 164 + seveneight7dsvqnjsjsqlkeightwovzt 165 + 71oneseven9fiveeightnh 166 + pdjtzxbgjxb3vzfdnjbthree 167 + xqpfourmpddnfcc4one5 168 + jnrms1fkssgpvvlrmf 169 + jbnkeightone6zldns85sixnine 170 + 1fourbqfgxscdxmkvdpsrm 171 + eightsixone8mjbrqkplkqntjdlfourpjdcs 172 + lxdsp6prmfglvdfz9eight7sevensixone 173 + qdksixvmsevent7xlvmtzdkhb 174 + 8spqjvhplpzldpthree2 175 + zqfvpq7pz22 176 + nnfbpfour1 177 + one9ninetwovrclctwo 178 + 344six98seven 179 + kqkj9qqvfxn 180 + seven1fivethree 181 + shlnhgq2c3oneseveneightwodv 182 + eightthreepkcxlk7threeonethreetwo 183 + pgmbhrzzqmvkjl57fourqk8gxjmbfqcjs9 184 + eight5oneights 185 + ninenineeightvkrsrkgh8 186 + svnfdxxftkgzpjqxzkmbbcfourvfsg3two6twonezqn 187 + mnvqcmkqvjlqvtltgdpktr3dkgkbt 188 + sixmg29pplfzrsqhlvfeight 189 + glzsbmzqjj43 190 + 1zqrnpqrcbzdsnfour67zpsxpkbbkmfgrzm 191 + kxbbcjjksix7sixeightnine 192 + zbnhsdxgt5sixsixeightlsdqrgseven 193 + ninezxrllznbcvmldxfbvjx5fivedtpdhsjgk8 194 + reightwo7 195 + fiveninenftgfourjbdkxtxcb38two 196 + sixlpck4sixzcppvhzkchmnpvqjjgffourj 197 + 34pmfdthreetwo 198 + 7zbnnkqone5three 199 + qxkmhcllcqkk5qrqseven47 200 + one62brghc8s 201 + twotwo1xvgcxbthree 202 + three83dfqgjlc8eight 203 + twofive8l1twocqmcccgdm 204 + two6cnine 205 + h2sfnczjmslpmlvdlzrs 206 + 9nbblsvxbhdxqfour8 207 + kfzcsg6sixonevrbchsjtfivenbz 208 + mgtlqcdtwo7qxmszcqpjdplccxzccsixone5nine 209 + mtfpphckdn1eightpdtkssqlxdhtlmcjxb 210 + jbphmjjjrg2159eight 211 + zqskrzb1pgfouronevxscgtlccl 212 + lxvpgrck8fxhxm 213 + fournrnlfive1xt 214 + 3nsjnb 215 + eight1three513nine 216 + 39eightsevenfourbgd1mbljzone 217 + 6two88five2pjpp 218 + fourjlftf7six1xsktfhcdff 219 + 3kcntzlmnnhhmtmlftggqljkrvninetwo 220 + threesixonexlvxrblq24 221 + xpgzzrcckdlnrczxndplbpcb452 222 + ninembdnhhnhhzmvmtdjtkzmb9ncq9one 223 + 4fivebrqrxftwo 224 + 84tqzbcvgdrgpzpxjrone83zgzpsix 225 + 99five 226 + mgsevenqgkckfhbfnine3 227 + 2seventhree 228 + 8fivethreefive2fivethreefive 229 + scrtqsevenjmxlvjrrbdtqgrdghfivethree7seven 230 + sevensix946onesevenfour 231 + dzn14 232 + nineqbxvponekvfffs96zjfhpthree 233 + 53twoqknxnxqbcone 234 + fhonerone7fourpmxskkmmx7 235 + eightlq4fourfourdbsdrvhhs17 236 + nnpgtgcbvrggctbtkzht5xmkhtnnn7brpxjcxdrone 237 + threecxnqkmrrpmzdljstdbfmk5seven 238 + sdptbzqhn7sixnine8 239 + five7jdzdzfqfivesevengtznjmqrblkkzkgvt 240 + fclvllfthx47sixbhq16 241 + 9mbmsxbn 242 + three82fiveseven4 243 + p1kzmzpbhmcthree 244 + eightj3681nmgt8 245 + 2two7 246 + jdbjlvxhhzzsnmcqldrldeight6nine4 247 + 2threefive 248 + foursevenrmfhjvzdv8bpbrvblll1onetwofive 249 + 65cfgkcrhbjk 250 + 6onecjxzxb72gmrblthx 251 + 4jlrvckc9 252 + doneightghmjzzrfourfdzxflm51nineseven7xkxt 253 + r5eightone 254 + nkgknm1 255 + rxbsnnzbrs4two4 256 + 1pqvmfh 257 + r2vpdpkzqcs85 258 + gtfzjnnhsknvjnmnine98 259 + zrdgv4hnbpb 260 + 7one165vddbrzpmfhskvzxdh3 261 + 44szfpgjmvgt4eight 262 + dbgttrbj6five85nsqmzscksvdxks 263 + ffkrhbvq2 264 + 6fourbpjrdvlk 265 + 38eightsix 266 + two4fivedzpgfbtm 267 + 3jbk46 268 + slpkmrstrrvthreepl9bhctdfnfzc 269 + nine4two5kkfmcjgxbqkttg 270 + 1zppnmcr5sjfsbbxh48one 271 + 8one8fourseven5 272 + 6three7nineeight6 273 + 96three 274 + 91twonelt 275 + 5sevenone2sixthreeknhzm 276 + 2fvhgcbvg7sevenzqdtftct7tvvtkpxbrq8 277 + 9nvr 278 + eightfivetwodjg9 279 + 7four2six 280 + 5fkzgffzpgp3 281 + 75sevenfive 282 + mxtwonexsdrpkqzgm1threejqftvl 283 + onekxffhsqb4dkb9fivefvtcjsd 284 + eightone1eighteight4 285 + glfeight7eight4 286 + eightcdfjjfiveeight4fivetwo 287 + npxnp32kfsfjpggdtpkm5 288 + seven7threevcb 289 + xtcvsmdx2four2twonefl 290 + mzkgnzstwo844dcseight 291 + zgoneight65z1seven3 292 + 1two5lc 293 + threevsrg5vdmfvpss27qzrmvmbz 294 + 7qbcnjg1nine1seven3seven 295 + 5fourxdxrhmxsj 296 + v78 297 + 41nine 298 + 56fmktkxvltp4bztxkqfrdthreefive4 299 + fourdnq1 300 + ctlk31srscmmdn66sevendmjjqvgj 301 + b7nine8ninejqqhhdnnpx5 302 + ninedlxdshrzfmrnnq17 303 + jbneightwofiversjctwogvvtprslpgfour9xcone 304 + dpt5hbgbnmdlthree5sixvsvqtnmndpvv 305 + sevenrztpgr8nine2 306 + four9three1keightbmljrjgxkrbjdhbckbst 307 + sfmztfjh49one 308 + seven3three7eightwovs 309 + 48onetwosix4four4ntvrzvdztr 310 + mphtwone5sevenfour7 311 + 4lgqnbdlone 312 + hpnmtjbcdhfhsnxqhjhhfgteighteight8one5 313 + cgtdtt22 314 + plnbntcb8seven1gkgzngxq 315 + 7bonethreefour 316 + ffoureight88 317 + z2four3dfggfntxjbjhdr9three 318 + 5sixgpcm9two 319 + sixpnlcgbcpdsixtwofour4foursix3 320 + dstgjlh812 321 + 3xfhdfrgqjfourkfjone7four8 322 + nine4three6sevenfourthreeeight 323 + njvdqthkv5seven6fourtbklhrqqsixeight6 324 + 58rcfcjdkxcj3eightlndf 325 + jhnt7zblnkdvhslrhpbkzdh 326 + 7threetrlkmmlzsmtwo4dmjf94nine 327 + pssrhmtcv7twotwodjxvlbmnfive58 328 + eightseven271onefxxrfglh 329 + 9bmtwo 330 + three522 331 + eightseventworckvnine2 332 + 6fourtzmlrkrztvtxfcdf5 333 + 3six4rdchffcg7 334 + 6threedqssixnine 335 + fivetwo6 336 + sixnpkr5xbxmjcxjznpnrf8brxtmgl 337 + gtvg3zzbeightkphjs69pjprvhlgl 338 + 7kclrcjbtkcr63two5 339 + threehpn38fivedcmfkgqqeightwovg 340 + hbjcsfshsjqqfive9sevenfourthree3fzjpfjzd 341 + five7qzhnthree1 342 + nxhg17j8ninejnqlnine 343 + ddlnxmcg2 344 + rxeightwopqtpqncvd481154fiveb 345 + sevenvbkzgzmnine4qhpptngvhh 346 + bkmz6nineeight69 347 + tqvzkqfourrj4one 348 + sh15nzxzhqdxd96dqht 349 + 6rhztqrfninefsqszx 350 + 38cngonefourrhlljvpgz5vzhmbdjj5 351 + 8fiveddchtllpt 352 + 13rgzljhsdjfive2six 353 + sevenbdnbheightfive7qbzjvlsr3 354 + fivejmfvtnhz1eightkcdpjsghgtwonine9 355 + five3bllpvnqgtzdhvprgb 356 + t1vcttwo 357 + 9953three92 358 + 9hrgxdpf 359 + sevennine579seven 360 + threekp1onefrfjbrmmpmsdsvfour 361 + 4threefive61rrhrtdjs5 362 + xbmvcfqp4onesevenmkgvsnprtl65 363 + 379 364 + 4966dlprfxmhmqdfour6 365 + 9lllhz8nmqxkzsevenxmbqvgqnj8 366 + btkxnzonesevenjmkdcc1ff32eight 367 + 7three65one745 368 + seven66ninelkbmvndm3 369 + 4three3sixeight3 370 + 177dcxqqbqpkxgctwo 371 + 48cjpd47sevenzgtkrdlfq 372 + 5ppzvklbtnine212qlmt 373 + 89tpmnr 374 + dh1gfgb6threeqcm3 375 + five83 376 + fzlkpx6seven2twotjlqpgldlfour49 377 + fiveninefivenxpzkrslxm44 378 + pxxbnsfoursixeight5mjkeight 379 + ninefivesevenz6 380 + djddxtdeight2vqsvdgttxonefourfhdfxszvfd8pjcvzbgp 381 + 253seven71nine 382 + eight6cb71 383 + gfzptdj1nine5twosvtmpphj9mkhd 384 + hfjcpvzeight7ggqrmkmzrhbthreeeight 385 + chjonetwo2lqxfrbvq 386 + fkfmntldvleight4threethreeeightfour 387 + 6j81threeseventwo3seven 388 + seightwosvsnp4 389 + 8bqjk75254 390 + 6seventsmnfjtn4rthrp 391 + 9kksdvfzzpsszffouronenrqrcnine 392 + 5dkpp8fournine4one 393 + 4mpbzrfvj8two9sevenonenine 394 + jzkdrrjsnpxzxbjhb5 395 + three87oneonexppvhz3seven 396 + two39kvrmz 397 + vdfive8dntsz 398 + mthreehzdghb3eightsevenfttmjtx 399 + 2dlnjsxlg 400 + 7threecrrdqksqsevensixnine 401 + mdxhrrrfiveone6 402 + 8nine52 403 + 725two 404 + jzpxt2vcninenjgfzddk 405 + three29 406 + zjrffvdgnpeight1sevenglpfkdb 407 + two3qnhqvxeight 408 + slqdvfmeightmlhjdcvbrmsjvrk6 409 + two13kfxd28rzqhcdkjtbbstnhbfive 410 + qhdqqnjbdk8eighttwoqpthree 411 + one1brxnptch263eight18 412 + threexntmdtwokdmhf3pdkgpthree 413 + 2three9jrcrmjvbrm 414 + 1mmlsfsdkzkvjtwo3b 415 + sfkkkncf3three4seventwoqzhmcdfbhxfl 416 + vfnqlnrzcrzm8fourvpzxqdqsfb 417 + rjkhxqdmkrfive1 418 + 2four2nine9znp6seven 419 + 7doneone 420 + 9threetworqlk 421 + eighttpclmtv4twofour5mtxxnpthreeoneightfp 422 + onecfjgrbsjncmpqhqvhxtfpc21nineppone 423 + eightlvjxmxhfive9fb 424 + ninenrjlmcthree3four 425 + eightlxrnvljrhksxzfxzbrt644 426 + blmjnfgsrcms31 427 + zsix16xtjvrtn 428 + lkjfpxjh1sg57xbxlsxcrsix1 429 + mkmdcsbgvd19ninecsevenone9 430 + three1p 431 + 4prbjfour1ninesix 432 + pkf7sixsb 433 + fiveclczl8sltncdxsix 434 + 4ninefourseven5three 435 + 3lpchjfgbhzjbqggsfoursixseven 436 + twonmcfztwoqp1one5 437 + 87sevendbqdsevenrlzkrhoneeightone 438 + 4three4 439 + 2tthbbcpcr36tqvfjkfs 440 + rtzqgsixnine4bzqhjrq8five 441 + eight3fivel4kd 442 + 1fourfourdpvvghvlzxtwothree 443 + 2gzgzmrpbztm1cgzvvrtqt 444 + qdrfrkncnt1eight 445 + smpz4mjrbthree1ninefour 446 + 6seventhree7 447 + 5278nlnfjrqlone8 448 + nine6eight 449 + twoqrtdsreight2dxhknhpdzz2pdbsnlpljlxkv9eightwop 450 + vl6eight9eightsix1lmth 451 + qxsevenkckxvmjkb1 452 + hvhlm2twotwoone 453 + grtlftfthtthree331dzzzoneseven 454 + ftpkgvrsc85cplddgnn 455 + lhcbzhgfjlgmcsn66 456 + twofourqjrltlvcmmzv8nine3ps 457 + knvz5four 458 + threefivefoureight7four 459 + one9fournine5 460 + cr8twofive7two4tlbpgbngsp 461 + seven6gzn8trjmzrvjthtpzld5dcqnjmtl4 462 + 1five1fourfour8hqjzshnszhzgcchs2 463 + tld78blgffjksevenninekmjnrzlvxr 464 + 15six 465 + fqlmqhjslgnllgs6three 466 + jvhmkfjzd5 467 + kfkxjmbrgjzmjtwo2qnh45pxrkrcpmjd 468 + dh119mvxlfdft6sevenqdxb 469 + five5jl 470 + jhqp2qzkfvjdfts 471 + teightwo6 472 + kscczzhftqxmbrjtm46five5hncmntrgqz 473 + 65341 474 + cxjpgfourfour98spklghbv73 475 + 5sevengnxldmlvnrzsthree 476 + bsn6three 477 + fivesixz36 478 + snpmdmx65five4 479 + vrjbjsixfour37onesscclpgxr 480 + four58 481 + nlrflkxjzbpckmprkp435 482 + pp78 483 + rhz3dblsmbl8mvmthree3svhbzb 484 + qtztdn4 485 + rqrdr5ninefivexj 486 + fiveone4ninesplghqrbcnmmzll4mvklfmxv 487 + tj3ninekvczg3cczmhkdf 488 + fivelnrjmn3jvlmhplj4fourkvdceight 489 + five6jrbkxrvmtqfvbq7pmjmdkmkv 490 + 6gcllrgktc 491 + 21zffhnksmjj1rcdpkcrznine 492 + threegpnpftrstmfive4ninefive 493 + 1cnsixpnvrxq 494 + 33qghllh 495 + gfour1rmznkmplqfsevennksglsfdqtwotwonet 496 + kjqcslq3nineoneightkq 497 + three8oneninepjpqnzccthree 498 + 3jpfhtrfrffournmrxrpdjm 499 + 2svsmkptdcmpkhbpmnineczjsjvlfpkckxscfour 500 + dqxpjsnineonenvhptwocprtsbvcl6 501 + ninethreesixninesixxjjjkvtbgd5hrstthree 502 + fivefznprpxccnk8four3twobllsjnfjnx 503 + ghh2skv6 504 + eightninethree4jbcgrqeightfive 505 + 4ltjfxjbthreesixbrtzlbfdx7eight 506 + one9mvbrcc 507 + three5khjdjlpl4hrzqblshkxdgseven8 508 + czvxncr2 509 + eightthreedhkkpr9hqqdtwo1 510 + fouronetnhxgzstdx31six 511 + fzcnineghrfbcbhhv263 512 + eightfive525onexgrzfive 513 + zclvsg9three6eightkeighttwo 514 + two35bhmnlt 515 + 9s 516 + xbshssrspj643four4vrjdnlf 517 + nineseven4ztnchhpx92 518 + gpfive25dvx 519 + 1five5 520 + jtcstj1kqrsbhsdsk8 521 + eight1sixsixbnsfouronecsv 522 + tgplkg2hgeight 523 + seveneightxsgcsfxd9dpkvltrsnlkccrskrbppmkxmpt 524 + pddbvnrqzznqmmonesixjgpgm9rmlxvqqmdbcqhng 525 + xqdbsktwothxzfsmqptrjbthreesixhqgrffqcnine2 526 + vxvtfjsevenfivethreethreensflthreenine6 527 + 8one9sxrczdfg2 528 + mdtdgjthreethreefjzqs16 529 + dnvpjteight6tcn 530 + eightnine3cdzk 531 + three6tzmqbzgmdeight9fiveztwo2 532 + 1pg6three6sevenmghhdx3 533 + 41threenine1 534 + ncbrrm7six2nine 535 + eightxrxdsnsvzddhrqvkfmseven3ntpqhsbttqmlp 536 + one3fourmmrhpjmnjnqxkf4ftkxsvsix 537 + 54zdqrrmzd 538 + rftdstx6hdrhmqjs9b35 539 + fiveseven8five5 540 + gzfkkqznk4 541 + six32ckkbh 542 + jpk171fivesevenhbjlddveightvcqh 543 + 71foursix7 544 + 2nine4onelkvplzhj7onen 545 + 4nrvsh3twoprvpgltsix1pzbdhvfour 546 + skvnpjfmkhmf7547tszjzmq 547 + two3ctthreesix3sjflprlrcg8bnhxs 548 + six41nmgpztwo 549 + dkkhmgmjtwo4seven 550 + 8jqcmhrbmcninehbpxdjpvbk882ktjxp 551 + hlbhcfivetwo77three 552 + 19ccmrmh1lgmngl8 553 + 5eightnhfsjzjseventhreefiveeighteight 554 + 3dkvxfive 555 + 39zn 556 + cqsklnrdhtwoeight814rdncfthrjbc7 557 + 13pfspbxkfrr 558 + five7sevenfourfour42tppvrfqrvz 559 + nboneightfour9eight7threefournmvcrgmkx7hs 560 + sixoneppbone5ctdhjzzrnine 561 + 5one1nineeight1two99 562 + 7rjvqdvgxxmb 563 + sixbkdpftd6 564 + 699 565 + rflvscthxb9one9jtfqd 566 + sixtwo2hsclsg 567 + 8nzgpt7eightfour6zhjxqjmrq53 568 + pddnfour1one749five 569 + gbbprvrq23seven77zssgktwo 570 + ppc2flmdjrp7twoonerjhtlv 571 + vlltgb8seveneight5clqsthree6 572 + onetwobtgdkkxv1five6lcfvkhm9three 573 + two8threesixsix 574 + 5threeeight 575 + onespeight9twonexpr 576 + pzfourseven8five9five 577 + 9mbdbphhrfeight 578 + fournt14 579 + jlcb2 580 + three3eightnfj2 581 + 6four2fgsndlslkr 582 + 8sevensxcjl6fivefivesssevenqghn 583 + 3xgzj66svlvqgcvzzlb5vvjvmvb 584 + hfhmngkv64 585 + 263six 586 + oneone15qtgtksjdgz27hjl9 587 + 1six8mrrkx6 588 + vdhslzfgsevenfivemseven4fourq 589 + vdjlnrvqjb5thsevenfiveonexskqrfourhtcl 590 + 1ninefoursix6seven 591 + twobvpnjmspxmgxkv4twotjjkbxfgs4 592 + fivefour8kfjrpdddhr 593 + dvbljqpznfjjp6sevengvbdxm1bnzhqmcdgpzrd1 594 + 34cmclpfrgrjpxpjpdv 595 + 9xcdkhtsdmtvlrtlcbsixtrjqxg 596 + rdhqfcseventhree9tqggvslm 597 + gddfoursevenrqvqdkqbr6ninecfd 598 + 19cjpltfxspkpxkctdhjkncnbtwoone 599 + mseven7six4five19hjd 600 + jcqlxpmmj7rsrrngnq2seven 601 + fssvonepgqmrgbv1 602 + fourfivefoursixthreegjgxhbzrgx1 603 + fzdfbxsths5szkgkgzdmnvtnine9nqb 604 + rszfmx6eightnine6eightj 605 + three199twol7six3 606 + threedmxbsevenjmdvrzlfive26 607 + ninehkbdkc594one 608 + 6fsix 609 + fiveseven51fjlx6 610 + bj3fivesix1 611 + 9vxcstvpf 612 + threeseven6 613 + ninefive4twoonetwo 614 + 8seven6 615 + twopxsts95 616 + pzhxsxnnkthree6 617 + 6ninem591 618 + 7drfqdsjsnfdbqp 619 + p2plgbninethreesixthree 620 + 5seventnhvjfrlkggfjbmlzxhnnnsh 621 + seven691rjmnfzddfive 622 + 466mmgnh 623 + dsctthree7 624 + eightqlfourzndmzltp34xjbdmpjs1 625 + stmprbctwo1ninesxbzqkkdqgdqhone 626 + sevensixeight91sixjscqxlzj4 627 + vrctfpbp2bdknhtwothree68ckzlgkghponeightg 628 + one82lzh1m9 629 + 5dgkljnlvnthbdfeight7x9kloneightrp 630 + 9pdsgfourzcfour51one 631 + 3twonltnmdqttqmj6fivefivesix 632 + 1four8szcp 633 + dqbrkz8xp 634 + 3twoftqxxgdg 635 + sflsixzjq1 636 + 6nine4plhvcthree 637 + znzdrj4526fjtszspfour9pk 638 + 785bttrfnrtzvninehqzthfr 639 + 6slx7six8qhppjmbcrj 640 + dc1fdzzsvnb 641 + 1xfourtwo 642 + 1mvt283 643 + fivecflqkthreek2 644 + 7gtdlvbcxvrxvx1264eight 645 + b1pbpcsix 646 + fivefourzqrmbpgnqzgpzhfour9 647 + seventhree5cnvjmthree 648 + ksblnqbkgnfone8 649 + 8fourvkhkhlsjq 650 + twoqjvb9zjvpfz2onesixk 651 + tdjmrcvsevensix1seveneight 652 + 5mqxkkcttfivezdbcdmlfivebchqlcktpseven 653 + 7bzsnljccxqbtq3dsfsbrlpgqjzxeight 654 + one4mjgfhzsjdc3crgthhjrznd 655 + sixthreektx8xjbdjlq 656 + bgvldztfivetwo3tldvpzkmonepdvppd8 657 + xhzm91 658 + oneskfoureight23 659 + ppsj64 660 + fgrf45four5 661 + four2two 662 + 798jcgzf 663 + 93mxc 664 + hn5q9rm2vtksix9 665 + cvdldzschflc9eight 666 + mqdtndzvv9eightkzxlgvcggrkltzlphcfq 667 + beightwoone6rqjcqq7sixfourrkghseven 668 + two9nine9foursevenfourone 669 + 793sixzngtcbrbtjmbjbqxzpqjkn 670 + 1five4 671 + x4 672 + qmlvsptmqhfvbfiveonemnmzshczjgsvgsgpps2seven 673 + 28eightmt9 674 + 1four8hbpnktmn 675 + 6nine5threeplcsdrn96four3 676 + two3vdvh6 677 + three7fiverkjmllclbprmqgb4 678 + strvnllfmqm2threesixbbrjxbjvvxvjhr91 679 + 4dbqqbdcddldhgxjrnfivehz9 680 + v81nnvzv 681 + 3ssptnqhmrzbseveneightwoxdx 682 + ninetthree72 683 + 556five2three 684 + 99175onepzqpj 685 + 8tmbfpbsninenineglvbh7gnrd 686 + three8zmtvxqmksfpvkfourp9twooneightzgs 687 + khmcnch1tb2 688 + 5jtcggvdfzmsppshsqlhz 689 + 249sixtwofoureight 690 + 6sixfourxpnt 691 + 6threen 692 + 16qmgfjjmqnktnxgz 693 + kjvbk1zzqhdkgxxghxsix77 694 + sndnsm1741gtszjkmvxsevennine 695 + kzlrrrjbtrrgf5jsbgxn 696 + 4bnfdfbgthc 697 + ztghxzrdprvlfx4 698 + 54tzqlfjfnthree7twonine 699 + knqkbts5ffqhdsfpmdeightnfhpjcmfmrl 700 + jzphxleightjhxvhdrseven5mktwo 701 + 1fivegxdknn 702 + 3onetpqdddbhb2seven2 703 + 7seventhreebzcqpkdck5dc 704 + seven71 705 + eighttwo1 706 + dfflcrcqfiveone2seven6 707 + qpf8 708 + 1seven1bjsmxzr54four5 709 + mmztpseven836four 710 + three8htqhzkrxhrfourthreebdrmjsvpfb1 711 + zjhljpmmdms998ffjqgxgbkdbvxxppdltbrpzcbf 712 + rj76 713 + vlxnnqxr4eight 714 + 2twoonefourtwosevenpdpfkgdhhzlbfq 715 + cn5five4 716 + hhqzsxlm45twonine 717 + ncszsls1z2 718 + ktxkkbhcxcbnffzbsix8bf4r 719 + xrk1bvvrxvkreighttwoeight 720 + 4eightqbmtpsl2six 721 + 13jzchfndpjpone 722 + fivefvm1sevenhjxrnkg2bfmdnbj8 723 + 9gcfmkhqrczseven7jkshrh 724 + twornrbjlvsdr1threem 725 + njzxgftwo4two 726 + threertvjcmtlr7nxhghbnvkq 727 + 6seven8drfivecvv3cr 728 + fivefiveddnhmz25nine7 729 + 2eight4nine47 730 + nthreetwotwo67 731 + 4mbsqbpvf7threedp4fourvvdgkvzfkz 732 + sixthree1twozxldcqnvdcksfiveseven 733 + nh2 734 + 4rczvpnvsptwo 735 + foursevenone4 736 + 5sixkvsjjqzs32kbghctffhssmg98 737 + zbclnpj3ncgjrpz6tcgdvjpdmkk1 738 + 4mmsbtfivetwodgvbhrzrlh 739 + sfour2fivefour 740 + jx9 741 + xltwone6 742 + 1szbglvbcblqtdqrbdqqhbfzrrq4sixfivezfb 743 + two8klhvgbm97eightfour6 744 + szslrmeightsz61eighthnhxv1 745 + seven42sznlgdsdgfj 746 + three2eight26nine 747 + 4sevenfmxrhgkll3fivefjsxninefour 748 + onenlzksgpz2ggnvsmlxxsvqsix6twodbdzvkbhhl 749 + mxs62zfsmkgmxzl6nbsix 750 + 9sevenlbbt9twonet 751 + 32tworbbmnbgqjd 752 + jrx7mpbcvqfhfr7sixsixkqmcj 753 + vcdcthreefour5bbqbhxqjkqqzkdk 754 + onesevenfourhxfvfoursrq4n1 755 + six1hglqzjxfxxd4 756 + 4lkjljr2 757 + 3brlmgbpdnpslgcsevenxrrftvzlxc5nine 758 + czhmhhnrxrbzgtmvn1mbjpnrlsevenbfbztqfp 759 + xnctftbbm3seveneight9kpkfour 760 + xsixsixh5three 761 + 2lzslqtllcpfdq3 762 + six2xstqpjctsxgtwo941 763 + sixthree6 764 + 636bmxvvfztzvbrxbfh1four 765 + h4pcllfnine 766 + pknldv4jzlkngvqslchstsnfj7sixsevensevenb 767 + 78threegfclmstbxt 768 + 9three9mnkhrrlbgonethreef1six 769 + 2bzslfdpvoneeightthreeone3jpqjk2 770 + 1nfjttgvlsn6eight2hznlx 771 + 7three7sevenbdngj6threeseven 772 + one8qdldvhjhrfsixgscfnpvbm2 773 + mqlhrjksdtbrvrgvpc884ngrddthzjgtjxnjq 774 + kpndxtponenine97 775 + vcpsjrxlpfqprxz7threeeight2 776 + ztgckbfr5twodpznplgl32rfqjhrvhgmkd 777 + threehfvxnkfhdgmtwo16 778 + 6seven36qrndxhxljgkskgtjdtscczz1 779 + ndcqhqnvtppkfbgljkrd3xfdvqhxkx94 780 + sixgonebbblkbbqvccnvm2jxpvlnrbmjnsrnqgbb 781 + sevenmeight2rlvbkxmxfour3nine8 782 + 72bcdrcbzffkc3oneightnc 783 + onesevenfour57 784 + sixnmplqnfx1eightfour 785 + nine5bh4eightseven 786 + 7gcqthhztknjslxfbcj19 787 + five2fivethreedbrkgchn8 788 + 221565 789 + 26three83vmtlj 790 + nine5threeninezgjcpssevenone 791 + xshxdblgf8threehxkntrdn6lghpzt9 792 + fdfqxmn3eight6zssbgnddcv 793 + eight1hrrqmzjjq 794 + ckhpqtwodqz9r 795 + zbtjjffourninesix7bqz 796 + jeightvfdqttxmsix3pnh5lgf 797 + 6onerqbdslg 798 + fivep26two 799 + onetwogscnvv1 800 + eight1487 801 + threekksixnine6 802 + 69sixoneqhhrqsg 803 + 8sevenmtcm 804 + three1jlbfpfdxpqpzspgcllfv 805 + 27one 806 + mlmfourseven3 807 + sixninercgrkdpd9 808 + three7kmvsztmxjsixthree3bvhmhthreesdrbq 809 + mk7 810 + jstwone8fourkrlmtfk7qjvrghcbfive5 811 + eightchvxseven9nine252 812 + five68qoneeight 813 + seveneightfive2threetckdpkqrnqpthreevlqlq 814 + jlcpvfxpq867xfcjcddvjkjdfnqtnjp1 815 + prxzmdmbxbfljckhd7pbc5three 816 + 92fninenhnxjlzninenqmhmmlsfqf 817 + ftmljhqxjdhddkbtxlbz9five 818 + oneone4cfsnxltqfbnzzljseven 819 + gbktqjbrtgsevenninexf6seventwonine 820 + nine3fournine 821 + 1fourtwo17seven 822 + twosixmpnpdzmjxlmjsjdnkmnhmdtdg7xrbknkplsix6 823 + fqzqxzkgzrlkmqfour53seven2 824 + 8three27eight4onekgrlc 825 + nzrlgrvfive3vdtqcqrm6 826 + 4qfgvppninetwoone4 827 + threelpmgkfxoneseven8threebmjtdl4 828 + slkrnqlpfxcrgxmnd9one7 829 + fouronekbfmdrjxvn8kz1twosevenrth 830 + 8xbvkfqmzjg 831 + six4xcx97lzninefivenine 832 + threesixhfvnjrvpf1sixseveneightfive 833 + 8ninethreethreepdlddhdfp 834 + two47threefour 835 + 61czbc4cvklssbpt 836 + 8712st2 837 + lgflr1three 838 + ninenine9 839 + ptx86five 840 + 291 841 + seven82three9 842 + mxfhmtcjpxqqsl68hpcfvjj 843 + 1qmvjl6four 844 + 3six84 845 + fivefivefourfiveeight7eightwods 846 + 2seven5five2d 847 + 6five3hqbjsrzhtkv7 848 + 4pgcsxslr6h623 849 + three8one 850 + 8xnsgbjhz9 851 + 3gtqbhdzjninetwo6thrfssxqptjbtmkkmlddhdm 852 + 6mldxcjnxv9 853 + mc8one88 854 + h4 855 + fivefour2s 856 + 9q 857 + fiveseven8two8lkrtvdqchbvnmzmlhgqbcx 858 + cpcgpg9cnbsixsix 859 + vglgjf9qzcspsnsbrktbnpnppzmgldtwo 860 + three2kllpcvmmgcseven 861 + twofivekvcnfpkplnv2threefivehvxpthree 862 + 36h6hzfhhbtqgqfgthreesix 863 + 86kkqqseven9 864 + 7jgncdninejvmqdmone5sqjp 865 + seventhree4eight9three 866 + 38knvgxrftdtwo1 867 + ksgjdlpxhztnlfc6hxncbgbmgzldvlvmgrjkmtwosix 868 + dtoneightone427 869 + 3518msltkgqthvjhs 870 + 75qmqvkmf5six 871 + 85pvvthreeseven 872 + ckqoneight4xqqnkdnzpggmxrmhkhx171nineqgd 873 + 76nine 874 + 6threentcfsvvfseven1eight 875 + 23fivetlqdfhxgg312nine 876 + 1pjninexlqnthreeoneoneoneightx 877 + 6one1 878 + lfjmdhpj9fiveonelvfivenine 879 + 4xjmxfxxfsbxgk9sixhq 880 + 8six8vszdsslqntzjqxx8two 881 + 4one88995five 882 + nskmvtzd1five 883 + 4tpzxkbfq1vlxpvzbxnhqtshzhfourtwo 884 + 7six341gsl77eight 885 + 94dvc 886 + qzkmxqqh6sixvn 887 + sevenoneone26m8 888 + ninedtfvl3four15eightjtpfhlzzct9 889 + 5ninesixtvvpblfqgb 890 + 5twoseven4onedcsqj6 891 + gcbtzns6eight52ccvvpsbdgfgg 892 + tczvbfxfvcbfxzvvxp9three 893 + fourkczgcb9knnpkd3 894 + 9ninefive8nine5 895 + tnkpsxjm7four45bpdg 896 + twofour1glkvvkq 897 + fiveeightfive8vbqtsmhjqr5vgbmsxrkh7four 898 + lhncnxngfour9five 899 + 5six36five4 900 + 74ckc 901 + lkeightwol11 902 + five3mnlbmsg2 903 + hmvmgnqlhdgonedxmjxxbpbpt1four6zh 904 + svmmzbbj5 905 + 3l4 906 + 1dgfnone17 907 + 667 908 + 1qlcg4seven 909 + 756ghcxrmrgtninefivegvmtjhfrj 910 + 6twonehjv 911 + vpgeight7twonlcfcdspmvpcfj6five2 912 + 76jhj4sixeight 913 + vcfrscgccnine6j 914 + mhm8kfjl33ninefivethree 915 + 85bfqjpdmbg92rjbthcrfgvcjzqhpgb 916 + nine554ltcgj5 917 + eightfivevjszdqkf96ninemgldmdth1nine 918 + sixq4pcczfqc 919 + three7two 920 + eight9csevenfour 921 + fpnnxvcttscfrgponefive8twohgfkhbssix 922 + smkjtzm72vmtleightjmkxkgpfzmjpmbbd 923 + 7two1lxvqqzzrvj31fourprzmsdzbf 924 + kffeightwogzcqpzdbhfvmckxmbhrgvonevcshkbctbc524 925 + fcsoneightnmtgzbbnflnnlk5two 926 + 6gkxbhgzbmltwosrmone1five 927 + sjrfkfjszsix49 928 + 47seven82fourfhhfmlshdsix 929 + sixhjqszlc6kzzbqsldk 930 + nineptfourrvrghq7 931 + 4four5one148jcbvnbj6 932 + ninezfcrvxfnjd6nine 933 + bfjfbpfseven7 934 + bdzmktwo4fourkrjj3 935 + nhnfv725 936 + sixeightsixkkndrj7 937 + eightone2m246 938 + fourhsbdblm74fourcphtwo 939 + khrjxxrltbpngsmzndgsjmzvgqxfhvkct6eightzrvpmpcc3 940 + mlsc4qnlhqjfour 941 + 956onefive 942 + 1xtmbmkscvv2onefivelvlztjtctz5eightnine 943 + 32tmphhjnlfsixskninekjdcftm 944 + krgp1hdhgvgpgbvbxgfngvktwo 945 + klpnpcplfhlztjgv17six 946 + 5dsxngmpdvjhnlbhxmp7xqqtgdoneightdvm 947 + threeeight3t 948 + 5fourlpqzq2two1oneqlq 949 + eightfivesixnineeightfour1 950 + 52ppqztdggqgtphdfz4fkrkfztzzqldpg 951 + seven7zbone 952 + xg79onef6eighteight 953 + three6nvhnqeightgkttsvtwofive9 954 + rjsevenonefllcrdnbmqcmxqsq38 955 + twoseven2dppxgmlhr61onenine4 956 + sevenb3btzhscqbrxxjkhtzpv 957 + 859two 958 + threetllmjmhdjr18two 959 + 94tmvfpzmgvzsm1fmbhkhzffkzllx 960 + nlkndffq2three 961 + 6ninemfour8rbxvj6 962 + 7clxtxrt1lqg5 963 + onefivegjnfzkvg9 964 + fplrvmqjdfxvjdfivesix6rpnkfour 965 + 5fivetwoxdgchbjjrckntlgblsxlcznfd 966 + eight7fourfour 967 + 3kmtjlfbgssixmspkfzrgxtctksix4onetwones 968 + 8five15sixthreeljsfive 969 + 9lnn 970 + nine7pzrxnnkthreesdjxphsrf4hc8 971 + three6115nqhllcmpmzcfour 972 + vpqjnvmltx8fivefive 973 + vrlqlj5fivesixninebqhgcpgmgkmflvn 974 + 76eighteight7 975 + 8qkmnsjxbfhcpsvn4 976 + oneninexqdseven4threefive 977 + rpcvmnng162fivesixseven 978 + 31628eightthree 979 + 83d6fsfqdghztwo7bmvrlh 980 + gknfcdqlrs25 981 + 9gkkth2ps 982 + bxnvsjxqleight9ninenine 983 + rsmcrqlnhsmjhspseven96vsckknrggbjd4tgtgbkxgvt 984 + 8seveneightcxrh 985 + tkmfour8fivevl9one 986 + 8mgrxk 987 + fourbgckqkeight6f 988 + threetwo3eight652pp 989 + ninefivetwojbhglxfxzfctwo8 990 + jmjtcvpsxzdbkbqthree1qmgznpbzlthree4six1 991 + foursix5 992 + 6nbdzdlmqpdlgpcclc 993 + 24 994 + pseven3threeeightseven 995 + 7nine7gjdksbtqrrdsr 996 + 5ppflb48tkcffone8six 997 + five2two7hstbbqzrninegbtwo2 998 + eightfblzpmhs4 999 + fbbdeightzzsdffh8jbjzxkclj 1000 + 3nine6five1
+100
data/2023/day2.txt
··· 1 + Game 1: 10 green, 9 blue, 1 red; 1 red, 7 green; 11 green, 6 blue; 8 blue, 12 green 2 + Game 2: 11 red, 7 green, 3 blue; 1 blue, 8 green, 5 red; 2 red, 12 green, 1 blue; 10 green, 5 blue, 7 red 3 + Game 3: 2 red, 7 green, 1 blue; 1 blue, 8 red; 7 green, 19 red, 5 blue; 1 blue, 10 green, 18 red; 10 red, 6 blue, 4 green 4 + Game 4: 2 blue, 5 green, 2 red; 7 red, 3 green; 3 blue, 2 red; 16 green, 2 blue 5 + Game 5: 1 blue, 9 red; 5 blue, 9 green, 6 red; 8 red, 10 blue, 3 green; 3 red, 13 green, 4 blue; 5 green, 9 red, 6 blue; 4 green, 8 red, 7 blue 6 + Game 6: 1 red, 2 green; 2 red, 1 blue; 5 red, 10 green, 2 blue; 1 blue, 2 green, 3 red; 1 red, 6 green 7 + Game 7: 9 blue, 14 green, 5 red; 10 green, 8 blue, 2 red; 20 green, 1 red; 4 blue, 17 green, 4 red 8 + Game 8: 16 blue, 16 green, 8 red; 16 blue, 6 red, 10 green; 13 blue, 8 green, 16 red; 10 red, 13 green, 13 blue 9 + Game 9: 8 blue, 10 green, 4 red; 18 green, 14 blue, 12 red; 4 green, 10 blue, 17 red; 16 red, 6 blue, 5 green; 11 red, 9 blue; 16 green, 13 red, 7 blue 10 + Game 10: 5 green, 2 red, 13 blue; 3 red, 2 green, 17 blue; 3 green, 12 blue, 15 red; 7 blue, 14 red; 3 red, 4 green, 17 blue 11 + Game 11: 8 green, 10 blue, 15 red; 11 blue, 4 green, 3 red; 10 blue, 4 green, 5 red; 7 blue, 1 green, 4 red; 2 red, 9 blue; 18 red, 8 green, 2 blue 12 + Game 12: 16 red, 10 green; 12 red, 8 blue, 3 green; 8 red, 10 green, 7 blue; 10 green, 12 red 13 + Game 13: 5 green, 2 red; 13 blue, 4 green, 4 red; 8 blue, 4 green 14 + Game 14: 9 green, 3 red, 1 blue; 1 blue, 3 red, 1 green; 6 green; 3 green, 5 red; 1 blue, 4 red 15 + Game 15: 13 red, 2 blue, 7 green; 6 green, 4 red, 7 blue; 8 blue, 11 red, 4 green; 1 green, 7 blue, 10 red; 3 blue, 9 green, 6 red; 6 green, 11 red, 1 blue 16 + Game 16: 1 red, 14 green; 4 green, 1 blue, 4 red; 3 red, 1 blue, 5 green; 5 red, 1 blue, 14 green; 1 blue, 1 red, 12 green; 6 red, 14 green, 1 blue 17 + Game 17: 14 green, 14 red; 19 green, 3 blue, 10 red; 4 green, 10 red, 1 blue 18 + Game 18: 9 green, 1 blue, 12 red; 1 green, 10 red; 1 blue, 3 red 19 + Game 19: 6 blue, 3 red, 3 green; 12 blue; 11 red, 14 blue, 3 green; 14 blue, 13 red, 1 green; 5 blue, 9 red 20 + Game 20: 10 blue, 11 green, 3 red; 2 red, 16 green; 6 blue, 16 green, 4 red; 14 green, 7 red, 1 blue; 5 red, 9 blue, 11 green 21 + Game 21: 1 red; 4 red; 2 red, 2 green, 1 blue 22 + Game 22: 11 green, 3 blue, 3 red; 12 blue, 6 green; 1 red, 5 blue, 1 green; 9 blue, 6 green; 10 green, 1 red, 8 blue 23 + Game 23: 13 blue, 3 green; 3 red, 5 green, 6 blue; 2 red, 11 green, 9 blue 24 + Game 24: 1 blue, 1 green; 1 blue; 1 red 25 + Game 25: 7 red, 1 green, 14 blue; 17 blue, 4 red, 6 green; 7 blue, 5 red; 2 red, 6 green, 20 blue 26 + Game 26: 10 green, 8 red, 11 blue; 13 green, 2 blue, 4 red; 1 blue, 6 green, 9 red 27 + Game 27: 9 green, 1 blue, 6 red; 7 red, 14 green; 13 green, 2 red; 2 red, 13 green; 2 green, 7 red 28 + Game 28: 10 red, 6 green; 7 green, 11 red, 1 blue; 8 red, 5 green; 10 green, 13 red; 17 red, 3 green 29 + Game 29: 4 blue, 3 red, 13 green; 9 green, 2 red, 1 blue; 11 green, 5 blue, 2 red; 1 blue, 7 green, 2 red; 4 blue, 1 red, 12 green 30 + Game 30: 6 blue, 1 green, 3 red; 1 green, 3 red, 1 blue; 6 green, 2 red, 2 blue 31 + Game 31: 11 red; 5 red, 2 green; 3 green, 6 red, 1 blue; 1 green, 18 red; 2 green, 14 red 32 + Game 32: 11 blue, 12 green, 11 red; 5 red, 14 blue, 5 green; 5 blue, 7 green, 18 red 33 + Game 33: 8 blue, 4 green, 11 red; 14 blue, 11 red, 3 green; 3 green, 1 blue; 17 red, 2 green, 9 blue; 7 green, 7 blue, 3 red; 2 green, 3 red, 7 blue 34 + Game 34: 1 blue, 17 green; 2 blue, 1 red, 10 green; 10 green, 1 red; 6 green, 1 red, 1 blue; 2 green, 2 blue, 1 red 35 + Game 35: 1 blue, 5 red, 5 green; 4 blue, 3 green, 8 red; 5 green, 14 blue; 5 green, 4 blue, 14 red 36 + Game 36: 13 green, 7 red, 2 blue; 2 red, 2 green; 1 red, 12 green; 7 green, 8 red 37 + Game 37: 11 red, 4 green, 1 blue; 12 red, 3 green, 5 blue; 1 blue, 12 red, 1 green; 9 red, 10 green; 7 red, 2 blue, 5 green; 7 green, 1 red, 4 blue 38 + Game 38: 14 red, 20 blue, 6 green; 14 red, 12 green, 13 blue; 10 green, 10 red, 9 blue; 9 green, 9 blue, 15 red 39 + Game 39: 4 blue; 8 green, 7 blue; 12 green, 2 blue, 5 red; 2 blue, 3 green, 3 red; 5 red, 1 green, 1 blue; 6 red, 1 blue 40 + Game 40: 7 green, 10 red, 3 blue; 2 blue, 1 red, 7 green; 2 red, 5 blue, 11 green; 4 blue, 12 red, 6 green; 13 green, 7 blue, 9 red; 14 blue, 7 green, 8 red 41 + Game 41: 14 red, 17 blue, 3 green; 18 blue, 4 green, 17 red; 2 green, 17 red, 8 blue; 7 green, 13 blue, 6 red 42 + Game 42: 1 blue, 16 green; 14 green; 17 blue, 4 green, 7 red; 6 red, 7 blue, 8 green 43 + Game 43: 8 red, 15 blue; 8 red, 1 green, 11 blue; 17 blue, 3 red 44 + Game 44: 10 red, 2 green, 11 blue; 8 green, 4 blue, 6 red; 6 green, 2 blue, 10 red; 1 blue, 12 red, 7 green 45 + Game 45: 1 blue, 4 red, 4 green; 2 red, 5 green; 3 green, 6 blue, 1 red; 12 blue, 1 red, 2 green 46 + Game 46: 2 blue; 1 red, 4 blue; 2 blue, 15 red; 3 blue, 4 green, 5 red; 4 green, 13 red; 1 blue, 3 green, 9 red 47 + Game 47: 13 blue, 2 green, 2 red; 2 green, 12 blue, 3 red; 2 green, 1 blue 48 + Game 48: 1 blue, 4 green, 11 red; 2 blue, 5 red, 8 green; 6 red 49 + Game 49: 1 red, 10 green; 3 green, 8 blue, 5 red; 7 red, 5 green, 7 blue 50 + Game 50: 12 blue, 5 green, 1 red; 7 blue, 2 red; 12 blue, 3 green; 16 blue; 1 blue, 3 green; 2 red, 14 blue, 11 green 51 + Game 51: 6 blue, 15 red, 1 green; 15 red, 2 blue, 1 green; 12 red, 2 green 52 + Game 52: 5 green, 11 blue, 5 red; 18 green, 4 red, 10 blue; 14 green, 8 blue, 8 red; 2 red, 9 green, 11 blue; 9 blue, 5 red, 10 green 53 + Game 53: 1 red, 1 green; 2 green, 1 red, 2 blue; 2 green, 1 blue 54 + Game 54: 4 blue, 3 red, 7 green; 4 blue, 13 green; 1 red, 2 green, 7 blue; 5 blue, 5 red, 17 green 55 + Game 55: 8 red, 11 green, 11 blue; 1 green, 15 blue, 6 red; 7 red, 8 blue, 11 green; 2 green, 1 red, 11 blue; 11 blue, 3 red; 3 red, 7 blue, 10 green 56 + Game 56: 13 blue, 3 green; 1 red, 1 green, 7 blue; 17 blue, 2 red; 3 blue, 4 green, 4 red 57 + Game 57: 9 green, 11 blue, 12 red; 13 red, 6 green, 1 blue; 4 blue, 1 green, 14 red; 11 red, 6 blue, 3 green 58 + Game 58: 7 green, 2 blue, 6 red; 1 red, 4 green; 1 blue, 8 green, 10 red 59 + Game 59: 3 green, 11 red, 3 blue; 1 blue, 5 red, 8 green; 10 green, 9 red; 5 green, 5 red, 1 blue; 4 green, 8 blue; 13 green 60 + Game 60: 2 blue, 11 green, 7 red; 5 red, 9 green, 2 blue; 3 blue, 2 red, 8 green; 6 red, 2 blue, 9 green; 5 red, 4 green, 2 blue; 6 red, 5 blue, 11 green 61 + Game 61: 7 blue, 5 green, 8 red; 12 blue, 1 red, 11 green; 15 blue, 14 red, 15 green; 14 red, 7 blue, 6 green; 9 blue; 3 green, 10 blue, 11 red 62 + Game 62: 8 red, 1 blue, 1 green; 2 red, 1 blue, 8 green; 11 blue, 15 red, 4 green; 1 red, 5 green, 2 blue; 15 green, 11 blue, 12 red 63 + Game 63: 6 red, 3 green, 7 blue; 8 red, 2 green; 4 green, 3 red, 4 blue; 6 blue, 3 red, 10 green; 4 blue, 6 red, 9 green; 8 blue, 10 green, 5 red 64 + Game 64: 1 blue, 9 red, 1 green; 17 red, 3 blue; 8 red, 2 green; 12 red, 8 blue 65 + Game 65: 15 blue, 2 red; 1 green, 14 blue; 10 green, 1 red, 10 blue; 10 green, 1 red, 12 blue; 13 blue, 1 green 66 + Game 66: 18 green, 3 red, 7 blue; 19 blue, 2 red; 5 red, 8 blue, 11 green; 1 red, 15 blue, 12 green; 13 blue, 6 green; 12 blue, 6 green 67 + Game 67: 1 blue, 2 green, 6 red; 7 red, 5 blue; 9 red, 13 blue, 5 green; 4 green, 4 blue, 5 red; 11 blue, 7 red; 3 blue, 9 red 68 + Game 68: 2 blue, 8 green, 16 red; 11 green, 13 blue; 6 red, 7 green, 1 blue; 4 green, 7 red, 8 blue 69 + Game 69: 7 green, 3 blue, 5 red; 11 green, 4 blue; 1 red, 15 green, 10 blue; 8 green, 12 blue, 4 red 70 + Game 70: 8 blue, 8 green; 4 blue, 1 red, 6 green; 1 green, 1 blue; 7 green, 4 blue 71 + Game 71: 7 red, 13 blue, 4 green; 2 blue, 11 red, 9 green; 14 blue, 6 green, 2 red; 10 red, 6 blue, 10 green 72 + Game 72: 1 blue, 9 green, 1 red; 4 blue, 6 green, 1 red; 1 red, 3 green, 3 blue; 10 green, 3 blue, 2 red; 3 blue, 1 red, 1 green; 3 green, 1 red, 3 blue 73 + Game 73: 4 green, 15 red, 6 blue; 1 green, 12 red; 2 green, 16 red; 1 green, 12 red, 2 blue; 6 red, 4 green, 2 blue; 19 red, 3 blue, 2 green 74 + Game 74: 14 green, 2 blue, 3 red; 13 green, 4 red; 3 green, 4 blue; 3 blue, 3 red; 2 red, 12 green; 3 blue, 3 green 75 + Game 75: 13 red, 10 blue, 1 green; 14 blue, 9 red, 2 green; 8 blue; 1 green, 13 red, 11 blue 76 + Game 76: 2 red, 8 blue, 12 green; 11 green, 2 red; 2 red, 2 blue, 10 green; 5 blue, 2 green; 3 red, 11 green, 8 blue 77 + Game 77: 4 blue, 8 red, 14 green; 15 green, 12 red, 5 blue; 8 red, 5 green, 1 blue 78 + Game 78: 8 red, 19 blue, 4 green; 18 blue, 2 red; 12 blue, 4 green, 8 red; 17 blue, 2 green, 9 red; 9 red, 10 blue, 1 green; 6 green, 9 blue, 1 red 79 + Game 79: 1 blue, 11 red, 2 green; 2 red, 2 green, 6 blue; 11 red, 2 blue, 2 green; 11 red, 2 green, 4 blue 80 + Game 80: 1 red, 9 blue; 1 red, 5 blue, 8 green; 5 green, 1 red, 4 blue; 2 green, 9 blue, 1 red; 7 blue, 1 green, 1 red 81 + Game 81: 1 green, 1 blue, 7 red; 3 blue, 7 green, 6 red; 5 green; 3 blue; 3 red, 4 blue, 1 green; 5 red, 9 green 82 + Game 82: 12 blue, 4 red, 4 green; 7 red, 4 blue; 3 green, 10 red, 3 blue; 6 blue, 13 red; 4 blue, 5 red, 1 green 83 + Game 83: 1 red, 1 green, 18 blue; 20 blue, 16 red, 1 green; 17 blue, 12 red; 1 green, 9 blue, 7 red 84 + Game 84: 6 blue, 7 green, 6 red; 6 red, 10 green, 1 blue; 5 red, 8 green; 13 green, 2 red, 7 blue 85 + Game 85: 1 blue, 7 red, 11 green; 1 red; 8 red, 10 green, 4 blue; 4 red, 11 green, 1 blue; 1 blue, 6 green 86 + Game 86: 9 green, 2 blue; 3 red, 1 green, 2 blue; 1 green, 5 blue, 9 red; 1 blue, 2 green; 9 red, 1 green, 4 blue 87 + Game 87: 15 red, 1 green, 16 blue; 1 green, 6 red, 17 blue; 7 red, 1 green, 3 blue; 8 red, 3 blue, 1 green; 15 red, 1 green 88 + Game 88: 7 green, 3 red, 10 blue; 8 blue, 8 red, 3 green; 18 green, 1 blue, 7 red; 8 red, 7 green, 10 blue 89 + Game 89: 5 red, 16 blue; 7 blue; 5 blue, 4 red; 3 blue, 4 green, 6 red; 1 red, 2 green, 16 blue 90 + Game 90: 19 blue, 5 green, 4 red; 2 green, 20 blue, 1 red; 18 blue 91 + Game 91: 10 red, 11 blue, 1 green; 18 red, 12 blue; 11 blue, 10 red 92 + Game 92: 3 green, 1 blue; 8 red, 5 green; 10 red, 3 green 93 + Game 93: 5 green, 1 blue, 5 red; 1 blue, 2 red, 7 green; 2 green, 6 red, 1 blue; 7 green, 1 blue, 2 red; 6 red, 1 green 94 + Game 94: 3 red, 6 blue, 2 green; 5 blue, 9 red; 11 blue, 5 red, 2 green; 2 green, 3 red, 14 blue; 5 red, 13 blue; 6 blue, 2 green, 8 red 95 + Game 95: 4 red, 3 green, 17 blue; 1 red, 5 green, 4 blue; 15 blue, 11 green; 5 green, 1 red, 4 blue; 11 blue, 2 green, 17 red 96 + Game 96: 3 red, 20 blue, 18 green; 1 red, 1 blue, 20 green; 18 blue, 4 green, 8 red 97 + Game 97: 11 green; 7 red, 8 green, 2 blue; 4 green, 17 red; 4 green, 7 red; 14 green, 18 red, 2 blue 98 + Game 98: 2 blue, 7 green, 1 red; 9 green, 10 red, 5 blue; 13 blue, 10 red, 8 green; 8 green, 11 red, 12 blue; 5 blue, 4 green, 2 red 99 + Game 99: 2 blue, 13 green; 1 blue; 1 red, 2 blue, 2 green; 1 red, 1 blue 100 + Game 100: 1 red, 14 green; 17 green, 12 red; 3 green, 7 red, 3 blue; 4 green, 13 red, 3 blue; 5 green, 11 red, 5 blue
+3
rustfmt.toml
··· 1 + tab_spaces = 2 2 + max_width = 80 3 + use_field_init_shorthand = true
+23 -23
src/lib/mod.rs
··· 7 7 // proc macro to call the right method 8 8 #[macro_export] 9 9 macro_rules! solve { 10 - ($year:expr; $day:expr; $part:expr) => { 11 - paste::paste! { 12 - [<year_ $year>]::[<Day $day>]::[<solve_part $part>]() 13 - } 14 - }; 10 + ($year:expr; $day:expr; $part:expr) => { 11 + paste::paste! { 12 + [<year_ $year>]::[<Day $day>]::[<solve_part $part>]() 13 + } 14 + }; 15 15 } 16 16 17 17 #[macro_export] 18 18 macro_rules! create_solution { 19 - ( 19 + ( 20 20 out_1 => $out1:ty; 21 21 out_2 => $out2:ty; 22 22 year => $year:expr; ··· 24 24 sol_1 => $sol1:expr; 25 25 sol_2 => $sol2:expr; 26 26 ) => { 27 - paste::paste! { 27 + paste::paste! { 28 28 impl Solver for [<Day $day>] { 29 - type OutputPart1 = $out1; 30 - type OutputPart2 = $out2; 31 - fn year() -> u16 { 32 - $year 33 - } 34 - fn day() -> u8 { 35 - $day 36 - } 37 - fn solution_part1(input: Input) -> Option<Self::OutputPart1> { 38 - $sol1(input) 39 - } 40 - fn solution_part2(input: Input) -> Option<Self::OutputPart2> { 41 - $sol2(input) 42 - } 29 + type OutputPart1 = $out1; 30 + type OutputPart2 = $out2; 31 + fn year() -> u16 { 32 + $year 33 + } 34 + fn day() -> u8 { 35 + $day 36 + } 37 + fn solution_part1(input: Input) -> Option<Self::OutputPart1> { 38 + $sol1(input) 39 + } 40 + fn solution_part2(input: Input) -> Option<Self::OutputPart2> { 41 + $sol2(input) 43 42 } 44 - } 45 - }; 43 + } 44 + } 45 + }; 46 46 }
+34 -16
src/lib/solver.rs
··· 2 2 3 3 use crate::{Day, Input}; 4 4 5 + enum SolveWith { 6 + Lean, 7 + } 8 + 5 9 pub trait Solver { 6 - type OutputPart1: Debug; 7 - type OutputPart2: Debug; 8 - fn day() -> u8; 9 - fn year() -> u16; 10 - fn input() -> Input { 11 - let day = Day::try_from((Self::day(), Self::year())).expect("could not parse day"); 12 - Input::new(day) 13 - } 14 - fn solution_part1(input: Input) -> Option<Self::OutputPart1>; 15 - fn solution_part2(input: Input) -> Option<Self::OutputPart2>; 16 - fn solve_part1() -> Result<Self::OutputPart1, String> { 17 - Self::solution_part1(Self::input()).ok_or_else(|| "could not solve".to_string()) 18 - } 19 - fn solve_part2() -> Result<Self::OutputPart2, String> { 20 - Self::solution_part2(Self::input()).ok_or_else(|| "could not solve".to_string()) 21 - } 10 + type OutputPart1: Debug; 11 + type OutputPart2: Debug; 12 + fn day() -> u8; 13 + fn year() -> u16; 14 + fn input() -> Input { 15 + let day = 16 + Day::try_from((Self::day(), Self::year())).expect("could not parse day"); 17 + Input::new(day) 18 + } 19 + fn solution_part1(input: Input) -> Option<Self::OutputPart1>; 20 + fn solution_part2(input: Input) -> Option<Self::OutputPart2>; 21 + fn solve_part1() -> Result<Self::OutputPart1, String> { 22 + Self::solution_part1(Self::input()) 23 + .ok_or_else(|| "could not solve".to_string()) 24 + } 25 + fn solve_part2() -> Result<Self::OutputPart2, String> { 26 + Self::solution_part2(Self::input()) 27 + .ok_or_else(|| "could not solve".to_string()) 28 + } 29 + } 30 + 31 + pub trait SolverLean: Solver { 32 + type OutputPart1: Debug + From<&'static str>; 33 + type OutputPart2: Debug + From<&'static str>; 34 + 35 + fn solution_part1(input: Input) -> Option<<Self as SolverLean>::OutputPart1>; 36 + fn solve_part1() -> Result<<Self as SolverLean>::OutputPart1, String> { 37 + <Self as SolverLean>::solution_part1(Self::input()) 38 + .ok_or_else(|| "could not solve".to_string()) 39 + } 22 40 }
+2 -2
src/main.rs
··· 3 3 pub mod solutions; 4 4 5 5 fn main() { 6 - let sol = solve!(2022; 1; 2); 7 - println!("{:?}", sol); 6 + let sol = solve!(2023; 2; 2); 7 + println!("{:?}", sol); 8 8 }
+1
src/solutions/mod.rs
··· 1 1 pub(crate) mod year_2022; 2 + pub(crate) mod year_2023;
+24
src/solutions/year_2023/day0/lakefile.lean
··· 1 + import Lake 2 + open Lake DSL 3 + 4 + package «day0» 5 + 6 + def f1 {α: Type} {β : Type} {γ : Type} (x : α × (β ⊕ γ)) : (α × β) ⊕ (α × γ) := 7 + match x.snd with 8 + | Sum.inl y => Sum.inl (x.fst, y) 9 + | Sum.inr z => Sum.inr (x.fst, z) 10 + 11 + def f2 {α: Type} (x: Bool × α) : α ⊕ α := 12 + match x.fst with 13 + | true => Sum.inl x.snd 14 + | false => Sum.inr x.snd 15 + 16 + #eval f1 (false, Sum.inr 1) (β := String) 17 + 18 + 19 + script solution (args) do 20 + if h : 0 < args.length then 21 + let input := args[0]'h 22 + let x := input.splitOn "\n" |> List.map String.toNat! |> List.foldl Nat.add 0 23 + IO.print x 24 + return 0
+44
src/solutions/year_2023/day0/mod.rs
··· 1 + use std::{path::PathBuf, process::Command}; 2 + 3 + use aoc_lib::{create_solution, Input, Solver}; 4 + 5 + pub(crate) struct Day0 {} 6 + 7 + fn sol_1(input: Input) -> Option<Out> { 8 + let lake_file_dir = PathBuf::new() 9 + .join("src") 10 + .join("solutions") 11 + .join(&format!("year_{}", 2023)) 12 + .join(&format!("day{}", 0)); 13 + let output = Command::new("lake") 14 + .args(["--dir", lake_file_dir.into_os_string().to_str().unwrap()]) 15 + .args(["script", "run"]) 16 + .arg("solution") 17 + .arg(input.lines.join("\n")) 18 + .output() 19 + .expect("could not find lake file"); 20 + let result = String::from_utf8(output.stdout).unwrap(); 21 + let result = result.trim(); 22 + 23 + Some(result.into()) 24 + } 25 + 26 + impl From<&str> for Out { 27 + fn from(value: &str) -> Self { 28 + Self(value.parse().unwrap()) 29 + } 30 + } 31 + 32 + #[derive(Debug)] 33 + pub struct Out(u16); 34 + 35 + create_solution! { 36 + out_1 => Out; 37 + out_2 => (); 38 + year => 2023; 39 + day => 0; 40 + sol_1 => sol_1; 41 + sol_2 => |input: Input| { 42 + None 43 + }; 44 + }
+108
src/solutions/year_2023/day1/mod.rs
··· 1 + use std::{collections::HashMap, str::Chars}; 2 + 3 + use aoc_lib::{create_solution, Input, Solver}; 4 + 5 + #[derive(Debug)] 6 + pub struct Day1 {} 7 + 8 + impl Day1 { 9 + fn calculate_calibration(input: Input) -> u64 { 10 + input.lines.into_iter().fold(0, |acc, line| { 11 + let mut chars = line.chars(); 12 + let first_digit = chars.find(|c| c.is_digit(10)).unwrap_or_else(|| '0'); 13 + let last_digit = chars 14 + .rfind(|c| c.is_digit(10)) 15 + .unwrap_or_else(|| first_digit); 16 + acc 17 + + format!("{}{}", first_digit, last_digit) 18 + .parse::<u64>() 19 + .unwrap_or(0) 20 + }) 21 + } 22 + 23 + fn is_word_digit(str: String) -> Option<u8> { 24 + let m: HashMap<String, u8> = HashMap::from_iter([ 25 + ("one".to_string(), 1), 26 + ("two".to_string(), 2), 27 + ("three".to_string(), 3), 28 + ("four".to_string(), 4), 29 + ("five".to_string(), 5), 30 + ("six".to_string(), 6), 31 + ("seven".to_string(), 7), 32 + ("eight".to_string(), 8), 33 + ("nine".to_string(), 9), 34 + ]); 35 + m.keys() 36 + .find(|k| str.contains(*k)) 37 + .and_then(|k| m.get(k).copied()) 38 + } 39 + 40 + fn get_first_digit(chars: &mut Chars) -> (String, String) { 41 + let mut digit = "".to_string(); 42 + ( 43 + chars 44 + .skip_while(|c| { 45 + if c.is_digit(10) { 46 + digit = c.to_string(); 47 + false 48 + } else if let Some(d) = Day1::is_word_digit(format!("{}{}", digit, c)) 49 + { 50 + digit = d.to_string(); 51 + false 52 + } else { 53 + digit.push(*c); 54 + true 55 + } 56 + }) 57 + .collect(), 58 + digit, 59 + ) 60 + } 61 + 62 + fn get_last_digit(chars: &mut Chars, first_digit: String) -> String { 63 + let mut digits = vec![first_digit]; 64 + let mut curr_digit_word = "".to_string(); 65 + 66 + chars.for_each(|c| { 67 + if c.is_digit(10) { 68 + curr_digit_word = "".to_string(); 69 + digits.push(c.to_string()); 70 + } else if let Some(d) = 71 + Day1::is_word_digit(format!("{}{}", curr_digit_word, c)) 72 + { 73 + curr_digit_word = c.to_string(); 74 + digits.push(d.to_string()); 75 + } else { 76 + curr_digit_word.push(c); 77 + } 78 + }); 79 + 80 + digits.last().unwrap().to_owned() 81 + } 82 + 83 + fn calculate_calibration_with_words(input: Input) -> u64 { 84 + input.lines.into_iter().fold(0, |acc, line| { 85 + let (rest, first_digit) = Day1::get_first_digit(&mut line.chars()); 86 + let last_digit = 87 + Day1::get_last_digit(&mut rest.chars(), first_digit.clone()); 88 + 89 + acc 90 + + format!("{}{}", first_digit, last_digit) 91 + .parse::<u64>() 92 + .unwrap_or(0) 93 + }) 94 + } 95 + } 96 + 97 + create_solution!( 98 + out_1 => u64; 99 + out_2 => u64; 100 + year => 2023; 101 + day => 1; 102 + sol_1 => |input: Input| { 103 + Some(Day1::calculate_calibration(input)) 104 + }; 105 + sol_2 => |input: Input| { 106 + Some(Day1::calculate_calibration_with_words(input)) 107 + }; 108 + );
+151
src/solutions/year_2023/day2.rs
··· 1 + use aoc_lib::{create_solution, Input, Solver}; 2 + 3 + const RED: u8 = 12; 4 + const GREEN: u8 = 13; 5 + const BLUE: u8 = 14; 6 + 7 + #[derive(Debug, Default, Clone)] 8 + struct Cubes { 9 + red: u8, 10 + green: u8, 11 + blue: u8, 12 + } 13 + 14 + impl Cubes { 15 + fn power(&self) -> u32 { 16 + self.red as u32 * self.green as u32 * self.blue as u32 17 + } 18 + } 19 + 20 + #[derive(Debug)] 21 + struct Sets(Vec<Cubes>); 22 + 23 + impl FromIterator<Vec<(String, u8)>> for Sets { 24 + fn from_iter<T: IntoIterator<Item = Vec<(String, u8)>>>(iter: T) -> Self { 25 + Self( 26 + iter 27 + .into_iter() 28 + .map(|x| { 29 + let mut red = 0; 30 + let mut green = 0; 31 + let mut blue = 0; 32 + for (s, n) in x { 33 + match s.as_str() { 34 + "red" => red = n, 35 + "green" => green = n, 36 + "blue" => blue = n, 37 + _ => unreachable!(), 38 + } 39 + } 40 + Cubes { red, green, blue } 41 + }) 42 + .collect(), 43 + ) 44 + } 45 + } 46 + 47 + #[derive(Debug)] 48 + struct Game { 49 + id: u16, 50 + sets: Sets, 51 + } 52 + 53 + impl From<(u16, Sets)> for Game { 54 + fn from((id, sets): (u16, Sets)) -> Self { 55 + Self { id, sets } 56 + } 57 + } 58 + 59 + impl Game { 60 + fn is_possible(&self) -> bool { 61 + self 62 + .sets 63 + .0 64 + .iter() 65 + .all(|cs| cs.red <= RED && cs.green <= GREEN && cs.blue <= BLUE) 66 + } 67 + 68 + fn fewest_cubes(&self) -> Cubes { 69 + self 70 + .sets 71 + .0 72 + .clone() 73 + .iter_mut() 74 + .reduce(|a, b| { 75 + a.blue = a.blue.max(b.blue); 76 + a.red = a.red.max(b.red); 77 + a.green = a.green.max(b.green); 78 + a 79 + }) 80 + .unwrap() 81 + .clone() 82 + } 83 + } 84 + 85 + #[derive(Debug)] 86 + pub struct Day2 { 87 + games: Vec<Game>, 88 + } 89 + 90 + impl Day2 { 91 + fn possible_games(&self) -> Vec<&Game> { 92 + self.games.iter().filter(|g| g.is_possible()).collect() 93 + } 94 + 95 + fn sum_ids_possible_games(&self) -> u32 { 96 + self.possible_games().iter().map(|g| g.id as u32).sum() 97 + } 98 + 99 + fn sum_power_min_cubes(&self) -> u32 { 100 + self.games.iter().map(|g| g.fewest_cubes().power()).sum() 101 + } 102 + 103 + fn load_games(input: Input) -> Self { 104 + Self { 105 + games: input 106 + .lines 107 + .iter() 108 + .map(|l| { 109 + let splitted = l.split_once(": ").unwrap(); 110 + let game_id = splitted 111 + .0 112 + .rsplit_once(' ') 113 + .unwrap() 114 + .1 115 + .parse::<u16>() 116 + .unwrap(); 117 + let sets = splitted 118 + .1 119 + .split("; ") 120 + .map(|x| { 121 + x.split(", ") 122 + .map(|x| { 123 + x.split_once(" ") 124 + .map(|(n, s)| (s.to_string(), n.parse::<u8>().unwrap())) 125 + .unwrap() 126 + }) 127 + .collect::<Vec<_>>() 128 + }) 129 + .collect::<Sets>(); 130 + 131 + (game_id, sets).into() 132 + }) 133 + .collect::<Vec<_>>(), 134 + } 135 + } 136 + } 137 + 138 + create_solution!( 139 + out_1 => u32; 140 + out_2 => u32; 141 + year => 2023; 142 + day => 2; 143 + sol_1 => |input: Input| { 144 + let day2 = Day2::load_games(input); 145 + Some(day2.sum_ids_possible_games()) 146 + }; 147 + sol_2 => |input: Input| { 148 + let day2 = Day2::load_games(input); 149 + Some(day2.sum_power_min_cubes()) 150 + }; 151 + );
+6
src/solutions/year_2023/mod.rs
··· 1 + mod day0; 2 + pub mod day1; 3 + pub mod day2; 4 + 5 + pub use day1::*; 6 + pub use day2::*;