2023 Day 1 Complete
This commit is contained in:
parent
ee4f4626f9
commit
d9aba1bd1f
1000
2023/day01/input
Normal file
1000
2023/day01/input
Normal file
File diff suppressed because it is too large
Load Diff
97
2023/day01/main.go
Normal file
97
2023/day01/main.go
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
inp := h.StdinToStringSlice()
|
||||||
|
part1(inp)
|
||||||
|
part2(inp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func part1(input []string) {
|
||||||
|
var value int
|
||||||
|
for _, i := range input {
|
||||||
|
value = value + getValue(i, false)
|
||||||
|
}
|
||||||
|
fmt.Println("# Part 1")
|
||||||
|
fmt.Println(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
var nums = []string{
|
||||||
|
"zero",
|
||||||
|
"one",
|
||||||
|
"two",
|
||||||
|
"three",
|
||||||
|
"four",
|
||||||
|
"five",
|
||||||
|
"six",
|
||||||
|
"seven",
|
||||||
|
"eight",
|
||||||
|
"nine",
|
||||||
|
}
|
||||||
|
|
||||||
|
func part2(input []string) {
|
||||||
|
var value int
|
||||||
|
for _, i := range input {
|
||||||
|
value = value + getValue(i, true)
|
||||||
|
}
|
||||||
|
fmt.Println("# Part 2")
|
||||||
|
fmt.Println(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getValue(wrk string, p2 bool) int {
|
||||||
|
return (getFirstValue(wrk, p2) * 10) + getLastValue(wrk, p2)
|
||||||
|
}
|
||||||
|
func getFirstValue(wrk string, p2 bool) int {
|
||||||
|
for j := 0; j < len(wrk); j++ {
|
||||||
|
if p2 {
|
||||||
|
v := numStringAt(wrk, j)
|
||||||
|
if v > -1 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if wrk[j]-'0' >= 0 && wrk[j]-'0' <= 9 {
|
||||||
|
return int(wrk[j] - '0')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
func getLastValue(wrk string, p2 bool) int {
|
||||||
|
for j := len(wrk) - 1; j >= 0; j-- {
|
||||||
|
if p2 {
|
||||||
|
v := numStringAt(wrk, j)
|
||||||
|
if v > -1 {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if wrk[j]-'0' >= 0 && wrk[j]-'0' <= 9 {
|
||||||
|
return int(wrk[j] - '0')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func numStringAt(haystack string, pos int) int {
|
||||||
|
for i := range nums {
|
||||||
|
if stringAt(haystack, pos, nums[i]) {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func stringAt(haystack string, pos int, needle string) bool {
|
||||||
|
if len(haystack) < pos+len(needle) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i := range needle {
|
||||||
|
if haystack[pos+i] != needle[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
86
2023/day01/problem
Normal file
86
2023/day01/problem
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
Advent of Code
|
||||||
|
|
||||||
|
br0xen (AoC++) 2*
|
||||||
|
|
||||||
|
--- Day 1: Trebuchet?! ---
|
||||||
|
|
||||||
|
Something is wrong with global snow production, and you've been selected to take a look. The Elves have even given you a map; on it, they've used stars to
|
||||||
|
mark the top fifty locations that are likely to be having problems.
|
||||||
|
|
||||||
|
You've been doing this long enough to know that to restore snow operations, you need to check 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!
|
||||||
|
|
||||||
|
You try to ask why they can't just use a weather machine ("not powerful enough") and where they're even sending you ("the sky") and why your map looks
|
||||||
|
mostly blank ("you sure ask a lot of questions") and hang on did you just say the sky ("of course, where do you think snow comes from") when you realize
|
||||||
|
that the Elves are already loading you into a trebuchet ("please hold still, we need to strap you in").
|
||||||
|
|
||||||
|
As they're making the final adjustments, they discover that their calibration document (your puzzle input) has been amended by a very young Elf who was
|
||||||
|
apparently just excited to show off her art skills. Consequently, the Elves are having trouble reading the values on the document.
|
||||||
|
|
||||||
|
The newly-improved calibration document consists of lines of text; each line originally contained a specific calibration value that the Elves now need to
|
||||||
|
recover. On each line, the calibration value can be found by combining the first digit and the last digit (in that order) to form a single two-digit number.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
1abc2
|
||||||
|
pqr3stu8vwx
|
||||||
|
a1b2c3d4e5f
|
||||||
|
treb7uchet
|
||||||
|
|
||||||
|
In this example, the calibration values of these four lines are 12, 38, 15, and 77. Adding these together produces 142.
|
||||||
|
|
||||||
|
Consider your entire calibration document. What is the sum of all of the calibration values?
|
||||||
|
|
||||||
|
Your puzzle answer was 55029.
|
||||||
|
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
Your calculation isn't quite right. It looks like some of the digits are actually spelled out with letters: one, two, three, four, five, six, seven, eight,
|
||||||
|
and nine also count as valid "digits".
|
||||||
|
|
||||||
|
Equipped with this new information, you now need to find the real first and last digit on each line. For example:
|
||||||
|
|
||||||
|
two1nine
|
||||||
|
eightwothree
|
||||||
|
abcone2threexyz
|
||||||
|
xtwone3four
|
||||||
|
4nineeightseven2
|
||||||
|
zoneight234
|
||||||
|
7pqrstsixteen
|
||||||
|
|
||||||
|
In this example, the calibration values are 29, 83, 13, 24, 42, 14, and 76. Adding these together produces 281.
|
||||||
|
|
||||||
|
What is the sum of all of the calibration values?
|
||||||
|
|
||||||
|
Your puzzle answer was 55686.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||||
|
|
||||||
|
At this point, you should return to your Advent calendar and try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can get your puzzle input.
|
||||||
|
|
||||||
|
References
|
||||||
|
|
||||||
|
Visible links
|
||||||
|
. https://adventofcode.com/
|
||||||
|
. https://adventofcode.com/2023/about
|
||||||
|
. https://adventofcode.com/2023/events
|
||||||
|
. https://teespring.com/stores/advent-of-code
|
||||||
|
. https://adventofcode.com/2023/settings
|
||||||
|
. https://adventofcode.com/2023/auth/logout
|
||||||
|
. Advent of Code Supporter
|
||||||
|
https://adventofcode.com/2023/support
|
||||||
|
. https://adventofcode.com/2023
|
||||||
|
. https://adventofcode.com/2023
|
||||||
|
. https://adventofcode.com/2023/support
|
||||||
|
. https://adventofcode.com/2023/sponsors
|
||||||
|
. https://adventofcode.com/2023/leaderboard
|
||||||
|
. https://adventofcode.com/2023/stats
|
||||||
|
. https://adventofcode.com/2023/sponsors
|
||||||
|
. https://adventofcode.com/2015/day/1
|
||||||
|
. https://en.wikipedia.org/wiki/Trebuchet
|
||||||
|
. https://adventofcode.com/2023
|
||||||
|
. https://adventofcode.com/2023/day/1/input
|
4
2023/day01/testinput
Normal file
4
2023/day01/testinput
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
1abc2
|
||||||
|
pqr3stu8vwx
|
||||||
|
a1b2c3d4e5f
|
||||||
|
treb7uchet
|
7
2023/day01/testinput2
Normal file
7
2023/day01/testinput2
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
two1nine
|
||||||
|
eightwothree
|
||||||
|
abcone2threexyz
|
||||||
|
xtwone3four
|
||||||
|
4nineeightseven2
|
||||||
|
zoneight234
|
||||||
|
7pqrstsixteen
|
Loading…
Reference in New Issue
Block a user