Description Usage Arguments Details Value Examples
1 2 3 4 5 |
x |
Character vector with the train data. |
example |
which example data to use. Defaults to 1. |
Part One
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 read the words on the ticket]title="This actually happened to me once, but I solved it by just asking someone.". You can, however, read the numbers, and so you figure out the fields these tickets must have and the valid ranges for values in those fields.
You collect the rules for ticket fields, the numbers on your ticket, and the numbers on other nearby tickets for the same train service (via the airport security cameras) together into a single document you can reference (your puzzle input).
The rules for ticket fields specify a list of fields that exist
somewhere on the ticket and the valid ranges of values 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:
1 2 3 4 5 6 | .--------------------------------------------------------.
| ????: 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 much 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 completely invalid; these are tickets that contain values which aren\'t valid for any field. Ignore your ticket for now.
For example, suppose you have the following notes:
1 2 3 4 5 6 7 8 9 10 11 12 |
It doesn\'t matter which position corresponds to which field; you can
identify invalid nearby tickets by considering only whether tickets
contain values that are not valid for any field. In this example, the
values on the first nearby ticket are all valid for at least one
field. This is not true of the other three nearby tickets: the values
4
, 55
, and 12
are are not valid for any field. Adding together all
of the invalid values produces your ticket scanning error rate:
4 + 55 + 12
= 71
.
Consider the validity of the nearby tickets you scanned. What is your ticket scanning error rate?
Part Two
Now that you've identified which tickets contain invalid values, discard those tickets entirely. Use the remaining valid tickets to determine which field is which.
Using the valid ranges for each field, determine what order the fields
appear on the tickets. The order is consistent between all tickets: if
seat
is the third field, it is the third field on every ticket,
including your ticket.
For example, suppose you have the following notes:
1 2 3 4 5 6 7 8 9 10 11 |
Based on the nearby tickets in the above example, the first position
must be row
, the second position must be class
, and the third
position must be seat
; you can conclude that in your ticket, class
is 12
, row
is 11
, and seat
is 13
.
Once you work out which field is which, look for the six fields on your
ticket that start with the word departure
. What do you get if you
multiply those six values together?
For Part One, find_invalid_train_ticket_values(x)
returns a list
with the problem data which includes a field for the numbers from invalid
tickets and list of tickets with the invalid ones removed. For Part Two,
solve_train_ticket_fields(x)
solves the train tickets, returning a list
with a dataframe of the ticket field constraints and a dataframe of train
tickets with the solvable fields set as column names. The first row of the
tickets dataframe is the player's ticket.
1 2 |
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.