84 lines
1.4 KiB
Go
84 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"time"
|
|
)
|
|
|
|
type Square struct {
|
|
x int64
|
|
y int64
|
|
}
|
|
|
|
func main() {
|
|
|
|
fmt.Println("Day 8")
|
|
start := time.Now()
|
|
|
|
dat, err := ioutil.ReadFile("day8.txt")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
lines := bytes.Split(dat, []byte("\n"))
|
|
|
|
part2 := 0
|
|
totalCharacters := 0
|
|
realCharacters := 0
|
|
|
|
for _, value := range lines {
|
|
line := string(value)
|
|
totalCharacters += len(line)
|
|
|
|
newLine := line[1 : len(line)-1]
|
|
currentReal := 0
|
|
|
|
for i := 0; i < len(newLine); i++ {
|
|
char := string(newLine[i])
|
|
if char == `\` {
|
|
nextChar := string(newLine[i+1])
|
|
if nextChar == "x" {
|
|
i = i + 2
|
|
} else if nextChar == `"` || nextChar == `\` {
|
|
i++
|
|
currentReal++
|
|
}
|
|
} else {
|
|
currentReal++
|
|
}
|
|
}
|
|
realCharacters += currentReal
|
|
|
|
currentPart2 := 0
|
|
|
|
for i := 0; i < len(line); i++ {
|
|
char := string(line[i])
|
|
if char == `"` || char == `\` {
|
|
currentPart2 += 2
|
|
} else {
|
|
currentPart2++
|
|
}
|
|
}
|
|
//Double quotes around the string
|
|
currentPart2 += 2
|
|
part2 += currentPart2
|
|
|
|
}
|
|
|
|
elapsed := time.Since(start)
|
|
fmt.Printf("Part 1: %v %v \n", totalCharacters-realCharacters, elapsed)
|
|
fmt.Printf("Part 2: %v %v \n", part2-totalCharacters, elapsed)
|
|
|
|
}
|
|
|
|
func compare(slice1 []byte, slice2 []byte) bool {
|
|
for i := 0; i < len(slice1) && i < len(slice2); i++ {
|
|
if slice1[i] != slice2[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|