20223 day1

This commit is contained in:
2023-12-01 01:40:09 +00:00
parent 2843713a0b
commit 87786ac5b1
11 changed files with 1738 additions and 0 deletions

116
2023/go/day01/day01.go Normal file
View File

@@ -0,0 +1,116 @@
package day01
import (
"adventofcode2023/utils"
"fmt"
"strings"
)
func Part1(input string) int {
num := 0
lines := strings.Split(input, "\n")
for _, line := range lines {
for i:=0;i<len(line);i++ {
if line[i] >= '0' && line[i] <= '9' {
num += utils.MustAtoi(string(line[i])) * 10
break;
}
}
for i:=len(line) - 1;i>=0;i-- {
if line[i] >= '0' && line[i] <= '9' {
num += utils.MustAtoi(string(line[i]))
break;
}
}
}
return num
}
func Part2(input string) int {
digits := make(map[string]string)
digits["one"] = "1"
digits["two"] = "2"
digits["three"] = "3"
digits["four"] = "4"
digits["five"] = "5"
digits["six"] = "6"
digits["seven"] = "7"
digits["eight"] = "8"
digits["nine"] = "9"
digits_backwards := make(map[string]string)
digits_backwards["eno"] = "1"
digits_backwards["owt"] = "2"
digits_backwards["eerht"] = "3"
digits_backwards["ruof"] = "4"
digits_backwards["evif"] = "5"
digits_backwards["xis"] = "6"
digits_backwards["neves"] = "7"
digits_backwards["thgie"] = "8"
digits_backwards["enin"] = "9"
num := 0
found := false
lines := strings.Split(input, "\n")
for _, line := range lines {
for i:=0;i<len(line);i++ {
if line[i] >= '0' && line[i] <= '9' {
fmt.Println("first digit:", string(line[i]))
num += utils.MustAtoi(string(line[i])) * 10
found = true
}
if found { break;}
for key := range digits {
if strings.HasPrefix(line[i:], key) {
fmt.Println("first digit:", digits[key])
num += utils.MustAtoi(digits[key]) * 10
found = true
}
if found { break;}
}
}
found = false
reverse := reverseString(line)
for i:=0;i<len(reverse);i++ {
if reverse[i] >= '0' && reverse[i] <= '9' {
fmt.Println("last digit:", string(reverse[i]))
num += utils.MustAtoi(string(reverse[i]))
found = true
}
if found { break;}
for key := range digits_backwards {
if strings.HasPrefix(reverse[i:], key) {
fmt.Println("last digit:", digits_backwards[key])
num += utils.MustAtoi(digits_backwards[key])
found = true
}
if found { break;}
}
}
found = false
}
return num
}
func reverseString(input string) string {
// Convert the string to a rune slice
runes := []rune(input)
// Get the length of the rune slice
length := len(runes)
// Reverse the order of runes
for i, j := 0, length-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
// Convert the reversed rune slice back to a string
reversedString := string(runes)
return reversedString
}

View File

@@ -0,0 +1,28 @@
package day01
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestPart1(t *testing.T) {
r := Part1(
`1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet`)
require.Equal(t, 142, r)
}
func TestPart2(t *testing.T) {
r := Part2(
`two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen`)
require.Equal(t, 281, r)
}

1000
2023/go/day01/input.txt Normal file

File diff suppressed because it is too large Load Diff