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