First day
This commit is contained in:
parent
33b14154cf
commit
aff92c4624
1000
cmd/O1/input.txt
Normal file
1000
cmd/O1/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -2,15 +2,30 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
utils "git.anthonygueguen.fr/g3po/aoc2023/internal"
|
||||
day01 "git.anthonygueguen.fr/g3po/aoc2023/internal/01"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("Opening file...")
|
||||
file, err := os.OpenFile("./input.txt", os.O_RDONLY, 0644)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
content := utils.Init()
|
||||
|
||||
fmt.Println("Part 1")
|
||||
digits := day01.GetDigits(content)
|
||||
sum := 0
|
||||
for _, v := range digits {
|
||||
sum += v
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
fmt.Printf("Result: %d\n", sum)
|
||||
fmt.Println("Part 2")
|
||||
|
||||
content = day01.WordToNum(content)
|
||||
digits = day01.GetDigits(content)
|
||||
|
||||
sum = 0
|
||||
for _, v := range digits {
|
||||
sum += v
|
||||
}
|
||||
fmt.Printf("Result: %d", sum)
|
||||
}
|
||||
|
||||
56
internal/01/01.go
Normal file
56
internal/01/01.go
Normal file
@ -0,0 +1,56 @@
|
||||
package day01
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
utils "git.anthonygueguen.fr/g3po/aoc2023/internal"
|
||||
)
|
||||
|
||||
var wordNum = map[string]string{
|
||||
"one": "o1e",
|
||||
"two": "t2o",
|
||||
"three": "t3e",
|
||||
"four": "f4r",
|
||||
"five": "f5e",
|
||||
"six": "s6x",
|
||||
"seven": "s7n",
|
||||
"eight": "e8t",
|
||||
"nine": "n9e",
|
||||
}
|
||||
|
||||
func GetDigits(content []string) []int {
|
||||
var digits []int
|
||||
for _, line := range content {
|
||||
d_str := ""
|
||||
for _, c := range line {
|
||||
if unicode.IsDigit(c) {
|
||||
d_str = d_str + string(c)
|
||||
break
|
||||
}
|
||||
}
|
||||
for i := len(line) - 1; i >= 0; i-- {
|
||||
if unicode.IsDigit(rune(line[i])) {
|
||||
d_str = d_str + string(line[i])
|
||||
break
|
||||
}
|
||||
}
|
||||
utils.Must[int](strconv.Atoi(d_str))
|
||||
digits = append(digits, utils.Must[int](strconv.Atoi(d_str)))
|
||||
}
|
||||
|
||||
return digits
|
||||
}
|
||||
|
||||
func WordToNum(content []string) []string {
|
||||
var rContent []string
|
||||
for _, line := range content {
|
||||
str := line
|
||||
for k, v := range wordNum {
|
||||
str = strings.ReplaceAll(str, k, v)
|
||||
}
|
||||
rContent = append(rContent, str)
|
||||
}
|
||||
return rContent
|
||||
}
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Must[T any](obj T, err error) T {
|
||||
@ -13,7 +14,9 @@ func Must[T any](obj T, err error) T {
|
||||
return obj
|
||||
}
|
||||
|
||||
func Init() []byte {
|
||||
func Init() []string {
|
||||
fmt.Println("Opening file...")
|
||||
return Must(os.ReadFile("./input.txt"))
|
||||
bytes := Must(os.ReadFile("./input.txt"))
|
||||
content := strings.Split(string(bytes), "\n")
|
||||
return content[:len(content)-1]
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user