[TASK] Solved part 1
This commit is contained in:
86
.idea/.gitignore
generated
vendored
Normal file
86
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# AWS User-specific
|
||||
.idea/**/aws.xml
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# Gradle and Maven with auto-import
|
||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||
# since they will be recreated, and may cause churn. Uncomment if using
|
||||
# auto-import.
|
||||
# .idea/artifacts
|
||||
# .idea/compiler.xml
|
||||
# .idea/jarRepositories.xml
|
||||
# .idea/modules.xml
|
||||
# .idea/*.iml
|
||||
# .idea/modules
|
||||
# *.iml
|
||||
# *.ipr
|
||||
|
||||
# CMake
|
||||
cmake-build-*/
|
||||
|
||||
# Mongo Explorer plugin
|
||||
.idea/**/mongoSettings.xml
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Cursive Clojure plugin
|
||||
.idea/replstate.xml
|
||||
|
||||
# SonarLint plugin
|
||||
.idea/sonarlint/
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
# Editor-based Rest Client
|
||||
.idea/httpRequests
|
||||
|
||||
# Android studio 3.1+ serialized cache file
|
||||
.idea/caches/build_file_checksums.ser
|
||||
9
.idea/advent-of-code-2023-go.iml
generated
Normal file
9
.idea/advent-of-code-2023-go.iml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="Go" enabled="true" />
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/advent-of-code-2023-go.iml" filepath="$PROJECT_DIR$/.idea/advent-of-code-2023-go.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
79
day01/day01.go
Normal file
79
day01/day01.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package day01
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func Part1(input string) uint {
|
||||
lines := strings.Split(input, "\n")
|
||||
sum := uint(0)
|
||||
for i := 0; i < len(lines); i++ {
|
||||
line := lines[i]
|
||||
for j := 0; j < len(line); j++ {
|
||||
if unicode.IsNumber(rune(line[j])) {
|
||||
sum = sum + uint(line[j]-'0')*10
|
||||
break
|
||||
}
|
||||
}
|
||||
for j := len(line) - 1; j >= 0; j-- {
|
||||
if unicode.IsNumber(rune(line[j])) {
|
||||
sum = sum + uint(line[j]-'0')
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sum
|
||||
}
|
||||
|
||||
func Part2(input string) uint {
|
||||
lines := strings.Split(input, "\n")
|
||||
sum := uint(0)
|
||||
for i := 0; i < len(lines); i++ {
|
||||
line := lines[i]
|
||||
for j := 0; j < len(line); j++ {
|
||||
n, found := writtenNumberAt(line, j)
|
||||
if found {
|
||||
sum = sum + n*10
|
||||
break
|
||||
}
|
||||
}
|
||||
for j := len(line) - 1; j >= 0; j-- {
|
||||
n, found := writtenNumberAt(line, j)
|
||||
if found {
|
||||
sum = sum + n
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sum
|
||||
}
|
||||
|
||||
func writtenNumberAt(line string, i int) (n uint, found bool) {
|
||||
|
||||
if unicode.IsNumber(rune(line[i])) {
|
||||
return uint(line[i] - '0'), true
|
||||
} else if strings.HasPrefix(line[i:], "one") {
|
||||
return 1, true
|
||||
} else if strings.HasPrefix(line[i:], "two") {
|
||||
return 2, true
|
||||
} else if strings.HasPrefix(line[i:], "three") {
|
||||
return 3, true
|
||||
} else if strings.HasPrefix(line[i:], "four") {
|
||||
return 4, true
|
||||
} else if strings.HasPrefix(line[i:], "five") {
|
||||
return 5, true
|
||||
} else if strings.HasPrefix(line[i:], "six") {
|
||||
return 6, true
|
||||
} else if strings.HasPrefix(line[i:], "seven") {
|
||||
return 7, true
|
||||
} else if strings.HasPrefix(line[i:], "eight") {
|
||||
return 8, true
|
||||
} else if strings.HasPrefix(line[i:], "nine") {
|
||||
return 9, true
|
||||
} else {
|
||||
return 0, false
|
||||
}
|
||||
}
|
||||
1000
input/day01.txt
Normal file
1000
input/day01.txt
Normal file
File diff suppressed because it is too large
Load Diff
4
input/day01_example.txt
Normal file
4
input/day01_example.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
1abc2
|
||||
pqr3stu8vwx
|
||||
a1b2c3d4e5f
|
||||
treb7uchet
|
||||
7
input/day01_example2.txt
Normal file
7
input/day01_example2.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
two1nine
|
||||
eightwothree
|
||||
abcone2threexyz
|
||||
xtwone3four
|
||||
4nineeightseven2
|
||||
zoneight234
|
||||
7pqrstsixteen
|
||||
27
main.go
Normal file
27
main.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"advent-of-code-2023-go/day01"
|
||||
"advent-of-code-2023-go/utils"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
d := day()
|
||||
input := utils.Readfile(d, false)
|
||||
switch d {
|
||||
case 1:
|
||||
println("Day 1, part 1: ", day01.Part1(input))
|
||||
println("Day 1, part 1: ", day01.Part2(input))
|
||||
}
|
||||
}
|
||||
|
||||
func day() int {
|
||||
latest := 1
|
||||
if len(os.Args) == 1 {
|
||||
return latest
|
||||
}
|
||||
day := utils.MustAtoi(os.Args[1])
|
||||
return day
|
||||
}
|
||||
38
utils/utils.go
Normal file
38
utils/utils.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func PanicOnErr(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func MustAtoi(s string) int {
|
||||
v, err := strconv.Atoi(s)
|
||||
PanicOnErr(err)
|
||||
return v
|
||||
}
|
||||
|
||||
func Readfile(day int, example bool) string {
|
||||
filename := fmt.Sprintf("input/day%02d.txt", day)
|
||||
if example {
|
||||
filename = fmt.Sprintf("input/day%02d_example.txt", day)
|
||||
}
|
||||
file, err := os.Open(filename)
|
||||
PanicOnErr(err)
|
||||
defer file.Close()
|
||||
|
||||
reader := bufio.NewReader(file)
|
||||
contents, err := io.ReadAll(reader)
|
||||
PanicOnErr(err)
|
||||
|
||||
return strings.TrimSuffix(string(contents), "\n")
|
||||
}
|
||||
Reference in New Issue
Block a user