Add day 2 solution.

This commit is contained in:
Anna Rose 2018-12-02 00:40:11 -05:00
parent 16b30b2a75
commit 3ca1a1068b
No known key found for this signature in database
GPG Key ID: 8D9ACA841015C59A
3 changed files with 98 additions and 0 deletions

42
2018/day02-1.go Normal file
View File

@ -0,0 +1,42 @@
package main
import (
"fmt"
"internal/util"
)
func main() {
lines := util.ReadInput()
twos := 0
threes := 0
for _, id := range lines {
// here we build up a map of letters and counts
letters := make(map[byte]int)
for i := 0; i < len(id); i++ {
letters[id[i]] += 1
}
// these are the values to add to the 'twos' and 'threes'
// count, respectively. They will only ever be 0 or 1.
add2 := 0
add3 := 0
// now we iterate over the map of letter->count, and set
// add2 and add3 if we find any values equal to 2 or 3
for _, v := range letters {
if v == 2 {
add2 = 1
}
if v == 3 {
add3 = 1
}
}
twos += add2
threes += add3
}
fmt.Println(twos * threes)
}

32
2018/day02-2.go Normal file
View File

@ -0,0 +1,32 @@
package main
import (
"fmt"
"internal/util"
)
func main() {
ids := util.ReadInput()
for _, box1 := range ids {
for _, box2 := range ids {
diffIndex := -1 // diffIndex doubles as the letter to remove and a 'found' flag
for i := range box1 {
if box1[i] != box2[i] {
if diffIndex != -1 {
// If we reach here, we've detected more than one error, so we set
// diffIndex back to -1 here to avoid the conditional below this loop.
diffIndex = -1
break
}
diffIndex = i
}
}
if diffIndex != -1 {
fmt.Printf("%s%s\n", box1[0:diffIndex], box1[diffIndex+1:])
return
}
}
}
}

View File

@ -0,0 +1,24 @@
package util
import (
"bufio"
"os"
)
// ReadInput isn't here to make friends. It is highly specific to this domain.
// It assumes the first argument on the command-line is a file with input. It
// returns an array of strings containing the lines of that file.
func ReadInput() []string {
file, err := os.Open(os.Args[1])
if err != nil {
panic(err)
}
lines := []string{}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
return lines
}