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

3 years ago
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?_