aoc-2020-zig

Advent of Code 2020 Solutions in Zig
git clone https://git.sinitax.com/sinitax/aoc-2020-zig
Log | Files | Refs | README | sfeed.txt

part1 (3441B)


      1--- Day 16: Ticket Translation ---
      2
      3As you're walking to yet another connecting flight, you realize that one of the legs of your
      4re-routed trip coming up is on a high-speed train. However, the train ticket you were given is in a
      5language you don't understand. You should probably figure out what it says before you get to the
      6train station after the next flight.
      7
      8Unfortunately, you can't actually read the words on the ticket. You can, however, read
      9the numbers, and so you figure out the fields these tickets must have and the
     10valid ranges for values in those fields.
     11
     12You collect the rules for ticket fields, the numbers on your ticket, and
     13the numbers on other nearby tickets for the same train service (via the airport
     14security cameras) together into a single document you can reference (your puzzle input).
     15
     16The rules for ticket fields specify a list of fields that exist somewhere
     17on the ticket and the valid ranges of values for each field. For example, a rule like
     18class: 1-3 or 5-7 means that one of the fields in every ticket is named class and can be any value
     19in the ranges 1-3 or 5-7 (inclusive, such that 3 and 5 are both valid in this field, but 4 is not).
     20
     21Each ticket is represented by a single line of comma-separated values. The values are the numbers on
     22the ticket in the order they appear; every ticket has the same format. For example, consider this
     23ticket:
     24
     25.--------------------------------------------------------.
     26| ????: 101    ?????: 102   ??????????: 103     ???: 104 |
     27|                                                        |
     28| ??: 301  ??: 302             ???????: 303      ??????? |
     29| ??: 401  ??: 402           ???? ????: 403    ????????? |
     30'--------------------------------------------------------'
     31
     32Here, ? represents text in a language you don't understand. This ticket might be represented as
     33101,102,103,104,301,302,303,401,402,403; of course, the actual train tickets you're looking at are
     34much more complicated. In any case, you've extracted just the numbers in such a way
     35that the first number is always the same specific field, the second number is always a different
     36specific field, and so on - you just don't know what each position actually means!
     37
     38Start by determining which tickets are completely invalid; these are tickets that
     39contain values which aren't valid for any field. Ignore your ticket for
     40now.
     41
     42For example, suppose you have the following notes:
     43
     44class: 1-3 or 5-7
     45row: 6-11 or 33-44
     46seat: 13-40 or 45-50
     47
     48your ticket:
     497,1,14
     50
     51nearby tickets:
     527,3,47
     5340,4,50
     5455,2,20
     5538,6,12
     56
     57It doesn't matter which position corresponds to which field; you can identify invalid
     58nearby tickets by considering only whether tickets contain values that are not
     59valid for any field. In this example, the values on the first nearby ticket are all
     60valid for at least one field. This is not true of the other three nearby tickets: the
     61values 4, 55, and 12 are are not valid for any field. Adding together all of the invalid values
     62produces your ticket scanning error rate: 4 + 55 + 12 = 71.
     63
     64Consider the validity of the nearby tickets you scanned. What is your ticket
     65scanning error rate?
     66
     67