advent-of-code

Solutions for Advent of Code.
git clone git://git.amin.space/advent-of-code.git
Log | Files | Refs | LICENSE

day_02_1.zig (10503B)


      1 const std = @import("std");
      2 const debug = std.debug;
      3 
      4 pub fn main() void {
      5     var result = checksum(input_02);
      6     debug.assert(result == 4712);
      7     debug.warn("02-1: {}\n", result);
      8 }
      9 
     10 fn checksum(input: [] const [] const u8) u32{
     11     var num_with_pair: u32 = 0;
     12     var num_with_triple : u32 = 0;
     13     for (input) |id| {
     14         if (has_pair(id)) {
     15             num_with_pair += 1;
     16         }
     17         if (has_triple(id)) {
     18             num_with_triple += 1;
     19         }
     20     }
     21 
     22     return num_with_pair * num_with_triple;
     23 }
     24 
     25 fn has_pair(id: [] const u8) bool {
     26     // ASCII: [ 65, 66, ..., 122 ]
     27     const ascii_range = u8('z' - 'A') + 1;
     28     var counts = []u32{0} ** ascii_range;
     29     for (id) |char| {
     30         var count_index: u8 = u8(char - 'A');
     31         debug.assert(count_index < counts.len);
     32         counts[count_index] += 1;
     33     }
     34     for (counts) |count| {
     35         if (count == 2) {
     36             return true;
     37         }
     38     }
     39     return false;
     40 }
     41 
     42 fn has_triple(id: [] const u8) bool {
     43     // ASCII: [ 65, 66, ..., 122 ]
     44     const ascii_range = u8('z' - 'A') + 1;
     45     var counts = []u32{0} ** ascii_range;
     46     for (id) |char| {
     47         var count_index: u8 = u8(char - 'A');
     48         debug.assert(count_index < counts.len);
     49         counts[count_index] += 1;
     50     }
     51     for (counts) |count| {
     52         if (count == 3) {
     53             return true;
     54         }
     55     }
     56     return false;
     57 }
     58 
     59 test "letter dups" {
     60     debug.assert(!has_pair("abcdef"));
     61     debug.assert(!has_triple("abcdef"));
     62 
     63     debug.assert(has_pair("bababc"));
     64     debug.assert(has_triple("bababc"));
     65 
     66     debug.assert(has_pair("abbcde"));
     67     debug.assert(!has_triple("abbcde"));
     68 
     69     debug.assert(!has_pair("abcccd"));
     70     debug.assert(has_triple("abcccd"));
     71 
     72     debug.assert(has_pair("aabcdd"));
     73     debug.assert(!has_triple("aabcdd"));
     74 
     75     debug.assert(has_pair("abcdee"));
     76     debug.assert(!has_triple("abcdee"));
     77 
     78     debug.assert(!has_pair("ababab"));
     79     debug.assert(has_triple("ababab"));
     80 }
     81 
     82 const input_02 = [] const [] const u8 {
     83     "luojygedpvsthptkxiwnaorzmq",
     84     "lucjqgedppsbhftkxiwnaorlmq",
     85     "lucjmgefpvsbhftkxiwnaorziq",
     86     "lucjvgedpvsbxftkxiwpaorzmq",
     87     "lrcjygedjvmbhftkxiwnaorzmq",
     88     "lucjygedpvsbhftkxiwnootzmu",
     89     "eucjygedpvsbhftbxiwnaorzfq",
     90     "lulnygedpvsbhftkxrwnaorzmq",
     91     "lucsygedpvsohftkxqwnaorzmq",
     92     "lucjyaedpvsnhftkxiwnaorzyq",
     93     "lunjygedpvsohftkxiwnaorzmb",
     94     "lucjxgedpvsbhrtkxiwnamrzmq",
     95     "lucjygevpvsbhftkxcwnaorzma",
     96     "lucjbgedpvsbhftrxiwnaoazmq",
     97     "llcjygkdpvhbhftkxiwnaorzmq",
     98     "lmcjygxdpvsbhftkxswnaorzmq",
     99     "lucpygedpvsbhftkxiwraorzmc",
    100     "lucjbgrdpvsblftkxiwnaorzmq",
    101     "lucjfgedpvsbhftkxiwnaurzmv",
    102     "lucjygenpvsbhytkxiwnaorgmq",
    103     "luqjyredsvsbhftkxiwnaorzmq",
    104     "lucjygedpvavhftkxiwnaorumq",
    105     "gucjygedpvsbhkxkxiwnaorzmq",
    106     "lucjygedpvsbhftkxlwnaordcq",
    107     "lucjygedpvibhfqkxiwnaorzmm",
    108     "lucjegedpvsbaftkxewnaorzmq",
    109     "kucjygeqpvsbhfokxiwnaorzmq",
    110     "lugjygedwvsbhftkxiwnatrzmq",
    111     "lucjygedqvsbhftdxiwnayrzmq",
    112     "lucjygekpvsbuftkxiwnaqrzmq",
    113     "lucjygedpvsbhfbkxiwnaoozdq",
    114     "lscjygedpvzchftkxiwnaorzmq",
    115     "luckygedpvsbxftkxiwnaorvmq",
    116     "luyjygedgvsbhptkxiwnaorzmq",
    117     "lmcjygedpvsbhfckxiwnaodzmq",
    118     "lucmygedwvybhftkxiwnaorzmq",
    119     "lgcjhgedavsbhftkxiwnaorzmq",
    120     "lucjugedpvsbhftkxiwmaoozmq",
    121     "lucjygedpvybhftkxkwnaorumq",
    122     "lucjygedpvzbhfakxiwnaorzpq",
    123     "lucjygedpvsbhftyxzwnajrzmq",
    124     "lucjygedpvsdhfakxiwnoorzmq",
    125     "luyjygeopvhbhftkxiwnaorzmq",
    126     "lucjygadpvsbhntkxiwnaorzmx",
    127     "lucjygedzvsbhftkiiwuaorzmq",
    128     "sucjygodpvsbhftkxiwuaorzmq",
    129     "euijygydpvsbhftkxiwnaorzmq",
    130     "lucjlgeduvsbhftkxicnaorzmq",
    131     "lucjdgedpvsbhfgkxiwnhorzmq",
    132     "lucjymedpvsbhotkxiqnaorzmq",
    133     "lucjygmdpvsbhftkxywnairzmq",
    134     "lucjggedpvsbhfxkxiqnaorzmq",
    135     "sucjygedpvsbhftkxiwnaorjmv",
    136     "lucjlgedpvsbhftkxiwnairzmg",
    137     "lucjygedppubhftkxijnaorzmq",
    138     "lucjyxedpvsvhftkxlwnaorzmq",
    139     "lucjygedpvxbhftkfiwyaorzmq",
    140     "lucjygedposbhftkniwnaorzmw",
    141     "lucjygewpvsbhftgxiwnavrzmq",
    142     "lucjynedpvsbmftkaiwnaorzmq",
    143     "lucjyhedpvzbhftkxiwncorzmq",
    144     "lucjygedpvsbhfikpiwnaoezmq",
    145     "lupjypedpvsbhftkjiwnaorzmq",
    146     "lucjygudpvsbhfwkxivnaorzmq",
    147     "lucjygrdpvsbhatkxzwnaorzmq",
    148     "lucjbgmdpvsbhftkxihnaorzmq",
    149     "lucjmgedpvpbhftkxiwnaorcmq",
    150     "lucjygedpvskhfukmiwnaorzmq",
    151     "lucjygedgvsbhftkxiwnvprzmq",
    152     "lucjzgedppsbhytkxiwnaorzmq",
    153     "lfcjypedpvsbhftrxiwnaorzmq",
    154     "lucjyqldphsbhftkxiwnaorzmq",
    155     "lucjygedpvsbhftzxewnaorzqq",
    156     "lucjygeapvsbhftkxiinoorzmq",
    157     "lucjygedpvszhftguiwnaorzmq",
    158     "luojygedpvsbhftkxawnaornmq",
    159     "lucjygedpcsboetkxiwnaorzmq",
    160     "lufjygedpvfbhftaxiwnaorzmq",
    161     "luciygedpvsbhftkxhwaaorzmq",
    162     "lucjygedpvnbhftkaiwnaorzmc",
    163     "lucjygedpvsbhftkxiwcaorbdq",
    164     "lucjygelpvsbhftaxiwsaorzmq",
    165     "lujjygedpssbhftkxiwnaorzmr",
    166     "ludjygedpvsbhftkxiynaorzmj",
    167     "lukjygeedvsbhftkxiwnaorzmq",
    168     "lucjqpedpvsbhftkxiwnaozzmq",
    169     "jucjygedpvsbhftkxgwnaorqmq",
    170     "llwjygedpvsbhetkxiwnaorzmq",
    171     "rucjygedpvsbhftkxiwndorymq",
    172     "lucjygedpvsbhftvxswnaorwmq",
    173     "lucjygerpvsbhfykxiwnaormmq",
    174     "lucjynedpvsbhftkxijnaorziq",
    175     "ljcjygedpvrbhftkeiwnaorzmq",
    176     "lucjygedpnsbhftkxiwhaornmq",
    177     "lucjygadpvsbhftkxibnaorzqq",
    178     "lucjqgedpvsihftkxiwnaorzdq",
    179     "lucjygedpvsqhfttjiwnaorzmq",
    180     "llcjygedsvsbhftkxiwwaorzmq",
    181     "lfckygedpvsbhftkxiunaorzmq",
    182     "lucjyeedpdsbhftkxiwnaotzmq",
    183     "lucjygedpvsbhftkoiwnaoqzcq",
    184     "huwjvgedpvsbhftkxiwnaorzmq",
    185     "lucjygldpvsbdhtkxiwnaorzmq",
    186     "lycxygedpvsbhftmxiwnaorzmq",
    187     "lucjygedpvsbhftyxianvorzmq",
    188     "lucuygedpdsbhqtkxiwnaorzmq",
    189     "lucjyggdpvsbhftkxiwnavremq",
    190     "lucjyggdpvsbkftkxiwnaorbmq",
    191     "luchyqedpvsbhftixiwnaorzmq",
    192     "lpcnygedpvsbhftkxzwnaorzmq",
    193     "lucjygedpvsihftkxiwfaortmq",
    194     "lucjygvdpvsbhgtkxiwnamrzmq",
    195     "lucjygodpvrbhqtkxiwnaorzmq",
    196     "lucjygedpfsbhftkxipnaorzma",
    197     "lucjygedpvsbhftkxpcjaorzmq",
    198     "lucjygodbmsbhftkxiwnaorzmq",
    199     "lucjygedpvsbhftkxipnaogzmb",
    200     "luxjygjdpvsbhltkxiwnaorzmq",
    201     "lucxygedpvsbhftkxzwnaorjmq",
    202     "luajygedpvsbhftzxiwaaorzmq",
    203     "lhcjygedpvsqhftfxiwnaorzmq",
    204     "lucjygecphsbhftkxiwnaprzmq",
    205     "lucjygedpvsbhptkxifnaorqmq",
    206     "lucjygedpvichftkpiwnaorzmq",
    207     "lucjygedpcsbhstkxswnaorzmq",
    208     "kucjygedpvsbhftkxiwbyorzmq",
    209     "lfpjxgedpvsbhftkxiwnaorzmq",
    210     "lucjytldpvsbhftkxiwdaorzmq",
    211     "lufjygedpvfbhftbxiwnaorzmq",
    212     "lucjygebpvgbhftkxipnaorzmq",
    213     "luujygedpvdbhftkxiwnaorzmd",
    214     "lucjygedpvsbhfbyxwwnaorzmq",
    215     "lucjygedpvsbhftkxiwnaoqpmw",
    216     "qucgygedpvsbhftkxiwnaortmq",
    217     "ludjtgedpvsbhftkxiunaorzmq",
    218     "lucjyiedovsbhftkxiwjaorzmq",
    219     "lucjygedpysbjftoxiwnaorzmq",
    220     "lumjygedpvsbuftkxiknaorzmq",
    221     "lucjygedpvsbhfokxgonaorzmq",
    222     "lucjygeqpvsbhftkfiwnaorzeq",
    223     "lucjygedpvskhftkxiwntorkmq",
    224     "luujygedpvsbhftkxiwraorzmt",
    225     "lucwygedpvsbjftkxiwnaorzmj",
    226     "jucjyfedcvsbhftkxiwnaorzmq",
    227     "luujygedpnsehftkxiwnaorzmq",
    228     "lucjygedpvszhfckxiwnaorzmi",
    229     "lucjyredpvsbzftkpiwnaorzmq",
    230     "lucjygedpvsbwfgkxiwnaorzoq",
    231     "lucjygedpvgbhftkpiwnaorzms",
    232     "lucjygedpvjbhftkxzwnaoizmq",
    233     "vucjycedpvsbhftkxiwfaorzmq",
    234     "luawygeapvsbhftkxiwnaorzmq",
    235     "lucjygetpvsbhftkxiwnaafzmq",
    236     "lucjvgedpvsbhftkxywnavrzmq",
    237     "luolygedpvsbgftkxiwnaorzmq",
    238     "likjygedpvsbhftkxiwnabrzmq",
    239     "lucjygedovsbhftkxirpaorzmq",
    240     "lucjygedphsshftkxqwnaorzmq",
    241     "uuqjygewpvsbhftkxiwnaorzmq",
    242     "lucjygedcvsbhftkxiwoarrzmq",
    243     "lucnygedpvsbhfakxiwnaorzms",
    244     "lucjygedpvsbhntkxiwnawrzmb",
    245     "lucjygedpvsblfxkxivnaorzmq",
    246     "lucjygedpvsghftkxiwnaawzmq",
    247     "yucjygedpgsbhftkxiwnaorzbq",
    248     "lucjyweapvsbhftkxiwnaoezmq",
    249     "lucjygevpvsbyftcxiwnaorzmq",
    250     "luejygedovsbhftkxiwnqorzmq",
    251     "lucjyqedpvsbhfbkxiwnaorzms",
    252     "lucjypedpvsbhftwxiwnhorzmq",
    253     "lucjygedpvsbhmtkviwxaorzmq",
    254     "lucjogedpvpbhftkxiwnaorqmq",
    255     "lucjygedpvsbhztkxkwnaoazmq",
    256     "lucjyaedpvsbcftkxiwnaorzhq",
    257     "lucjygbdpvkbhftkxiznaorzmq",
    258     "lucpygedpvzbhftkxfwnaorzmq",
    259     "lucjmgedpcsbhftkxiwnaoezmq",
    260     "lucjygedyvsbbftkxiwnnorzmq",
    261     "lucjyyedpvsbhftuxiwnaonzmq",
    262     "lucjygfdpvsbhutkxiwnaorzmt",
    263     "uccjygedpvschftkxiwnaorzmq",
    264     "lusjygedpvbbhqtkxiwnaorzmq",
    265     "ducuygedpvsbhftkxiwnaorzyq",
    266     "lucjygkdvwsbhftkxiwnaorzmq",
    267     "cucjyyedpvsbhftkxiwnaerzmq",
    268     "lucjygedavsbhftkxiwnkorzbq",
    269     "lucjygedmvsyhftkxiwiaorzmq",
    270     "lucjygeipvsbhfpkxiwnaorzpq",
    271     "vucjugedvvsbhftkxiwnaorzmq",
    272     "lucjyzedpvsbhftkxpwnaoozmq",
    273     "lucjygedpvgbhftkxiwtaorzqq",
    274     "lecjygedpvcwhftkxiwnaorzmq",
    275     "lucjyghdpvsbhfcyxiwnaorzmq",
    276     "lucjygedpvesqftkxiwnaorzmq",
    277     "lucjyjehpvsbhftbxiwnaorzmq",
    278     "lucjygedpvtbhdtkxignaorzmq",
    279     "lucjygxdpgsbhftkxivnaorzmq",
    280     "lucjygvdpvsbhftkpiwnaorzqq",
    281     "lucjysedpvsbhftkxiwnalrzmc",
    282     "lucjygedpvkbhjtkxiwnaorsmq",
    283     "lucjygedpvsbvfgkxiwnaerzmq",
    284     "lucjygedpvsihftkxilnaorzmu",
    285     "lvcvygndpvsbhftkxiwnaorzmq",
    286     "lucjysedpqsbhftkxiwnaordmq",
    287     "lucsygeypvsbhftkwiwnaorzmq",
    288     "lucjygewpotbhftkxiwnaorzmq",
    289     "lucjysedpvsbhftkxiwnanrzmv",
    290     "lucjygedpvsbhutkxiwnaoplmq",
    291     "wucjygedpvsqbftkxiwnaorzmq",
    292     "lacjygeepvsbhftkxiwnjorzmq",
    293     "lucjygedpusyhftkxicnaorzmq",
    294     "qucjyredpvsbhftkxiwnworzmq",
    295     "lucjygedevsbhftkgiwnayrzmq",
    296     "lucjygedpksbrftkliwnaorzmq",
    297     "lucjygedpvsbhfgkxisnaorzeq",
    298     "lucjygedpvhdhftkeiwnaorzmq",
    299     "lucjsgedpvsboftkxiwnaorumq",
    300     "luctygedpvsbhftouiwnaorzmq",
    301     "lucjygedpvsjhfukjiwnaorzmq",
    302     "lucjagrepvsbhftkxiwnaorzmq",
    303     "lucjkgerpvsbhftkxiwnairzmq",
    304     "turjygedpvsbnftkxiwnaorzmq",
    305     "lbcjygedpvsbhftkdpwnaorzmq",
    306     "lucpygedpvsbhftkxnwnoorzmq",
    307     "jucjygedpvsbhbtkxicnaorzmq",
    308     "lecjygedpvsbhftkriwnaogzmq",
    309     "licjyvcdpvsbhftkxiwnaorzmq",
    310     "lrcjygewpnsbhftkxiwnaorzmq",
    311     "ltcxygedpvlbhftkxiwnaorzmq",
    312     "luctygedpvhbhztkxiwnaorzmq",
    313     "lucwygedplsbhfakxiwnaorzmq",
    314     "lucjygedpnsbhftkxiwjaoezmq",
    315     "lucpygedptsbhftkxiwnaorzmo",
    316     "lucjygedpvibhqtkxiknaorzmq",
    317     "lucjwgqdpvrbhftkxiwnaorzmq",
    318     "lucjmgkdpvsbhftkxiwraorzmq",
    319     "lucjygwupvsbhftkxiznaorzmq",
    320     "lucjhgedpvobhftkxiwncorzmq",
    321     "lucjygedpvsbhftkxiwnaohtmj",
    322     "lucjygedpvsbeftkfiwnaorzyq",
    323     "lucjygcdpvsbpftkhiwnaorzmq",
    324     "lucjygedpmsbhftkxiwnkouzmq",
    325     "oucjygedpvsbyftkximnaorzmq",
    326     "lucjcgedpvsbhftkxywnforzmq",
    327     "lfcjygedfvsbdftkxiwnaorzmq",
    328     "ducjygedevsbhfttxiwnaorzmq",
    329     "ldcjdgedpvsbhftkxiwnavrzmq",
    330     "lucjymedmvsbhqtkxiwnaorzmq",
    331     "lucjygedpvabhftkxiwnasrlmq",
    332     "lucjygefpvsbhftkxmwnaorkmq",
    333 };