You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.3 KiB
Markdown
89 lines
3.3 KiB
Markdown
https://adventofcode.com/2021/day/10
|
|
|
|
## \--- Day 10: Syntax Scoring ---
|
|
|
|
You ask the submarine to determine the best route out of the deep-sea cave,
|
|
but it only replies:
|
|
|
|
[code]
|
|
|
|
Syntax error in navigation subsystem on line: all of them
|
|
[/code]
|
|
|
|
_All of them?!_ The damage is worse than you thought. You bring up a copy of
|
|
the navigation subsystem (your puzzle input).
|
|
|
|
The navigation subsystem syntax is made of several lines containing _chunks_.
|
|
There are one or more chunks on each line, and chunks contain zero or more
|
|
other chunks. Adjacent chunks are not separated by any delimiter; if one chunk
|
|
stops, the next chunk (if any) can immediately start. Every chunk must _open_
|
|
and _close_ with one of four legal pairs of matching characters:
|
|
|
|
* If a chunk opens with `(`, it must close with `)`.
|
|
* If a chunk opens with `[`, it must close with `]`.
|
|
* If a chunk opens with `{`, it must close with `}`.
|
|
* If a chunk opens with `<`, it must close with `>`.
|
|
|
|
So, `()` is a legal chunk that contains no other chunks, as is `[]`. More
|
|
complex but valid chunks include `([])`, `{()()()}`, `<([{}])>`,
|
|
`[<>({}){}[([])<>]]`, and even `(((((((((())))))))))`.
|
|
|
|
Some lines are _incomplete_ , but others are _corrupted_. Find and discard the
|
|
corrupted lines first.
|
|
|
|
A corrupted line is one where a chunk _closes with the wrong character_ \-
|
|
that is, where the characters it opens and closes with do not form one of the
|
|
four legal pairs listed above.
|
|
|
|
Examples of corrupted chunks include `(]`, `{()()()>`, `(((()))}`, and
|
|
`<([]){()}[{}])`. Such a chunk can appear anywhere within a line, and its
|
|
presence causes the whole line to be considered corrupted.
|
|
|
|
For example, consider the following navigation subsystem:
|
|
|
|
[code]
|
|
|
|
[({(<(())[]>[[{[]{<()<>>
|
|
[(()[<>])]({[<{<<[]>>(
|
|
{([(<{}[<>[]}>{[]{[(<()>
|
|
(((({<>}<{<{<>}{[]{[]{}
|
|
[[<[([]))<([[{}[[()]]]
|
|
[{[{({}]{}}([{[{{{}}([]
|
|
{<[[]]>}<{[{[{[]{()[[[]
|
|
[<(<(<(<{}))><([]([]()
|
|
<{([([[(<>()){}]>(<<{{
|
|
<{([{{}}[<[[[<>{}]]]>[]]
|
|
|
|
[/code]
|
|
|
|
Some of the lines aren't corrupted, just incomplete; you can ignore these
|
|
lines for now. The remaining five lines are corrupted:
|
|
|
|
* `{([(<{}[<>[]}>{[]{[(<()>` \- Expected `]`, but found `}` instead.
|
|
* `[[<[([]))<([[{}[[()]]]` \- Expected `]`, but found `)` instead.
|
|
* `[{[{({}]{}}([{[{{{}}([]` \- Expected `)`, but found `]` instead.
|
|
* `[<(<(<(<{}))><([]([]()` \- Expected `>`, but found `)` instead.
|
|
* `<{([([[(<>()){}]>(<<{{` \- Expected `]`, but found `>` instead.
|
|
|
|
Stop at the first incorrect closing character on each corrupted line.
|
|
|
|
Did you know that syntax checkers actually have contests to see who can get
|
|
the high score for syntax errors in a file? It's true! To calculate the syntax
|
|
error score for a line, take the _first illegal character_ on the line and
|
|
look it up in the following table:
|
|
|
|
* `)`: `3` points.
|
|
* `]`: `57` points.
|
|
* `}`: `1197` points.
|
|
* `>`: `25137` points.
|
|
|
|
In the above example, an illegal `)` was found twice (`2*3 = _6_` points), an
|
|
illegal `]` was found once (` _57_` points), an illegal `}` was found once (`
|
|
_1197_` points), and an illegal `>` was found once (` _25137_` points). So,
|
|
the total syntax error score for this file is `6+57+1197+25137 = _26397_`
|
|
points!
|
|
|
|
Find the first illegal character in each corrupted line of the navigation
|
|
subsystem. _What is the total syntax error score for those errors?_
|
|
|