This commit is contained in:
Stefan Harmuth 2021-01-24 07:07:36 +01:00
parent b2faced8a9
commit 3a9c5d69b0
4 changed files with 2107 additions and 1 deletions

97
day07/day.go Normal file
View File

@ -0,0 +1,97 @@
package day07
import (
"regexp"
"tools"
)
var reSplit = regexp.MustCompile(`^([^\[]+)|(?:\[([^]]+)]([^\[]+))`)
func isABBA(s string) bool {
for i := 3; i < len(s); i++ {
if s[i] == s[i-3] && s[i-1] == s[i-2] && s[i] != s[i-1] {
return true
}
}
return false
}
func getABAs(s string) (abaList []string) {
for i := 2; i < len(s); i++ {
if s[i] == s[i-2] && s[i] != s[i-1] {
abaList = append(abaList, string(s[i-1])+string(s[i])+string(s[i-1]))
}
}
return abaList
}
func hasABA(s, aba string) bool {
for i := 2; i < len(s); i++ {
if s[i] == aba[2] && s[i-1] == aba[1] && s[i-2] == aba[0] {
return true
}
}
return false
}
func Part1(puzzle tools.AoCPuzzle) interface{} {
tlsCounter := 0
for _, line := range puzzle.GetInputArray() {
parts := reSplit.FindAllStringSubmatch(line, -1)
thisABBA := false
thisHNABBA := false
if isABBA(parts[0][0]) {
thisABBA = true
}
for i := 1; i < len(parts); i++ {
if isABBA(parts[i][2]) {
thisHNABBA = true
}
if isABBA(parts[i][3]) {
thisABBA = true
}
}
if thisABBA && !thisHNABBA {
tlsCounter++
}
}
return tlsCounter
}
func Part2(puzzle tools.AoCPuzzle) interface{} {
sslCounter := 0
for _, line := range puzzle.GetInputArray() {
var abaList []string
var hnList []string
abaInHN := false
parts := reSplit.FindAllStringSubmatch(line, -1)
for _, aba := range getABAs(parts[0][0]) {
abaList = append(abaList, aba)
}
for i := 1; i < len(parts); i++ {
for _, aba := range getABAs(parts[i][3]) {
abaList = append(abaList, aba)
}
hnList = append(hnList, parts[i][2])
}
for _, aba := range abaList {
for _, hn := range hnList {
if hasABA(hn, aba) {
abaInHN = true
break
}
}
if abaInHN {
break
}
}
if abaInHN {
sslCounter++
}
}
return sslCounter
}

2000
inputs/7 Normal file

File diff suppressed because it is too large Load Diff

8
inputs/7_test Normal file
View File

@ -0,0 +1,8 @@
abba[mnop1]qrst1[mnop2]qrst2
abcd[bddb]xyyx
aaaa[qwer]tyui
ioxxoj[asdfgh]zxcvbn
aba[bab]xyz
xyx[xyx]xyx
aaa[kek]eke
zazbz[bzb]cdb

View File

@ -7,6 +7,7 @@ import (
"aoc2016/day04" "aoc2016/day04"
"aoc2016/day05" "aoc2016/day05"
"aoc2016/day06" "aoc2016/day06"
"aoc2016/day07"
"flag" "flag"
"fmt" "fmt"
"os" "os"
@ -30,7 +31,7 @@ func initDayFunctions() {
4: {1: day04.Part1, 2: day04.Part2}, 4: {1: day04.Part1, 2: day04.Part2},
5: {1: day05.Part1, 2: day05.Part2}, 5: {1: day05.Part1, 2: day05.Part2},
6: {1: day06.Part1, 2: day06.Part2}, 6: {1: day06.Part1, 2: day06.Part2},
// 7: {1: day07.Part1, 2: day07.Part2}, 7: {1: day07.Part1, 2: day07.Part2},
// 8: {1: day08.Part1, 2: day08.Part2}, // 8: {1: day08.Part1, 2: day08.Part2},
// 9: {1: day09.Part1, 2: day09.Part2}, // 9: {1: day09.Part1, 2: day09.Part2},
// 10: {1: day10.Part1, 2: day10.Part2}, // 10: {1: day10.Part1, 2: day10.Part2},