prepare for day 2
This commit is contained in:
136
.gitignore
vendored
Normal file
136
.gitignore
vendored
Normal file
@@ -0,0 +1,136 @@
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/goland+all,linux,windows
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=goland+all,linux,windows
|
||||
|
||||
### GoLand+all ###
|
||||
# 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
|
||||
|
||||
### GoLand+all Patch ###
|
||||
# Ignore everything but code style settings and run configurations
|
||||
# that are supposed to be shared within teams.
|
||||
|
||||
.idea/*
|
||||
|
||||
!.idea/codeStyles
|
||||
!.idea/runConfigurations
|
||||
|
||||
### Linux ###
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# KDE directory preferences
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
### Windows ###
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
Thumbs.db:encryptable
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/goland+all,linux,windows
|
||||
|
||||
adventofcode
|
||||
|
92
02/main.go
Normal file
92
02/main.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
inputFile = flag.String("input", "input.txt", "input filename")
|
||||
nRegex = regexp.MustCompile(`(?m)\d`)
|
||||
reMap = map[string]string{
|
||||
"one": "1",
|
||||
"two": "2",
|
||||
"three": "3",
|
||||
"four": "4",
|
||||
"five": "5",
|
||||
"six": "6",
|
||||
"seven": "7",
|
||||
"eight": "8",
|
||||
"nine": "9",
|
||||
}
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
input, err := os.ReadFile(*inputFile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
var sum int
|
||||
for _, line := range strings.Split(string(input), "\n") {
|
||||
if strings.TrimSpace(line) == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
// forward-scan for spelled digits
|
||||
var forwardReplacedLine, backwardReplacedLine string
|
||||
for i := 0; i < len(line); i++ {
|
||||
forwardReplacedLine += string(line[i])
|
||||
|
||||
// replace all potential spelled out digits by their non-word counterpart (e.g. "one" -> "1")
|
||||
for key, val := range reMap {
|
||||
forwardReplacedLine = strings.ReplaceAll(forwardReplacedLine, key, val)
|
||||
}
|
||||
}
|
||||
fmt.Println(forwardReplacedLine)
|
||||
|
||||
// backward-scan for spelled digits
|
||||
for i := len(line) - 1; i >= 0; i-- {
|
||||
if i == len(line)-1 {
|
||||
backwardReplacedLine = string(line[i])
|
||||
} else {
|
||||
backwardReplacedLine = string(line[i]) + backwardReplacedLine
|
||||
}
|
||||
|
||||
// replace all potential spelled out digits by their non-word counterpart (e.g. "one" -> "1")
|
||||
for key, val := range reMap {
|
||||
backwardReplacedLine = strings.ReplaceAll(backwardReplacedLine, key, val)
|
||||
}
|
||||
}
|
||||
fmt.Println(backwardReplacedLine)
|
||||
|
||||
// find single digits in forward-replaced line
|
||||
firstMatch := nRegex.FindAllStringSubmatch(forwardReplacedLine, -1)
|
||||
|
||||
// find single digits in backward-replaced line
|
||||
lastMatch := nRegex.FindAllStringSubmatch(backwardReplacedLine, -1)
|
||||
|
||||
// get first matchgroup, first match (aka first digit in forwardReplacedLine)
|
||||
first := firstMatch[0][0]
|
||||
|
||||
// get last matchgroup, first match (aka last digit in backwardReplacedLine)
|
||||
last := lastMatch[len(lastMatch)-1:][0][0]
|
||||
|
||||
fmt.Println(first + last)
|
||||
|
||||
// concatenate digits and convert the resulting string to int
|
||||
asInt, err := strconv.Atoi(first + last)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
sum += asInt
|
||||
}
|
||||
|
||||
fmt.Println(sum)
|
||||
}
|
Reference in New Issue
Block a user