diff options
Diffstat (limited to 'src/16/part1')
| -rw-r--r-- | src/16/part1 | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/16/part1 b/src/16/part1 new file mode 100644 index 0000000..7de3ae1 --- /dev/null +++ b/src/16/part1 @@ -0,0 +1,67 @@ +--- Day 16: Ticket Translation --- + +As you're walking to yet another connecting flight, you realize that one of the legs of your +re-routed trip coming up is on a high-speed train. However, the train ticket you were given is in a +language you don't understand. You should probably figure out what it says before you get to the +train station after the next flight. + +Unfortunately, you can't actually [1m[37mread[0m the words on the ticket. You can, however, read +the numbers, and so you figure out [1m[37mthe fields these tickets must have[0m and [1m[37mthe +valid ranges[0m for values in those fields. + +You collect the [1m[37mrules for ticket fields[0m, the [1m[37mnumbers on your ticket[0m, and +the [1m[37mnumbers on other nearby tickets[0m for the same train service (via the airport +security cameras) together into a single document you can reference (your puzzle input). + +The [1m[37mrules for ticket fields[0m specify a list of fields that exist [1m[37msomewhere[0m +on the ticket and the [1m[37mvalid ranges of values[0m for each field. For example, a rule like +class: 1-3 or 5-7 means that one of the fields in every ticket is named class and can be any value +in the ranges 1-3 or 5-7 (inclusive, such that 3 and 5 are both valid in this field, but 4 is not). + +Each ticket is represented by a single line of comma-separated values. The values are the numbers on +the ticket in the order they appear; every ticket has the same format. For example, consider this +ticket: + +.--------------------------------------------------------. +| ????: 101 ?????: 102 ??????????: 103 ???: 104 | +| | +| ??: 301 ??: 302 ???????: 303 ??????? | +| ??: 401 ??: 402 ???? ????: 403 ????????? | +'--------------------------------------------------------' + +Here, ? represents text in a language you don't understand. This ticket might be represented as +101,102,103,104,301,302,303,401,402,403; of course, the actual train tickets you're looking at are +[1m[37mmuch[0m more complicated. In any case, you've extracted just the numbers in such a way +that the first number is always the same specific field, the second number is always a different +specific field, and so on - you just don't know what each position actually means! + +Start by determining which tickets are [1m[37mcompletely invalid[0m; these are tickets that +contain values which [1m[37maren't valid for any field[0m. Ignore [1m[37myour ticket[0m for +now. + +For example, suppose you have the following notes: + +class: 1-3 or 5-7 +row: 6-11 or 33-44 +seat: 13-40 or 45-50 + +your ticket: +7,1,14 + +nearby tickets: +7,3,47 +40,[1m[37m4[0m,50 +[1m[37m55[0m,2,20 +38,6,[1m[37m12[0m + +It doesn't matter which position corresponds to which field; you can identify invalid +[1m[37mnearby tickets[0m by considering only whether tickets contain [1m[37mvalues that are not +valid for any field[0m. In this example, the values on the first [1m[37mnearby ticket[0m are all +valid for at least one field. This is not true of the other three [1m[37mnearby tickets[0m: the +values 4, 55, and 12 are are not valid for any field. Adding together all of the invalid values +produces your [1m[37mticket scanning error rate[0m: 4 + 55 + 12 = [1m[37m71[0m. + +Consider the validity of the [1m[37mnearby tickets[0m you scanned. [1m[37mWhat is your ticket +scanning error rate?[0m + + |
