Last active
December 5, 2024 23:53
-
-
Save slaght/b1f4fa62462481e64ba0b13b76e7afdd to your computer and use it in GitHub Desktop.
2024 Advent of Code Day 1 in Zig
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const std = @import("std"); | |
const list1 = [_] i32 {85215, 24582, 98037, 75786, 45656, 70998, 30367, 81780, 90260, 24710, 14018, 43565, 59781, 47761, 85892, 25701, 18264, 33747, 39697, 61838, 70437, 23562, 11216, 63191, 88615, 93481, 29534, 29935, 95190, 51306, 30938, 77253, 66807, 75203, 15696, 73541, 52063, 55826, 79183, 77348, 65423, 65816, 52110, 18201, 27748, 92259, 14988, 58623, 88260, 62079, 45698, 91705, 53661, 93541, 76689, 60498, 25784, 32811, 62264, 41995, 38545, 19555, 73703, 86068, 25850, 49433, 74291, 40711, 37728, 80842, 24677, 29575, 20692, 82910, 33830, 68434, 62401, 82646, 38398, 79408, 63734, 13556, 75123, 61363, 95609, 88545, 50893, 14882, 91379, 60224, 72679, 75505, 10186, 88379, 90496, 73586, 95670, 87141, 13919, 98555, 87897, 21880, 29658, 96248, 15492, 29496, 25334, 20643, 56611, 29416, 74832, 43193, 81875, 61800, 24065, 83853, 17180, 43720, 65647, 51476, 57574, 31072, 75113, 79797, 72214, 13116, 93787, 46134, 40985, 25988, 23062, 79383, 75339, 79708, 13058, 16278, 80414, 16351, 54813, 81250, 50921, 53645, 70432, 81070, 38985, 19798, 92509, 25063, 44665, 64806, 74946, 48029, 77560, 82468, 29223, 87584, 93056, 55648, 14352, 49873, 56227, 67703, 68135, 44722, 65476, 82704, 50424, 51796, 85079, 61910, 84132, 47927, 61766, 38484, 57255, 48855, 73127, 21236, 15138, 26829, 48823, 28401, 75082, 41215, 67176, 13673, 53842, 41964, 46737, 52719, 20212, 89201, 98568, 55425, 69878, 36501, 16724, 61592, 41114, 44198, 47061, 45289, 47597, 18834, 31018, 40775, 25185, 48462, 26799, 37199, 94411, 45846, 16862, 77988, 89121, 41240, 88088, 52125, 12932, 61211, 26024, 26312, 14585, 65939, 68138, 70317, 83217, 22036, 63215, 54110, 12981, 61857, 54637, 15241, 19897, 77229, 55685, 30161, 61780, 19289, 48121, 99355, 62767, 98670, 85332, 92588, 67574, 90643, 95487, 33530, 87009, 61978, 53891, 64426, 70651, 40653, 45888, 55241, 11126, 92609, 21760, 72079, 41177, 67610, 62720, 38295, 69482, 24219, 69511, 30242, 46626, 36316, 40214, 16785, 27770, 70571, 50406, 76411, 75186, 80536, 74209, 20188, 30587, 44135, 29251, 73362, 52443, 61094, 12167, 51846, 75168, 97509, 29546, 83531, 67737, 85592, 11431, 38480, 42360, 14648, 32741, 97324, 79881, 71771, 18334, 68130, 61546, 14960, 18988, 30289, 75930, 21257, 36448, 86654, 11876, 66255, 92074, 29648, 17522, 52479, 95416, 69033, 60062, 67751, 32285, 14164, 84112, 28620, 93425, 25079, 63507, 25390, 32858, 95361, 94333, 40395, 43206, 92330, 84078, 72161, 63204, 16143, 71756, 27041, 84087, 17409, 51792, 52746, 74015, 59054, 29297, 84657, 32609, 17060, 25874, 58302, 80865, 26487, 66212, 15758, 89851, 76509, 82093, 59990, 10461, 63653, 61308, 89327, 14989, 17367, 86991, 41601, 44063, 65372, 64013, 53989, 87917, 54951, 49657, 37242, 10122, 20118, 94367, 23209, 55363, 65064, 12293, 90625, 75864, 75980, 82806, 50840, 22139, 56146, 68559, 15717, 18446, 32393, 38555, 92877, 52476, 22255, 57023, 89712, 47141, 98051, 69509, 51468, 83074, 78836, 32010, 82768, 80962, 37056, 55438, 24160, 79310, 36425, 41091, 47905, 41536, 29509, 54028, 20625, 71827, 47338, 10967, 75725, 95800, 64759, 37476, 78412, 28130, 83725, 53024, 45967, 56671, 41707, 77665, 48546, 16309, 16089, 76903, 31304, 45381, 61640, 55671, 91121, 48837, 68378, 77462, 36188, 60269, 78335, 74685, 16866, 72995, 26388, 36575, 46928, 65265, 84605, 42658, 56818, 51576, 95552, 84846, 52027, 28477, 64359, 47203, 52605, 95437, 72068, 59641, 24867, 32292, 67584, 35182, 19538, 32007, 92975, 30032, 41113, 73576, 26722, 54882, 99164, 24703, 68050, 60454, 27190, 49592, 56765, 49584, 40545, 13088, 92702, 25522, 70502, 92893, 11623, 84426, 12731, 92300, 21625, 26632, 28475, 75712, 75879, 69842, 95243, 44031, 63456, 47057, 32649, 30244, 18656, 70657, 59827, 21580, 34612, 71392, 66944, 75302, 35677, 66839, 43839, 33590, 70339, 73961, 39874, 83280, 76702, 38544, 50441, 42757, 67041, 12497, 42768, 12205, 95448, 32384, 21279, 17428, 10614, 61245, 17235, 16999, 63526, 39490, 95242, 66925, 22315, 56338, 20318, 87536, 76054, 51588, 13119, 34345, 20023, 37131, 42337, 89951, 79435, 13465, 29793, 27722, 86832, 81965, 20918, 75215, 85783, 90525, 15127, 76419, 45429, 40503, 77472, 24459, 39273, 65912, 41919, 38024, 79322, 43054, 23682, 12316, 34222, 98966, 34564, 32039, 39662, 77296, 11982, 85184, 23308, 87694, 65053, 95042, 63925, 61794, 46414, 74588, 29733, 32203, 82698, 16989, 79186, 47914, 49915, 18124, 12186, 80439, 91196, 65806, 64937, 39013, 35793, 86223, 68919, 16242, 26757, 62000, 91400, 43258, 74293, 36472, 72537, 79963, 89591, 46045, 55267, 11274, 46293, 13186, 31736, 17707, 11755, 43161, 16657, 13779, 77770, 43502, 26568, 16788, 92875, 99320, 19490, 38003, 12296, 98989, 90146, 11563, 52578, 65786, 68704, 69963, 16787, 38189, 79734, 40154, 57993, 56091, 28153, 88207, 57286, 72520, 50122, 95885, 25183, 28985, 81747, 50078, 76112, 27757, 56391, 58234, 90999, 25733, 65607, 62203, 59085, 20052, 28344, 58344, 34019, 24970, 72586, 12892, 67070, 38881, 16457, 15116, 91678, 80586, 33881, 61688, 69315, 53321, 59151, 87226, 73486, 27149, 44397, 86370, 28465, 67420, 97544, 11326, 65808, 51991, 38955, 40299, 98792, 98158, 15911, 33107, 91713, 53452, 31259, 61299, 68294, 30551, 35457, 73631, 30456, 30406, 61078, 72853, 11693, 56942, 36376, 45741, 37009, 87300, 61087, 47331, 47888, 91532, 70212, 24577, 26505, 93930, 21051, 56106, 47059, 39701, 76753, 80218, 15008, 20406, 19425, 41697, 77797, 86369, 15816, 12414, 91988, 15219, 92982, 71767, 78447, 42788, 19254, 54247, 64860, 25737, 13014, 68315, 89552, 92384, 12292, 55549, 90489, 23051, 87275, 90750, 19383, 26480, 11456, 24861, 45105, 88412, 41192, 10159, 22941, 47473, 38267, 24304, 86270, 91359, 35745, 35994, 35989, 24968, 33438, 84317, 16694, 50035, 46849, 21158, 38659, 66814, 62569, 26374, 17282, 58720, 67926, 32437, 87668, 39798, 65779, 36260, 80381, 90225, 66679, 88157, 13264, 64409, 93067, 30142, 42595, 85722, 30646, 53833, 38303, 44152, 91913, 73350, 99275, 15131, 61889, 18935, 41834, 18515, 31759, 40919, 20301, 32312, 73708, 95227, 92281, 30610, 74684, 59712, 65683, 30738, 31859, 82346, 46263, 13554, 67042, 61839, 75364, 58929, 66416, 88263, 78356, 57336, 53785, 16902, 61032, 48258, 73802, 94584, 40440, 30176, 70136, 25421, 57645, 16176, 20419, 51694, 42302, 68569, 93917, 69691, 53629, 57088, 71814, 93253, 17098, 47293, 81492, 12600, 22912, 76064, 44694, 96409, 61518, 41719, 80558, 29918, 51778, 21399, 84781, 13131, 17389, 45549, 85797, 87747, 32160, 17589, 15753, 75220, 40166, 94668, 59922, 10582, 79962, 86178, 74569, 94528, 59272, 60494, 60692, 37369, 26980, 51039, 75162, 81331, 29652, 98663, 43026, 14599, 13011, 50257, 13018, 40970, 46679, 32462, 81209, 64600, 96685, 14635, 66344, 93459, 49013, 15256, 52161, 66454, 78139, 73936, 43733, 35548, 11626, 11393, 58006, 92271, 31512, 11545, 66798, 13234, 70506, 36041, 78007, 59850, 77378, 34128, 31147, 45913, 97727, 25073, 86251, 58420, 43354, 68038, 67290, 90859, 67710, 48934, 22667, 72666, 77601, 20458, 99233, 54526, 79270, 51276, 54733, 60594, 61152, 74123, 13243, 55324, 55894, 16368, 16600, 59353, 19565, 71782, 31511, 83349, 23853, 53938, 18254, 86817, 78957}; | |
const list2 = [_] i32 {94333, 34558, 94333, 66247, 85863, 87003, 62007, 23161, 65786, 86514, 34310, 47888, 79173, 71538, 22181, 61839, 33438, 43258, 94333, 37358, 22496, 26799, 34419, 11393, 31544, 62720, 40919, 18758, 87857, 33515, 29652, 30646, 67041, 67041, 61800, 29496, 51002, 40919, 35633, 44025, 33750, 10624, 89611, 22051, 66807, 42784, 33500, 64359, 90432, 77685, 40919, 64359, 73356, 28465, 96938, 93056, 65786, 24732, 72520, 43258, 84426, 72520, 78074, 72520, 87009, 10684, 61839, 10516, 82526, 40919, 23062, 52605, 77673, 68845, 62419, 73604, 84426, 70854, 56339, 51171, 27770, 24577, 37015, 69734, 86251, 27770, 74026, 87009, 33438, 52605, 47888, 59781, 62720, 64359, 67041, 93056, 63191, 59781, 74934, 74846, 32687, 62687, 50213, 83521, 86906, 53112, 27594, 86251, 39477, 24577, 63164, 43258, 75725, 61927, 94333, 31467, 10130, 37354, 45425, 10461, 93056, 83739, 19490, 26799, 11294, 48228, 33438, 19254, 28931, 11393, 59151, 11393, 89198, 29496, 61839, 45698, 14142, 40919, 43258, 87434, 61839, 43258, 22523, 32306, 31359, 99501, 43258, 66000, 33438, 93056, 26300, 30646, 83292, 95064, 71914, 63191, 26799, 29949, 48844, 34111, 45698, 63191, 30646, 90812, 78955, 47888, 23079, 70111, 22013, 66098, 89544, 62720, 78856, 42757, 93056, 78836, 78836, 61839, 94333, 65786, 93140, 63191, 42757, 26799, 19254, 78836, 26386, 59781, 21097, 29652, 76559, 82291, 63191, 93322, 63283, 27429, 47888, 81085, 93056, 47888, 86251, 56992, 15576, 66807, 40919, 78266, 76021, 64359, 32811, 19555, 77560, 48696, 77508, 94333, 66807, 94333, 59151, 29652, 13054, 28578, 87009, 55718, 45698, 91730, 59781, 78836, 78836, 26799, 66807, 21264, 33069, 29652, 94333, 93056, 33438, 86251, 37316, 66807, 14101, 17661, 51324, 72435, 32811, 19490, 31012, 18461, 94379, 66607, 66807, 46429, 23062, 27770, 19254, 58297, 61800, 40474, 33438, 44527, 42398, 93056, 22129, 51542, 26196, 68036, 45698, 64359, 93056, 66807, 45698, 24577, 18573, 80909, 72520, 10921, 11393, 43258, 30875, 98707, 77560, 11587, 78836, 72520, 57435, 58144, 46185, 45698, 53860, 46357, 47231, 62720, 23761, 65786, 42330, 35185, 19555, 61105, 29868, 45698, 17615, 34009, 52605, 51113, 77560, 32811, 52605, 61839, 47888, 52980, 99079, 23062, 29652, 44357, 47888, 93056, 43258, 40252, 36869, 32811, 72850, 93056, 73490, 62720, 92471, 61800, 41674, 61800, 78836, 16338, 19490, 43258, 30646, 43258, 23009, 16283, 74724, 72462, 62720, 29652, 24447, 64359, 75725, 33438, 69784, 11228, 94333, 59151, 14329, 17484, 23504, 67041, 19555, 86854, 23062, 44956, 78836, 54942, 36577, 84426, 63915, 94333, 47888, 18449, 86251, 86771, 26799, 10461, 26799, 86251, 22847, 33851, 51588, 19490, 92877, 61839, 61800, 52845, 19555, 77327, 40919, 69223, 67041, 86251, 70551, 24123, 19555, 52605, 61429, 71173, 59052, 74726, 77560, 17142, 64359, 10907, 63191, 32811, 64359, 85038, 78836, 27770, 51588, 79119, 75570, 52605, 10226, 77560, 53053, 15072, 61800, 34010, 77560, 59151, 17192, 61800, 60664, 67041, 59781, 63941, 19348, 12402, 44084, 27770, 18938, 28465, 20910, 26799, 33904, 27770, 59781, 75725, 63745, 65786, 33021, 99593, 29496, 45698, 26688, 55835, 64081, 27175, 17752, 81097, 57741, 65786, 47888, 21302, 38075, 39769, 84153, 92214, 59495, 31985, 25406, 19555, 98007, 98832, 52118, 66807, 45698, 70337, 88675, 93056, 49345, 78302, 61800, 52605, 84426, 32811, 19490, 81028, 15754, 20196, 70612, 51272, 67041, 29652, 21462, 23062, 57668, 30815, 12078, 32366, 66807, 19555, 24441, 61839, 40919, 94333, 55316, 35855, 22975, 47888, 33438, 94333, 40919, 51588, 65786, 19555, 98561, 49926, 40919, 94333, 72520, 67041, 66281, 93056, 86251, 77846, 50243, 65786, 32598, 90308, 63191, 62720, 90323, 80072, 85267, 11393, 89691, 54749, 17319, 19555, 19254, 33438, 38740, 61839, 28758, 86251, 11393, 43258, 84251, 75536, 13458, 23062, 19490, 53429, 61839, 78836, 25094, 65593, 19555, 94430, 40613, 78836, 65786, 62720, 59781, 93810, 31069, 86251, 65786, 25169, 87755, 55633, 64359, 17296, 71404, 14998, 61800, 27770, 10279, 81145, 19490, 47888, 61839, 65253, 45698, 92877, 15909, 11477, 78836, 11393, 96512, 19555, 59151, 56714, 66807, 63191, 51588, 66807, 64359, 52605, 29652, 27969, 62720, 87432, 33081, 19254, 67030, 45698, 78166, 64359, 19295, 45698, 62861, 65786, 27770, 48241, 79043, 65212, 94333, 27924, 47888, 12815, 34197, 59781, 95057, 70210, 92877, 51588, 52605, 10461, 37893, 68323, 26799, 78836, 66807, 77371, 97072, 78836, 67041, 86251, 61839, 69116, 65786, 30878, 66741, 19490, 17183, 29652, 73712, 42757, 59313, 83489, 29652, 59781, 63191, 47888, 51784, 96140, 51588, 19490, 86544, 78265, 61800, 53664, 47888, 91405, 66415, 78836, 28554, 77560, 40919, 21633, 97245, 66743, 44135, 19490, 19555, 45698, 14942, 63191, 35300, 51909, 64832, 63191, 15883, 63191, 26705, 62720, 14865, 75725, 52605, 84420, 35018, 98498, 75725, 87304, 61800, 19597, 19254, 19490, 99203, 19490, 72751, 19008, 93056, 33438, 43258, 14704, 11393, 19555, 43258, 17416, 59120, 75725, 19555, 42757, 71092, 56598, 93224, 28716, 19254, 94333, 79695, 63191, 66807, 70737, 94333, 33438, 32811, 52518, 51637, 38228, 86251, 59151, 27770, 64175, 29652, 47922, 81046, 30646, 62720, 65343, 93056, 66807, 11393, 28781, 27172, 10461, 63191, 23540, 43258, 11728, 65210, 63191, 23062, 75044, 46996, 86249, 29496, 65786, 94333, 67442, 20914, 94088, 33438, 52605, 27851, 98828, 65786, 60952, 30646, 61800, 59781, 85385, 60589, 12411, 75725, 58454, 43258, 45698, 21358, 30646, 19254, 56308, 27770, 48561, 75409, 51764, 75543, 51588, 77560, 94277, 54939, 26402, 47888, 77315, 49201, 75055, 52605, 90963, 66890, 51719, 93056, 51588, 24577, 19555, 93056, 93056, 10531, 44766, 33763, 19254, 32620, 59781, 73146, 78836, 59781, 84697, 43258, 36981, 10033, 59151, 99698, 29496, 85324, 10461, 69625, 19490, 47132, 25151, 36163, 63191, 41236, 34952, 94977, 47888, 47888, 26799, 51715, 19254, 52910, 27572, 93056, 99178, 17578, 64359, 61839, 29652, 31975, 71900, 25667, 45155, 66807, 29496, 26799, 87780, 64359, 66807, 51588, 60185, 93335, 83328, 76311, 58155, 72520, 13851, 36443, 34438, 86251, 65786, 19555, 52605, 29496, 19490, 59151, 31691, 79906, 61800, 19486, 72520, 45698, 38568, 19254, 43258, 74739, 30646, 66807, 19254, 64359, 66829, 33438, 96424, 66807, 61839, 45698, 77560, 20005, 91608, 67261, 67923, 86251, 42479, 19490, 33438, 53176, 20117, 42701, 57113, 19490, 29936, 56821, 63191, 61800, 86034, 64587, 95919, 53727, 59781, 97315, 11393, 96380, 44227, 63044, 67638, 40577, 43258, 65786, 92500, 52605, 67041, 45698, 61475, 38255, 59781, 81215, 68282, 71278, 83758, 35517, 63191, 65786, 27770, 19490, 60359, 58212, 27770, 94333, 47888, 29652, 71924, 75725, 37345, 43258, 92198, 24577, 23062, 11393, 11393, 97630, 47888, 19490, 47888, 19254, 19555, 94333, 85812, 15495, 52605, 56010, 98555, 62220, 22932, 29652, 72520, 79205, 10461, 67041, 67041, 94333, 33438, 33438, 61839, 25778, 43258, 55502, 78836, 86251, 33438, 59151, 66807, 16778, 86065, 22924, 64359, 10777, 89451, 13900, 75407, 23062, 98555, 40919, 92938, 42757, 19555, 20819, 23062, 34399, 74703, 72520, 11393, 87009, 86251, 96101, 40439, 19555, 32811, 33438, 74568}; | |
pub fn arrayDistance() void { | |
var list1Copy = list1; | |
var list2Copy = list2; | |
std.mem.sort(i32, &list1Copy, {}, comptime std.sort.asc(i32)); | |
std.mem.sort(i32, &list2Copy, {}, comptime std.sort.asc(i32)); | |
var difference: u32 = 0; | |
for (0..list1Copy.len) |i| { | |
difference += @abs(list1Copy[i] - list2Copy[i]); | |
} | |
std.debug.print("Part 1 Difference: {d}\n", .{difference}); | |
} | |
pub fn multiplicativeArratDistance() !void { | |
const allocator = std.heap.page_allocator; | |
var list1Copy = list1; | |
std.mem.sort(i32, &list1Copy, {}, comptime std.sort.asc(i32)); | |
var list2FrequencyMap = std.AutoHashMap(i32, i32).init( | |
allocator, | |
); | |
defer list2FrequencyMap.deinit(); | |
for (0..list2.len) |i| { | |
const frequency = try list2FrequencyMap.getOrPutValue(list2[i], 0); | |
frequency.value_ptr.* += 1; | |
} | |
var difference: i32 = 0; | |
for (0..list1Copy.len) |i| { | |
const frequency = list2FrequencyMap.get(list1Copy[i]); | |
if (frequency) |f| { | |
difference += list1Copy[i] * f; | |
} | |
} | |
std.debug.print("Part 2 Difference: {d}\n", .{difference}); | |
} | |
pub fn main() !void { | |
arrayDistance(); | |
try multiplicativeArratDistance(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment