Skip to content

Instantly share code, notes, and snippets.

@slaght
Created December 16, 2024 19:57
Show Gist options
  • Save slaght/5420fdc418f767e1687da45a1e904808 to your computer and use it in GitHub Desktop.
Save slaght/5420fdc418f767e1687da45a1e904808 to your computer and use it in GitHub Desktop.
2024 Advent of Code Day 7 in Zig
const std = @import("std");
const testValues = [_]u64{ 31084, 40541461584, 6208, 306501986, 21276000, 1432991, 17115994, 19961295, 22953531, 18894343830, 4312695565, 391, 25202, 5324514, 658234, 26804472776473, 1503368, 24803314445, 1021069871, 1614, 4258805, 4495130022, 45111648, 2964501691711, 90685578359, 13608006, 4645623, 2569495, 134484, 1143450000, 5449, 23061783, 2930, 2115475, 19449, 4595553, 208314087, 2905504, 963368, 9980664, 652568, 45827, 722, 27652464029930, 6868809, 1175, 2133, 528, 8206806, 37530658373, 65484738025, 2157, 23082508, 29090880, 1262763, 1409848204234, 3304, 1196013120, 124278235, 2735190615, 52192, 573777850, 35694425, 658877085778, 20860682976, 224616, 358087, 6354432, 1923524, 117340, 1234059, 2651349895, 3884759, 633925731, 43555, 4230519, 5489, 82630872, 203340489, 72068, 168389664, 30367442, 2846739576, 78401, 627886555182, 53361, 154268, 525075263, 248294606, 9082152, 1657909631, 484430, 11192683920, 52887178, 896861, 721710054179, 12403134, 33615296, 183192, 1244794661146, 362827266, 1477891785, 5983, 73739569, 902757501, 177442819, 87403263, 223398085, 76471, 102739, 98723250300, 37813543, 21449386021, 355140846, 25511824797, 11681963, 10812636790, 144, 2954988, 1666626, 380854191760, 20485976, 562264400, 5054, 5790, 1423, 2214885600, 586061, 68594249, 380980, 7510, 451918, 16294, 10536237, 24566372, 284990, 1108832032, 215422984, 37636247, 511718662, 172674894, 2494298, 1164891, 1303421387, 113169, 28083319654, 689769, 664006, 383810, 278838736, 35266920, 2342060, 61499384, 1337677, 20708670, 22607703347, 422584, 16961283369, 7743900, 5198, 7706, 60799047884, 373279812855, 273426612, 449, 69949442, 2540247614, 72710790952, 43727113667, 74125836117, 527906, 139782, 19218, 8668810, 1487663526, 20610, 359112, 3198, 41189, 4720776758223, 195264, 16012371600, 3864074, 45674415, 1175718380, 51156, 4831584, 874516400, 220190, 429894584, 114640, 10759, 360390945715, 3140056, 15606936, 1134226, 640, 46339061240, 35646030, 271367519, 495104, 3480, 2608290, 55890251, 541872, 309960637, 14270, 2461824, 53575, 3128658, 223592, 12112807054, 27775914, 279477744, 9896932013, 8127207475, 3683665, 7203976, 12182439609, 6547981, 269451007, 1760418, 4881246, 104401, 57612060, 65336211, 1056886344323, 431112, 1497953467, 20122455, 112719469, 1178483161, 119908723232, 21106565, 70193, 3034, 3005, 81430304, 22260548, 494808, 6723, 463069864051, 913887, 824408862, 3431928092169, 502132176, 83412526, 407094, 701412, 25707842242, 505119, 295936440, 59813, 297534, 143500, 138312966147, 311740, 4908292, 6141663, 746258, 310680, 170615594, 160656040, 5577322182, 48328, 155259452737, 35341, 22236341, 44989863673, 606, 12733, 22463298, 377019478, 19642752, 702511961, 6024648, 104509650, 1135227, 224, 173902, 823929, 25781529, 15984006, 911, 1319338035, 281978, 26739745316256, 804636, 4368, 1339970241787, 27896197888, 1624907806241, 804053256, 19887, 576579196, 4075638918, 1242184922, 816, 16640, 55047199922, 202, 128584480, 14447, 302594, 100153, 2185551, 6746, 3486469538, 2105210, 47524069, 24206, 83444222, 1157600, 135424, 41759168088, 912, 1483426560, 1291767304, 4740630, 145255683, 2804256, 3662, 2070609492, 58896, 161664199, 28767133, 321150750, 32221373185, 125188150, 529, 371329981, 8636010413, 16436, 2610384, 2511598, 2051303, 3583491, 2567, 37412197, 660996, 772595115, 1125072, 40030036, 26483808, 89503594, 34849136, 1052469452651, 2333026, 2142047, 18329059, 1515, 636751072, 65121, 1203384, 1231, 5830477499, 39904736, 7192, 984797352, 4330380, 174675, 644000, 275310, 2980025, 1100140, 26416153, 392307, 1703108, 84496967641, 4926, 1238, 4166368, 264286, 5390070, 7109213251, 11479038526, 35577532, 516, 12159, 593081, 52698, 36739952992513, 2006, 83601, 478266, 297000, 1229910807, 185356128, 246521, 86285202, 23586, 18086584, 33690, 46311716, 214023, 6755, 14223284, 2291081, 284789717303, 17262, 157051, 1349805670, 2361910101, 45459840, 644841302, 196349, 25233495, 2502364627, 891841251, 526, 46610701, 101160, 74700, 487499, 12930315, 818480, 8956575, 6467920693, 877, 53325209060, 23291024284082, 929424926, 17829266, 12276, 181712606, 8831966, 661454663997, 237094, 5707220457, 152255376595, 1347305, 70155, 60468016, 408075824, 149767280436, 1581985302, 157694208, 3814512, 4548610, 21119484, 5946398, 151648362, 10321152, 114489, 145909, 106820010, 1480075, 28827, 7566, 5508361, 4988516, 184373, 199283931852, 1666857472580, 14487733, 1198391800, 126143604, 153392452209, 12681, 989, 93840, 217780, 33264, 7178025, 9028, 12935, 3659499181, 701521, 340704429, 62241150, 112424, 723672, 3066, 1274880, 2517506958, 110283391, 4536, 87466, 605783111392, 58853775, 47889063, 23241016, 27260572330, 233756964, 781268, 69945120, 267715242, 1896465174, 2800123, 206464, 127766017, 24, 10510918116, 3621981, 7258534, 12932425, 40426441, 258400, 895, 80809920, 21779938, 1613, 43158803498, 4366703135, 167694750, 1913663802, 1444191, 1003880435, 4155, 96614034, 1688, 41338714328, 9197318140, 46479360, 404048233, 11494468882, 1922, 6955, 31285182, 8117862, 47589, 2256037, 2527024499, 37690, 4175256007, 380247474471, 21474, 3277745, 20611117618, 6706090709, 5792, 410827821, 233173828, 187959, 486043544, 2347696, 4278588041013, 5637600, 4977330, 22497, 35382699154, 16502056, 756793, 4214, 12450094, 1618088, 1060491, 266689086, 68560832, 1326, 68085, 1840707, 13403416, 2093, 12213922, 224283, 97770, 25990, 299184551, 63062194, 68322843482, 37380255, 305472677, 46, 2250, 191773, 91083792, 335524376, 29640281671, 497340, 279527, 279694, 224785469, 10732502, 7497250, 56971, 41393070, 12168228431496, 117142318737, 158260, 2363212870, 447325, 4751, 841, 3346211520, 697352492, 7319280640, 27260, 10737320581, 17943, 35412, 6453, 840798, 17854, 1735468803, 1955340326, 7614444, 108369902185, 139223, 2142640, 266228026, 68870224, 393281, 22257035, 1480, 11720991, 156699, 1292069, 83229203, 15899250, 80808, 10465625002, 819408192, 667, 26860, 49480468, 5186813940000, 19174057, 72691616664, 18573243, 3883810560, 19738, 703764, 273920, 911, 33029, 524702, 109342, 35742400, 1483641, 7397, 10622451329, 1513454743, 87816030, 2957777379, 279602, 2793723, 13426560, 72281484, 15157818475, 1726473, 69102877793, 1182849, 81125766, 20198, 130416799, 29969, 4071, 3447616557, 31720, 10386966, 2515969, 2085272, 245966149, 936628, 434515299, 7751781085279, 6523, 507242778, 4557, 6172533, 4528512, 35178, 40198, 12418780, 37440, 7303307255, 42929, 101311, 3786723, 757762, 728, 19126995, 83647, 1250549, 9778, 18714, 10446534727248, 4136, 986, 382284584, 2087668, 13551, 54736659, 46609728, 8001, 2164, 34288954, 149143039, 858002, 355275, 1161901609, 14265505, 93906, 280258704, 2447, 21103892, 572320, 22940, 453933144, 9387402762, 628, 58729373, 16162243, 1806271, 1908, 87108518916, 1120226562, 5619463232, 28275666, 57418552, 337848089754, 101244761, 31091, 9551142, 431798, 368064, 641856, 356332, 1530148, 10595, 13825, 485809, 6598799, 15595884486, 655845, 167578404, 539849, 3430232, 4196, 24625387, 4318272002, 49392736, 97244751876, 2827209446, 773376516, 466781, 314242938, 654638167, 11952, 7579925, 1618, 33287, 126232779, 155627, 713339897, 131670050047, 7727322, 349733, 2481710424, 261963659, 51571974, 20290, 2626, 22878, 575535, 477517, 1384703, 891003337, 90028742465, 231588050, 1072, 11381395, 3841, 88734868, 280240227, 343965, 14417393, 227912, 2511501082, 9770975, 181098129983, 5511886, 11912, 54194003, 40135618285, 8817032, 236071, 1699, 9082, 14399715, 957922, 519850, 494598, 717301, 79732051, 193315, 443120, 799531202, 25055194, 148742749564, 2975722, 69614316, 9211672, 1384, 2227754259, 1980, 1051, 7224, 100058717, 13325842, 135606016, 188416, 13081748, 3408461, 19518, 31719, 246572, 127805458, 7811, 1168319105, 7211685, 4028985022, 127755655140, 208269903, 956027222, 332644, 739903, 449841, 3162, 123780, 397, 20327221321, 22759444, 1397068088398, 5172, 7637, 1812, 1120, 770138283, 163644, 6168, 507, 593693, 1214074355, 607244471, 275, 250040507, 5137920095731, 282926819, 80952, 8890436, 10600, 23840, 283368, 1123947090, 25775616, 243687944, 2855764, 2736185924 };
const calibrations = [_][]const u8{ "8 67 8 735 38", "5 81 9 4 32 43 283 228", "915 6 2 539 148 29", "6 3 630 45 536 64 6", "8 5 5 91 6 5 8 6 8 985 2 8", "3 403 4 821 591 2 236", "69 321 254 764 3 99", "5 311 84 6 63", "22 95 35 2 8", "90 5 3 2 65 7 159 2 91 1", "158 8 716 615 95 59", "1 326 64", "8 5 62 1 401", "6 8 466 59 169", "3 83 592 97 57 4", "7 61 1 447 29 496 71 9", "653 23 18 824 625", "5 2 4 4 417 1 987 4 447", "7 3 2 7 9 37 2 2 8 5 58", "63 645 4 3 31 868", "68 532 78 91 5", "583 78 275 37 77", "47 98 45 855 998 46 6", "9 672 76 9 754 7 4 65", "906 855 782 33 126", "3 5 7 7 3 602 7 4 7 720 6", "66 863 5 615 8", "443 74 7 71 5", "68 55 4 77 9 2 327 4", "24 750 35 264 5 1", "4 2 907 7", "854 9 5 6 1 1 7 3 2 76 5", "18 6 7 555 5", "9 194 8 54 42 5 31", "6 1 9 4 4 769 8 1 79 905", "298 3 4 257 5 3 345 45", "7 3 877 815 9 9 3 2 6 51", "46 58 514 626 763", "48 425 484 6 370", "1 98 80 5 98 68", "7 197 871 290 68", "15 3 665 9 154", "2 21 337 5 357", "7 829 9 700 7 9 3 7 4 1 8", "45 2 9 848 9", "7 5 98", "17 2 5 36 5", "55 1 5 8 9 31", "1 4 9 4 99 6 24 97 2 5 6 5", "1 2 8 5 8 4 5 7 3 946 373", "47 5 4 43 8 6 43 7 7 26 5", "8 2 1 93 8 568", "7 5 3 3 2 5 8 477 2 3 1 1", "45 28 37 8 78", "1 1 27 729 93 16 2 75", "7 87 622 84 820 42 34", "6 55 4", "8 340 179 35 192", "4 4 69 225 78 235", "273 2 3 1 906 1 5", "104 89 6 45 10 72", "680 31 807 8 50", "82 38 921 61 871 84 2", "7 86 55 156 10 977 8", "546 3 7 930 7 954 42 6", "441 46 8 36 73 8 3 45 7", "7 236 9 45 2 9 3 9 6 4 2 5", "55 792 7 153 639 7", "177 175 9 3 3 528 21", "9 82 159", "64 357 9 45 6", "8 526 4 7 9 1 6 42 9 89 5", "737 251 3 5 7", "346 4 3 5 472 9 7 9 4 8 9", "37 4 60 25 53 77", "2 2 12 8 9 9 91 41 2 5 2 3", "69 8 9 515 6", "33 1 2 19 81 9 4 5 6 6 33", "181 55 1 4 112 9", "7 197 4 5 9", "1 683 84 5 667", "2 657 6 4 384 5 673 49", "4 8 743 9 3 9 829 719 6", "77 4 9 93 5", "1 61 78 8 65 4 57 94 82", "85 3 592 1 63", "48 43 3 892 4 8 3 8 1", "656 34 4 8 6 6", "6 896 24 1 83 9 4 1 7 75", "182 66 9 8 6 7 7 2 195 2", "8 5 76 7 5 95 2 9 22 544", "2 5 64 7 49 961 83 3", "6 26 7 8 5 8 6 3 8 372 1 1", "4 863 61 118 60", "88 9 7 671 4 187", "135 891 60 541 81", "92 6 34 58 6 5 7 9 6 6", "312 44 55 9 3 1 572", "35 8 5 5 612 28 71 3 4 8", "6 4 9 6 1 6 4 57 7 685 8 6", "86 643 395 8 738 813", "86 6 2 8 13 2 91 7 1 8 8", "3 888 5 291 2 57 6", "668 6 687 89 6 69", "855 24 627 1 63 26 9", "6 9 401 2 4 52 256 4 3", "95 920 3 191 7 65", "57 3 1 8 11 50 45 8 9 85", "81 472 2 1 6", "1 284 1 8 9 1", "79 119 1 1 2 143 5 7 21", "28 4 5 813 540", "185 4 9 9 3 6 4 46 7 1 3 8", "39 4 6 90 845", "3 7 4 746 48 55 3 15", "5 76 9 67 1 35 3 8 50 3 2", "3 778 3 954 790", "90 14 40", "6 3 3 16 4 95 2 1 7 3 9 3", "282 573 74 39 1 46", "2 7 24 5 54 177 5 5 664", "47 155 643 323 3 8", "8 1 3 1 5 74 3 67 309 88", "67 3 55 599 604", "8 6 4 3 7 43 1 9 8 4 17 6", "232 6 23 2 6", "1 5 2 1 3 50 183 41 82 3", "507 69 31 975 3", "2 9 373 9 50 340 3 32 6", "95 4 980", "5 4 825 4 71 9", "90 50 18 11 106", "29 134 8 65 4 1 455 3", "6 6 3 9 1 1 4 724 4 5 1 97", "1 34 8 3 90 592 85 87", "5 5 5 91 7 5 88 5", "80 93 29 3 727 88", "63 82 417 8 70 1", "3 875 3 39 615 6 73 5 2", "3 505 3 718 23 42 9", "6 76 9 6 7 5 6 6 7 7 22 2", "21 8 468 606 6", "12 97 891", "8 604 17 5 6 48 95 87", "242 889 55 7 6", "7 1 6 2 780 4 8 9 9 3 8 7", "2 479 72 6", "603 60 997 9", "312 123 4 7", "254 851 15 86 76", "4 8 65 481 94", "5 55 2 43 99 710", "760 4 83 423 2 4", "769 562 5 67 3 9 13", "1 7 8 1 9 9 6 70 6 1 3 57", "23 6 7 6 7 67 80 39 44", "1 6 185 2 95 23 1 878", "7 614 720 9 609 1 9", "12 80 8 38 33 75 525", "5 14 5 5 3", "5 765 6", "9 6 5 331 7 2 2 6 3 3 5 87", "74 65 5 946 16 571 5", "519 24 87 2 656 3 958", "250 94 8 9 88", "8 92 4 1 15 33 8 3 1 2 2", "578 3 346 73 29 5 5 9 2", "99 4 87 255 85 7 4", "3 1 333 66 106 71 2 4 7", "4 5 52 6 25 35 9 3 521", "54 9 9 931 29", "11 33 6 526 918", "704 402 9 522 284 8", "40 8 6 3 6 2 84 2 2 75 7 3", "9 9 517 70 2 6 2 5 94 8 4", "1 152 3 2 45", "323 5 47 54 7 6 3 8 4 2 4", "1 7 8 8 24 7 1 4 41 7 27", "13 9 3 624 5", "47 20 776 758 222", "4 2 339 36 2", "6 9 6 3 6 3 95 3 76 4 185", "3 4 426 84 73", "42 4 9 7 82 410 5", "6 340 5 911 746", "3 4 4 540 87", "2 43 8 2 55 5 7 5 69 96", "874 5 16 368 32", "7 974 32 38 1 7 4 172 4", "1 9 5 7 5 98 94 9 6 9 58 4", "3 7 31 52 7 6 1 772 299", "23 1 6 12 7 2 1 4 81 28 7", "2 431 696 27 213 20 5", "783 9 5 1 43 9 8 864", "96 6 40 639 172", "9 824 46 152 2", "5 32 2 2", "7 20 9 987 5 715 618", "42 1 885 137 7", "7 45 964 127 96 893", "1 960 8 56 64", "7 1 12 3 1 40", "91 95 46 3 3 30", "1 65 7 9 4 81 454 3 582", "774 7 46 2 27", "8 43 4 90 640", "44 8 875 1 9 6 1 8 3 5 5", "1 4 1 9 7 12 61 71 1 4 1 8", "6 73 9 7 118 3", "93 9 2 2 20 8 94 331 7", "5 43 381 5 9 4 5 884 8", "870 119 7 61 15 274 4", "6 1 781 1 9 18 4 3 5 889", "33 3 9 411 87 763", "647 3 331 353 343 46", "8 1 2 720 3 4 29 9 4 91 3", "981 751 5 5 8", "3 51 7 5 629 3 5 9 9 8 5 4", "5 57 9 9 9 7 9 8 4 320 3 3", "9 727 2 47 84", "9 262 62 4 992", "99 34 1 5 99 96 4 27 6", "5 3 46 2 4 67 57 8", "68 69 8 72 1", "6 270 53 61 11", "92 71 912 169 540 1", "8 990 3 9 1 6 18 695 64", "3 19 108 92 69", "1 640 5 8 6 9 38 65", "24 76 903 9", "32 80 7 13 6 456 4 6", "18 8 6 29 75 754 4 3 4", "48 39 7 5 3 73 8 64 30", "350 1 37 4 966 2 1 7 2 2", "4 53 9 2 7 701 59 746 4", "21 45 68 816 3", "2 89 24 92 7 58", "124 4 989 2 83", "7 15 212 54 7", "87 6 665 6 8", "4 81 13 457 13", "995 8 4 91 7 465 10", "3 6 7 2 752 9 5 1 36 5 2 1", "82 43 9 86 8 94 6 5", "5 3 67 76 755 15 362 6", "9 109 624 964 702", "1 4 7 2 27 405 3 1 721 8", "27 7 60 433 7 5", "2 5 84 648 97 836 8", "311 3 2 3 711 8 8 2 2 42", "1 44 41 7 40", "9 27 963 89 272 4 38", "595 97 657 457 984", "348 61 1 1 2 7 296 46", "618 32 8 31 19 1 82 7", "5 29 5 3 2 2 7 50 4 8 96 2", "5 76 5 37 1 1 597 3 20", "9 785 31 59 5", "204 7 25 3 5 1 7 2 9 6 2 2", "1 3 61 6 48 21 4 11 81 5", "6 7 59 782 9 45 8", "447 3 7 74 35 7 7 6 6 6 2", "75 78 105 603 7", "47 49 942 2 24 5 7 1 2 7", "3 7 4 7 9 149 9 456 7 3 7", "56 746 874 2 8 342", "5 76 93 1", "3 381 88 641 5 1", "96 6 5 6 71 2 3 381 7 3 3", "4 80 50 4 70", "65 9 2 86 5", "24 88 3 5 80 1 4 89 8", "6 748 5 1 3 4 1 9 7 2 3 8", "696 5 7 544 51", "887 792 1 7 961", "8 86 75 47 168", "5 1 482 62 72 597 7 70", "2 218 25 27 45 5 5", "2 4 6 2 86 100", "99 277 462 89 4 99", "9 9 8 5 929", "60 9 8 4 7 65 9 2 4 213 9", "38 6 5 9 727 7 6 4 96 1 5", "7 6 1 868 1", "7 6 1 7 6 438 1 448 5 87", "561 4 9 5 5 56 1 4 1 9 5 3", "3 772 8 21 75 45 5 75 5", "50 6 26 542 927", "9 87 1 8 42", "2 6 8 17 4 82 9 29 4 95 2", "8 8 849 619 66 521", "9 270 3 9 649 18 9 44 1", "531 30 7 9 25 91 6", "394 48 682 27 264", "34 7 5 75 6 8 1 5 5 5 91 9", "886 5 23 97 1 5 4 7 48", "7 4 5 7 88 9 393 4 925", "5 2 5 6 45 6", "34 60 177", "5 674 9 97 58 8 985 7 1", "1 57 3 8 1 4 28 2", "34 6 835 650 94 8", "166 3 28 420 83", "5 6 2 511 83", "4 389 35 70 60 43 450", "38 3 43 19 3", "4 6 583 93 784 39", "8 47 3 40 786 7 9 1 19", "7 4 8 2 6 9 8 31 7 56 3 2", "6 4 610 811 106 4 85 8", "25 599 13 2 19", "309 3 9 96 1 8 38 21", "383 930 42 92 800", "274 494 29 6 33", "63 4 91 3 77 2 33 9 94", "6 1 9 58 1 838", "4 6 1 69 801 406 692 6", "41 475 889 4 88 65 8", "941 32 56 2 87", "6 928 2 270 96 3 3", "2 563 36 41 6 91 8", "592 6 91 11 8", "9 460 7 1 66 352 9 8 5", "73 2 5 17 5 15 8", "5 9 8 9 746 32 2 1 9 8", "6 69 10 43 37 96", "6 3 33 7 6 191 1 74 355", "931 4 3 78 56 33 8", "1 84 8 299 7 6 3 623 38", "1 2 63 54 350", "53 730 8 78 760 4 57 1", "34 6 1 516 8 4 4 82 1 1 1", "8 8 36 7 70", "6 74 93 329 8 42", "21 497 80 7 10 12 5", "68 6 53 523 6 91", "58 3 3 8 852 79 4 5 5 46", "5 3 32 4 3", "63 94 238 46 197", "61 61 7 43 18", "1 7 2 25 4 2 314 72 5 8 6", "6 82 64 2 3 7 444 2 3 48", "9 68 7 66 646", "5 6 9 862 16 33 96", "2 91 80 112 72 61", "7 14 6 1 9 857 68 88", "5 94 9 5 5 5 9 870 8 8 3 8", "2 9 1 8 36 9 5 5 75 1 7 9", "55 2 6 1 60 3 9 40 6 5", "1 7 398 2 523 11 1", "1 5 216 3 1 214", "65 7 58 3 967 7 759 9 4", "3 648 21", "855 2 9 12 7", "567 1 29 21 1 612", "416 2 925 357 7", "2 2 987 58 51 2 1 8", "4 881 3 11 8", "86 84 99 3 1 459", "444 3 8 3 797 7 6 9 1 5 6", "8 41 206 75 824 530", "2 4 89 4 17 7 92 14 1 4", "6 11 31 58 888 4 2 9 2", "29 72 7 96 4 61", "3 8 9 91 3 9 466 5 6 8 3 9", "5 3 64 9 4 764 7 7 5 4 6 7", "644 22 589 2 30", "23 789 9 532 7 8", "9 8 7 71 696 158 605 9", "5 47 3 5 2 6 60", "7 20 5 8 75", "4 8 393 74 22 7", "5 5 2 6 11 26 80 115 8 6", "38 5 77 813 35 3 54 8 6", "798 2 5 88 89 50", "245 1 5 7 333 456 3 7 9", "71 155 500 25 5", "7 4 6 4 1 70 9 66 1 5 39 2", "9 6 1 225 9", "1 92 6 4 343 2 6 8 3 41", "89 592 7", "9 4 779 4 627 92 4 8 3 7", "22 8 90 75 5 8", "68 30 8 5 1 56 3 1 3 7", "1 4 8 6 3 724 612 8 286", "49 50 820 9 90 6 88", "262 102 46 6 600 807", "44 5 401 7 82 115 48", "787 6 4 6 307", "25 96 42 856 402", "70 1 3 52 9 5", "46 6 144 8 27 534 7", "4 69 4 56 89", "12 3 41 18 619 6", "5 793 66 7 53 9", "270 2 799 12 5", "9 9 7 5 7 8 2 111 1 45 4 8", "3 2 632 725 81", "605 3 9 3 960 30 47 49", "105 4 3 1 3 9 3 240 2 7 1", "9 7 6 181 6 9 3 3 451 81", "59 4 874 26 71", "5 623 7 3 38 6 8 1 3 1 8 2", "8 42 71 1 3 8 4 9 8 9 384", "7 658 2 70 62 68 2", "69 6 192 81 2 4", "14 6 1 3 34 83 14", "9 73 7 1 76 4 7 95 8 5 27", "79 62 560 2 63 6 51", "95 9 4 1 417", "46 605 5 697 4", "5 5 6 5 9 4 873 8 4 3 3 63", "86 2 765 47 83", "9 52 6 6 85 502", "4 77 3 9 48 9 1 5", "3 4 8 966 10 3 7 1 4 5 4 1", "6 8 827 5 676 864 35", "5 8 5 48 652 1 8 8 1 3 8 5", "71 10 689 32 75", "554 965 941 2 53", "9 42 193 47 6 9 515 48", "3 6 29 42 492 5", "6 56 4 53 63", "2 5 55 3 66", "595 74 75 412 6", "2 56 30 2 2 39 65 2 9 8 7", "231 3 453 350 8 10 78", "3 3 311 50 646 12", "71 82 86 966 4 920 55", "76 17 40 820 65 163", "9 4 8 65 664 3 4 3 701 9", "91 2 88 257 706 58 1", "640 1 23 5 27 726 812", "40 74 6 758 22", "1 221 860 788 436", "83 9 258 3 8 38 72 3 6", "94 8 52 3 5 15 56 1 3 8", "5 6 4 8 8 5 6 5 5 37 9", "66 9 3 3 7 57 50 1 9", "38 822 28 29 876", "661 589 67 71 91 57", "894 75 5 9 93 54 317", "99 807 712 2 8", "6 5 4 8 31 84 37 9", "75 70 909", "722 269 10 2 55", "44 2 198 9 3 71 691 6 7", "19 1 5 7 6 9 78 1 8 849 3", "7 244 8 141 62 23 5 83", "495 4 214 13 1", "5 33 55 12 568 66 2 97", "1 9 7 9 5 1 1 33 9 11 20", "3 5 8 4 158 6 3 539 855", "77 654 23 180 331", "557 891 68 9 9 5 828", "231 965 8 84 2 93 1 4 2", "86 2 6 463 88 55 5 3", "6 482 7 3 939 11 5 4 9 7", "5 7 2 9 4 7 44 2 5 65 4 9", "1 9 99", "98 38 46 15", "419 3 516 23 5", "447 87 973 5 22", "995 9 5 2 87 7 527 20 5", "3 83 7 5 3", "711 5 6 3 47", "365 925 6 229 9 5 181", "9 4 3 64 7 61 8 26 67 53", "52 78 84 319 7 7 99", "7 176 842 8 77 6", "5 1 8 936 82 8 183 92", "347 67 1 2 874", "51 5 8 8 8 898", "23 52 542 9 87", "37 68 780 726 9 59", "3 52 3 53 8 3 8 6 3 903 1", "83 5 81 9 747 2", "19 46 6 3", "404 91 601 37 741 4", "4 485 79 4 384 399", "516 64 89 984 999 29", "7 3 5 5 6 1 3 819 27 9 9 1", "9 9 7 9 28 57 2 3 8 2 5 5", "61 958 6 5 1 5 26 8 314", "376 6 743 4 692 1", "7 4 539 5 113 5 6 4 7 73", "92 8 663 9 4 3 632 3 1 2", "976 920 1 4 651 72", "203 8 17 9 384 23", "3 7 3 186 1", "74 12 9 35 714 1 24 1", "7 5 1 9 3", "59 46 109 181 15", "2 248 954 2 1 3 9 78", "70 96 523 840 898", "928 6 43 57 8 54 1 3 9 7", "6 8 7 7 3 8 1 2 1 18 509 9", "70 120 34 40", "81 303 38 2 51", "932 69 727 47 995", "9 411 92 64 226", "4 401 4 7", "36 222 9 7 26 39 6 9 9 1", "57 7 93 7 2 70 982 8 6", "9 89 350 76 598", "64 299 63 6 2 10 2", "556 9 11 4 6 5 1 41 83 7", "19 82 746 977 863", "72 810 13 4 575", "15 6 361 72 6 2 3 6 59", "5 9 1 5 3 8 8", "41 338 639 75 328", "2 59 6 1 690 8 1 5 227 4", "61 7 4 2 9 7 39 272 6 5 8", "951 7 8 576 2 4 235", "3 187 5 9 1 3 24 2 6 7 5 7", "6 233 457 6 61", "9 7 8 4 5 7 4 2 4 5 202 5", "23 136 506 7 63 52", "437 1 6 921 2 381 46 6", "9 94 374 39 7", "60 376 39", "4 3 1 7 8 10 3 1 6 51 91", "3 720 52 6 1 88 1", "4 8 5 39 20 2 34 2 23", "2 4 2 45 497 88 5 7 2 7 1", "9 9 9 1 17 4 784 8 4 39 9", "18 2 5 4 414 89 271", "3 3 2 4 8 1 4 9 39 76 19", "799 2 3 1 8 9 8 4 7 872", "618 29 68 8 3 69", "4 927 73 453 16 409", "3 74 634 6 896 3 4 7 5 6", "119 32 2 556 23", "3 230 57 52 54 74 62 7", "4 1 35 40 19 769 8", "44 7 29 4 7 456 7 4 684", "58 9 54 25 8", "9 7 6 79 3 9 8 838 3 4 7 6", "82 79 983 1 1 3 9 102", "77 617 2 14 2 46 554", "8 6 58 319 488 5 819", "88 3 3 944 192 3 1 72", "6 697 1 5 27", "2 2 2 6 3 629 9 857 5 9 4", "76 4 6 1 7 7 62 90 5 1 8", "3 361 14 906 66 1", "3 2 17 83 5 6 8 42 6 5 3 3", "3 1 82 6 8 5 3 308 2 1 2", "423 846 4 1 8 44", "674 6 78 7", "85 9 62 6 804 4 3", "2 1 3 5 4 65 7 8 7 3 933", "56 6 868 26 614 9 8", "73 703 14 1 17", "640 7 4 5 8 4", "1 214 7 27 1 8 378", "6 5 5 87 2 7 767 6 92 4", "325 2 92 544 7", "70 9 605 7 46 123 825", "28 244 28 434 82", "80 1 935 87 493 4 5", "509 6 7 267 7", "1 45 2", "29 1 75 6 69", "19 176 5 8", "4 7 236 878 7 5 6 4 3 1 1", "8 53 51 68 668 158", "7 8 4 6 3 5 7 44 7 8 8 90", "9 3 762 7 3 6 3 5 6", "402 67 149 4 1 3", "1 935 96 765 97", "2 1 9 5 68 10 2 3 9 3 7 23", "15 5 477 5 60", "8 936 1 9 249", "4 76 9 79 91", "2 53 5 781 70", "64 3 8 2 161 9 7 831 3", "3 6 6 9 2 60 436 3 9 6 9 3", "9 45 5 4 78", "2 363 212 4 52 420", "463 2 795 355 25", "11 48 9", "81 9 97 2 13", "3 9 858 11 522", "67 1 4 4 18 3 455 69 9 5", "61 45 7 709 7 656 80", "7 9 344 79 5", "7 8 5 5 55 7 8 6 294 70", "9 839 921 18 6 9 4", "6 724 1 9 8 580", "161 1 475 81 9", "975 287 52 3 647 517", "3 32 69 42 7 655", "3 86 8 5 9 91 68 3 26 80", "54 8 292 2 54 5 327", "86 7 718 824 7 88 7 19", "3 9 115 814 7 9 5 7 1 8 6", "8 3 53 2 77 38 6 3 2 7 4", "49 43 35 566 72", "3 80 51 8 597 5 62 24", "6 62 870 22 4", "5 4 109 9 32 77 2 22 9", "29 25 685 5 6 3 597 3 5", "679 67 130 537 9 58", "1 8 23 7 364 5 5 5 59 7", "663 9 301 5 5", "17 760 21 42 6", "100 1 4 7 1 808 321 9 2", "986 375 43", "40 4 521 212 104", "9 77 71 47 50 1 425 2", "31 68 991 7 3 87", "8 8 2 7", "200 45 23 56 4", "43 29 90 127", "504 967 5 825 5 86 2 3", "6 7 652 7 51 7", "991 7 733 662 6 38", "343 360 489 9 900 6", "6 88 2 8 4 438 8 980 6", "5 2 508 38 54", "13 8 48 495 20 77 23 6", "7 629 987 89 8 20", "7 5 9 4 592", "50 644 822 7", "7 153 24 79 7 3 95 17", "84 130 3 3 2 2 80", "8 1 706 7 51 174 6 6 9 7", "2 64 70 737 153", "364 5 8 4 85", "5 80 3 7 1 4 7 879 3 1 2", "69 31 8 732 963 91", "47 1 7 80 3 8 1 6 417 1", "30 265 7 777 379", "759 1 23 4 4 274 9 7", "2 10 66 1 6 24 2 723", "36 37 180 8 7", "8 25 758 6 17 9 36", "26 124 1 5 7 818 475", "857 5 41 9 819 2", "9 997 2 91 7 17 711 7 5", "2 249 31 38 4 129 8", "7 2 670 17 308 3 789", "8 6 3 396 2", "10 27 483 6 7 9 6 4", "7 62 38 7 91 5 4 907", "3 10 4 7 23", "858 111 362 9 54", "38 59 43 63 4 2", "1 3 8 612 2 96 5 7 8 4 6 3", "2 768 9 906 8", "18 65 114 297 25", "96 3 146 5 6 4 2 2 3 731", "57 38 19 887 90 88", "905 64 9 8 56 99", "8 7 900 819 9 389 11", "4 61 26 151 28", "6 822 69 44 4 459 1 6 7", "2 48 3 9 169 3", "37 9 207 43 7 9 7 7 12 9", "7 27 871 689 5 6 63", "1 682 81 46 80", "67 4 25 6", "54 7 6 8 351 6 164 11", "24 9 8 12 870 247 32", "35 695 324 6 64 8 52", "9 124 38 5 516", "2 99 31 1 3", "1 685 92 6 3 3", "76 997 1 3 38", "567 6 23 42 90", "593 1 70 65 59 58 458", "8 828 47", "24 939 1 71 50", "9 173 39 15 5 3 39 262", "89 265 5 13 4 43 1 3", "61 465 74 62 990 8 6", "12 289 668", "919 65 2", "655 1 7 1 144 578 7 1", "521 7 75 94 48 4", "62 69 8 36 9", "504 52 8 38 17 261", "5 9 6 5 78 8 818 9 3 1 5 6", "55 7 6 9 7 3", "20 62 3 7 8 8 76", "174 227 512 141 854", "568 157 839 4 4 8 745", "715 600 1 2 2", "3 550 5 22 6", "9 3 7 1 9 5 8 2 99 9 492 4", "7 4 77 237 684", "1 23 457 4 78", "396 16 217 528 81", "237 9 217 9 88", "688 2 139 4 3 64 55 7", "571 889 7 8 7", "74 1 31 10", "884 1 7 2 8 75 164 94 9", "447 7 134 3 70 3 57 2", "2 96 5 6 10", "53 4 53 29 373", "2 3 90 75 92 139 927", "4 319 283 5 13 718", "72 26 16 8 9", "8 349 61 129 729 4", "81 8 1 54 7 89 8 5 2 32", "7 860 2 3 9 3 24 29", "4 35 65 440 227", "8 96 4 18 9 6 4 142", "893 778 54 82 7 9 5", "2 8 4 1 222 8 1 631 6 4 5", "2 94 6 323 9 4 4 53 8 3", "2 7 4 4 92 9 87 2 54", "2 827 32 904 554 96", "62 5 31 10 568 6", "80 23 1 2 8", "848 13 8 38 853 4", "107 13 11 13 33", "4 93 3 71 524", "37 88 128 73 4", "9 597 19 6 996 5", "541 2 674 617 6 5 3 1 1", "6 36 560 69 8 961", "5 5 2 512 8 298 7 115", "716 3 162 9 916 19", "3 7 1 594 25", "9 15 29 9 2 700 7 56 4 8", "951 77 9 8 4 4", "9 6 8 6 9 37 846 38 3 8 8", "10 7 2 3 80 6 5 2 7 306 2", "80 63 4 72 34 2 944 2", "3 45 6 3 7 293 8 5 9 2 3 1", "384 6 35 4 9 6 7 3 441 5", "7 73 37 651 5", "21 76 5 364 782", "77 30 223 22 610 218", "14 95 6 631 7 169", "76 23 69 7 50 439 18", "860 37 435 47 5", "80 4 7 711 59", "1 822 40 354 48 2 3", "6 3 841 9 5 4 77 8 34 9 3", "1 6 99 989 54 95 13 99", "9 7 5 8 9 30 430", "231 19 75 12 5 1 4 8", "2 795 9 753 513", "615 8 637 271 4 6 28", "1 58 9 49 1 3 96 5 9 3 8 3", "9 7 4 7 2 308 655 650 9", "7 5 579 7 848 1 1 3", "3 85 3 467 36 1 1 6 196", "2 6 96 545 2", "2 2 80 275 4 21 3 9", "54 4 14 18 10 8 73 6 3", "43 3 4 5 8 46 7 50", "4 401 6 7 738 51", "86 6 12 4 825 3 3 39", "608 3 1 37 4 3 4 2 4 6 2 1", "35 3 1 586 1 2 8 1 3 65 5", "7 9 995 9 5", "73 4 974 2 36 2 435 7", "847 4 87 358 8", "3 6 9 8 9 2 7 5 4 838 725", "2 981 23 1 48 94", "6 35 67 885 23", "9 4 7 2 63 6 38 35 90", "8 183 31 19 3 72 9 8 1", "1 946 88 2 430 3 7 6 2 4", "2 207 7 58 9 4 36 33 5", "36 3 6 1 3 399 7 9 8 1 8 6", "749 92 63 2 9 4 104 94", "3 167 581 43 15", "24 5 7 50 632", "5 5 5 4 8 7 7 38 182 8 3 5", "460 2 2 6 4 4 7 2 57 728", "566 414 610 196 941", "874 26 799", "59 85 7 9 10", "7 6 5 84 32 1 9 9 8 756 7", "5 76 282 265 853", "854 1 1 608 8", "8 8 8 9 1 2 4 1 3 4 17 78", "769 92 138 844 1", "8 1 7 80 45 5 221 629 8", "5 329 577 536 60", "71 7 62 5 764 4", "320 693 332 72 50 2", "241 48 900 7 194", "341 93 73 435 240 65", "802 811 6 919 2", "3 9 65 34 9 9 6 3 1 96 59", "92 116 51 20", "5 687 2", "312 1 75 78 952", "6 46 5 70 6", "74 41 921 7 8", "69 9 6 405 7", "58 44 628 7 145 31 9 8", "86 4 981 7 534 49 5 9", "86 1 1 7 2 4 8 877 96 8", "4 8 735 32 8", "306 58 2 737", "654 396 4 34 348 94 9", "2 1 8 9 1 54 9 25 9 616 2", "65 6 9 78 597", "26 98 9 4 393 9 81 2 8", "40 71 9 1 5 457", "198 16 5 7 31 1 4 794 6", "5 2 1 2 4 44 8 93 9 12 8 8", "411 5 7 562 8 554 93 5", "77 86 48 505 604", "73 70 5 3 8 31 5 140", "3 75 267 990 3", "455 20 5 10 4 3 5 7", "63 1 8 660 4", "8 744 1 67 3 630 9 1 5", "8 6 3 1 9 9 4 9 608 73 88", "88 4 6 9 7 3 53 7 9 17", "961 528 514 51 9 60", "88 299 1 1 9", "10 40 83 98 1 460 7 6", "366 7 6 3 241 6", "419 2 5 161 5 6 4 414 1", "6 431 2", "251 9 85 746 7", "908 35 789 3 77", "7 9 1 68 9 2 4", "11 6 57 1 3 8 947 9 1 3 3", "610 32 344 63 156", "137 5 9", "41 9 2 76 60", "77 77 16 765 9", "9 4 5 3 9 73 5 7 8 4 855 8", "6 3 7 3 1 83 2 510 2 4 6 8", "26 2 9 2 2", "24 9 455 585 504", "44 7 438 78 3 23 573 2", "6 4 827 26 812 42 3 32", "37 2 6 948 2", "635 2 7 43 8", "2 1 8 8 6 6 8 3 91 541 6 5", "5 86 1 9 4 1 7 511 57 5", "3 8 8 322 8", "49 3 877 8 1 323 9 342", "8 8 6 97 692", "650 5 815 32 92", "2 1 912 730 1", "835 66 2 53 8 3 31 3 2 2" };
fn checkAllPossibleOperators(calibrationValue: u64, testInput: []i16, operators: []bool, index: i32) bool {
if (index == operators.len) {
var result: i64 = testInput[0];
for (0..operators.len) |i| {
if (operators[i]) {
result += testInput[i + 1];
} else {
result *= testInput[i + 1];
}
}
if (result == calibrationValue) {
return true;
} else {
return false;
}
}
operators[@intCast(index)] = true;
const first = checkAllPossibleOperators(calibrationValue, testInput, operators, index + 1);
operators[@intCast(index)] = false;
const second = checkAllPossibleOperators(calibrationValue, testInput, operators, index + 1);
return first or second;
}
fn checkAllPossibleOperatorsWithOr(calibrationValue: u64, testInput: []i16, operators: []u4, index: i32) !bool {
if (index == operators.len) {
var result: i64 = testInput[0];
for (0..operators.len) |i| {
if (result > calibrationValue) {
return false;
}
if (operators[i] == 1) {
result += testInput[i + 1];
} else if (operators[i] == 2) {
result *= testInput[i + 1];
} else {
var buf: [1024]u8 = undefined;
result = std.fmt.parseInt(i64, std.fmt.bufPrint(&buf, "{}{}", .{ result, testInput[i + 1] }) catch unreachable, 10) catch unreachable;
}
}
if (result == calibrationValue) {
return true;
} else {
return false;
}
}
operators[@intCast(index)] = 1;
const first = try checkAllPossibleOperatorsWithOr(calibrationValue, testInput, operators, index + 1);
if (first) {
return true;
}
operators[@intCast(index)] = 2;
const second = try checkAllPossibleOperatorsWithOr(calibrationValue, testInput, operators, index + 1);
if (second) {
return true;
}
operators[@intCast(index)] = 3;
const third = try checkAllPossibleOperatorsWithOr(calibrationValue, testInput, operators, index + 1);
if (third) {
return true;
}
return false;
}
fn checkAdditiveSatisfyability() !void {
const allocator = std.heap.page_allocator;
var sumOfValidTests: u64 = 0;
for (0..testValues.len) |i| {
var iterator = std.mem.splitScalar(u8, calibrations[i], ' ');
var testInput = std.ArrayList(i16).init(allocator);
while (iterator.next()) |calibrator| {
const calibratorValue = try std.fmt.parseInt(i16, calibrator, 10);
try testInput.append(calibratorValue);
}
const operatorSet: []bool = try allocator.alloc(bool, testInput.items.len - 1);
defer allocator.free(operatorSet);
const result = checkAllPossibleOperators(testValues[i], testInput.items, operatorSet, 0);
if (result) {
sumOfValidTests += testValues[i];
}
}
std.debug.print("Sum of valid tests: {d}\n", .{sumOfValidTests});
}
fn checkAdditiveSatisfyabilityWithOr() !void {
const allocator = std.heap.page_allocator;
var sumOfValidTests: u64 = 0;
for (0..testValues.len) |i| {
var iterator = std.mem.splitScalar(u8, calibrations[i], ' ');
var testInput = std.ArrayList(i16).init(allocator);
while (iterator.next()) |calibrator| {
const calibratorValue = try std.fmt.parseInt(i16, calibrator, 10);
try testInput.append(calibratorValue);
}
const operatorSet: []u4 = try allocator.alloc(u4, testInput.items.len - 1);
defer allocator.free(operatorSet);
if (try checkAllPossibleOperatorsWithOr(testValues[i], testInput.items, operatorSet, 0)) {
sumOfValidTests += testValues[i];
}
}
std.debug.print("Sum of valid tests with OR operator: {d}\n", .{sumOfValidTests});
}
pub fn main() !void {
_ = try checkAdditiveSatisfyability();
_ = try checkAdditiveSatisfyabilityWithOr();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment