Added AOC 2021 day 01
This commit is contained in:
parent
700dcc17eb
commit
f844408e9c
@ -8,6 +8,7 @@ class AdventOfCode implements IWebsiteModule
|
|||||||
'2018' => [ 'url-aoc'=>'https://adventofcode.com/2018/day/', 'blog-id' => 23, 'github' => 'https://github.com/Mikescher/AdventOfCode2018', 'single_solution_file' => false ],
|
'2018' => [ 'url-aoc'=>'https://adventofcode.com/2018/day/', 'blog-id' => 23, 'github' => 'https://github.com/Mikescher/AdventOfCode2018', 'single_solution_file' => false ],
|
||||||
'2019' => [ 'url-aoc'=>'https://adventofcode.com/2019/day/', 'blog-id' => 24, 'github' => 'https://github.com/Mikescher/AdventOfCode2019', 'single_solution_file' => false ],
|
'2019' => [ 'url-aoc'=>'https://adventofcode.com/2019/day/', 'blog-id' => 24, 'github' => 'https://github.com/Mikescher/AdventOfCode2019', 'single_solution_file' => false ],
|
||||||
'2020' => [ 'url-aoc'=>'https://adventofcode.com/2020/day/', 'blog-id' => 26, 'github' => 'https://github.com/Mikescher/AdventOfCode2020', 'single_solution_file' => true ],
|
'2020' => [ 'url-aoc'=>'https://adventofcode.com/2020/day/', 'blog-id' => 26, 'github' => 'https://github.com/Mikescher/AdventOfCode2020', 'single_solution_file' => true ],
|
||||||
|
'2021' => [ 'url-aoc'=>'https://adventofcode.com/2021/day/', 'blog-id' => 27, 'github' => 'https://github.com/Mikescher/AdventOfCode2021', 'single_solution_file' => true ],
|
||||||
];
|
];
|
||||||
|
|
||||||
const LANGUAGES =
|
const LANGUAGES =
|
||||||
|
81
www/statics/aoc/2021/01_challenge.txt
Normal file
81
www/statics/aoc/2021/01_challenge.txt
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
--- Day 1: Sonar Sweep ---
|
||||||
|
|
||||||
|
You're minding your own business on a ship at sea when the overboard alarm goes off! You rush to see if you can help. Apparently, one of the Elves tripped and accidentally sent the sleigh keys flying into the ocean!
|
||||||
|
|
||||||
|
Before you know it, you're inside a submarine the Elves keep ready for situations like this. It's covered in Christmas lights (because of course it is), and it even has an experimental antenna that should be able to track the keys if you can boost its signal strength high enough; there's a little meter that indicates the antenna's signal strength by displaying 0-50 stars.
|
||||||
|
|
||||||
|
Your instincts tell you that in order to save Christmas, you'll need to get all fifty stars by December 25th.
|
||||||
|
|
||||||
|
Collect stars by solving puzzles. Two puzzles will be made available on each day in the Advent calendar; the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck!
|
||||||
|
|
||||||
|
As the submarine drops below the surface of the ocean, it automatically performs a sonar sweep of the nearby sea floor. On a small screen, the sonar sweep report (your puzzle input) appears: each line is a measurement of the sea floor depth as the sweep looks further and further away from the submarine.
|
||||||
|
|
||||||
|
For example, suppose you had the following report:
|
||||||
|
|
||||||
|
199
|
||||||
|
200
|
||||||
|
208
|
||||||
|
210
|
||||||
|
200
|
||||||
|
207
|
||||||
|
240
|
||||||
|
269
|
||||||
|
260
|
||||||
|
263
|
||||||
|
|
||||||
|
This report indicates that, scanning outward from the submarine, the sonar sweep found depths of 199, 200, 208, 210, and so on.
|
||||||
|
|
||||||
|
The first order of business is to figure out how quickly the depth increases, just so you know what you're dealing with - you never know if the keys will get carried into deeper water by an ocean current or a fish or something.
|
||||||
|
|
||||||
|
To do this, count the number of times a depth measurement increases from the previous measurement. (There is no measurement before the first measurement.) In the example above, the changes are as follows:
|
||||||
|
|
||||||
|
199 (N/A - no previous measurement)
|
||||||
|
200 (increased)
|
||||||
|
208 (increased)
|
||||||
|
210 (increased)
|
||||||
|
200 (decreased)
|
||||||
|
207 (increased)
|
||||||
|
240 (increased)
|
||||||
|
269 (increased)
|
||||||
|
260 (decreased)
|
||||||
|
263 (increased)
|
||||||
|
|
||||||
|
In this example, there are 7 measurements that are larger than the previous measurement.
|
||||||
|
|
||||||
|
How many measurements are larger than the previous measurement?
|
||||||
|
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
Considering every single measurement isn't as useful as you expected: there's just too much noise in the data.
|
||||||
|
|
||||||
|
Instead, consider sums of a three-measurement sliding window. Again considering the above example:
|
||||||
|
|
||||||
|
199 A
|
||||||
|
200 A B
|
||||||
|
208 A B C
|
||||||
|
210 B C D
|
||||||
|
200 E C D
|
||||||
|
207 E F D
|
||||||
|
240 E F G
|
||||||
|
269 F G H
|
||||||
|
260 G H
|
||||||
|
263 H
|
||||||
|
|
||||||
|
Start by comparing the first and second three-measurement windows. The measurements in the first window are marked A (199, 200, 208); their sum is 199 + 200 + 208 = 607. The second window is marked B (200, 208, 210); its sum is 618. The sum of measurements in the second window is larger than the sum of the first, so this first comparison increased.
|
||||||
|
|
||||||
|
Your goal now is to count the number of times the sum of measurements in this sliding window increases from the previous sum. So, compare A with B, then compare B with C, then C with D, and so on. Stop when there aren't enough measurements left to create a new three-measurement sum.
|
||||||
|
|
||||||
|
In the above example, the sum of each three-measurement window is as follows:
|
||||||
|
|
||||||
|
A: 607 (N/A - no previous sum)
|
||||||
|
B: 618 (increased)
|
||||||
|
C: 618 (no change)
|
||||||
|
D: 617 (decreased)
|
||||||
|
E: 647 (increased)
|
||||||
|
F: 716 (increased)
|
||||||
|
G: 769 (increased)
|
||||||
|
H: 792 (increased)
|
||||||
|
|
||||||
|
In this example, there are 5 sums that are larger than the previous sum.
|
||||||
|
|
||||||
|
Consider sums of a three-measurement sliding window. How many sums are larger than the previous sum?
|
2000
www/statics/aoc/2021/01_input.txt
Normal file
2000
www/statics/aoc/2021/01_input.txt
Normal file
File diff suppressed because it is too large
Load Diff
61
www/statics/aoc/2021/01_solution.go
Normal file
61
www/statics/aoc/2021/01_solution.go
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
package advent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"AdventOfCode2021/util"
|
||||||
|
"math"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Day1Part1(ctx *util.AOCContext) (string, error) {
|
||||||
|
|
||||||
|
incCount := 0
|
||||||
|
|
||||||
|
val := int64(math.MaxInt64)
|
||||||
|
for _, v := range ctx.InputLines() {
|
||||||
|
num, err := strconv.ParseInt(v, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if val < num {
|
||||||
|
incCount++
|
||||||
|
}
|
||||||
|
val = num
|
||||||
|
}
|
||||||
|
|
||||||
|
return strconv.Itoa(incCount), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Day1Part2(ctx *util.AOCContext) (string, error) {
|
||||||
|
|
||||||
|
incCount := 0
|
||||||
|
|
||||||
|
input := ctx.InputLines()
|
||||||
|
|
||||||
|
prev := int64(math.MaxInt64)
|
||||||
|
|
||||||
|
sw0 := int64(0)
|
||||||
|
sw1 := int64(0)
|
||||||
|
sw2 := int64(0)
|
||||||
|
|
||||||
|
for i, v := range input {
|
||||||
|
num, err := strconv.ParseInt(v, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
sw0 = sw1
|
||||||
|
sw1 = sw2
|
||||||
|
sw2 = num
|
||||||
|
|
||||||
|
val := sw0 + sw1 + sw2
|
||||||
|
|
||||||
|
if i > 2 && prev < val {
|
||||||
|
incCount++
|
||||||
|
//fmt.Printf("%d < %d + %d + %d\n", prev, sw0, sw1, sw2)
|
||||||
|
}
|
||||||
|
prev = val
|
||||||
|
}
|
||||||
|
|
||||||
|
return strconv.Itoa(incCount), nil
|
||||||
|
}
|
@ -99,4 +99,8 @@ return
|
|||||||
['day' => 24, 'parts' => 2, 'title' => 'Lobby Layout', 'language' => 'rust', 'solutions' => ['459', '4150'] ],
|
['day' => 24, 'parts' => 2, 'title' => 'Lobby Layout', 'language' => 'rust', 'solutions' => ['459', '4150'] ],
|
||||||
['day' => 25, 'parts' => 1, 'title' => 'Combo Breaker', 'language' => 'rust', 'solutions' => ['3217885'] ],
|
['day' => 25, 'parts' => 1, 'title' => 'Combo Breaker', 'language' => 'rust', 'solutions' => ['3217885'] ],
|
||||||
],
|
],
|
||||||
|
'2021' =>
|
||||||
|
[
|
||||||
|
['day' => 1, 'parts' => 2, 'title' => 'Sonar Sweep', 'language' => 'go', 'solutions' => ['1715', '1739'] ],
|
||||||
|
]
|
||||||
];
|
];
|
||||||
|
@ -28,5 +28,5 @@ return
|
|||||||
[ 'id' => 24, 'date' => '2019-12-01', 'visible' => true, 'title' => 'Advent of Code 2019 - Typescript', 'fragment' => 'aoc2019.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2019'] ],
|
[ 'id' => 24, 'date' => '2019-12-01', 'visible' => true, 'title' => 'Advent of Code 2019 - Typescript', 'fragment' => 'aoc2019.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2019'] ],
|
||||||
[ 'id' => 25, 'date' => '2020-01-09', 'visible' => true, 'title' => 'Advent of Code 2017 - Python3', 'fragment' => 'aoc2017.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2017'] ],
|
[ 'id' => 25, 'date' => '2020-01-09', 'visible' => true, 'title' => 'Advent of Code 2017 - Python3', 'fragment' => 'aoc2017.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2017'] ],
|
||||||
[ 'id' => 26, 'date' => '2020-12-01', 'visible' => true, 'title' => 'Advent of Code 2020 - Rust', 'fragment' => 'aoc2020.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2020'] ],
|
[ 'id' => 26, 'date' => '2020-12-01', 'visible' => true, 'title' => 'Advent of Code 2020 - Rust', 'fragment' => 'aoc2020.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2020'] ],
|
||||||
[ 'id' => 27, 'date' => '2021-11-25', 'visible' => false, 'title' => 'Advent of Code 2021 - Go', 'fragment' => 'aoc2021.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2021'] ],
|
[ 'id' => 27, 'date' => '2021-11-25', 'visible' => true, 'title' => 'Advent of Code 2021 - Go', 'fragment' => 'aoc2021.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2021'] ],
|
||||||
];
|
];
|
Loading…
Reference in New Issue
Block a user