[ADD] Added day 19 solution part 2
This commit is contained in:
parent
e09207059b
commit
35cf750af8
1 changed files with 62 additions and 24 deletions
84
19/main.go
84
19/main.go
|
|
@ -43,41 +43,79 @@ func TransformInput(lines []string) structuredInput {
|
|||
return Puzzle{strings.Split(lines[0], ", "), lines[2:]}
|
||||
}
|
||||
|
||||
func Part1(input structuredInput) int {
|
||||
var result = 0
|
||||
var poss []string
|
||||
var found bool
|
||||
var work string
|
||||
var poss []string
|
||||
var cachePart1 map[string]bool = make(map[string]bool)
|
||||
|
||||
for i, line := range input.lines {
|
||||
fmt.Println(i)
|
||||
poss = []string{line}
|
||||
found = false
|
||||
for !found && len(poss) > 0 {
|
||||
work = poss[0]
|
||||
poss = poss[1:]
|
||||
for j := 0; j < len(input.poss); j++ {
|
||||
if len(input.poss[j]) <= len(work) {
|
||||
if work[:len(input.poss[j])] == input.poss[j] {
|
||||
poss = append(poss, work[len(input.poss[j]):])
|
||||
if len(work[len(input.poss[j]):]) == 0 {
|
||||
found = true
|
||||
func hasSolution(input string) bool {
|
||||
if len(input) == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
value, ok := cachePart1[input]
|
||||
|
||||
if ok {
|
||||
return value
|
||||
}
|
||||
|
||||
var result = false
|
||||
|
||||
for i := 0; i < len(poss); i++ {
|
||||
if len(input) >= len(poss[i]) && input[:len(poss[i])] == poss[i] && hasSolution(input[len(poss[i]):]) {
|
||||
result = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if found {
|
||||
result += 1
|
||||
|
||||
cachePart1[input] = result
|
||||
return result
|
||||
}
|
||||
|
||||
func Part1(input structuredInput) int {
|
||||
var result = 0
|
||||
poss = input.poss
|
||||
|
||||
for _, line := range input.lines {
|
||||
if hasSolution(line) {
|
||||
result++
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
var cachePart2 map[string]int = make(map[string]int)
|
||||
|
||||
func findSolutionCount(input string) int {
|
||||
if len(input) == 0 {
|
||||
return 1
|
||||
}
|
||||
|
||||
value, ok := cachePart2[input]
|
||||
|
||||
if ok {
|
||||
return value
|
||||
}
|
||||
|
||||
var result = 0
|
||||
|
||||
for i := 0; i < len(poss); i++ {
|
||||
if len(input) >= len(poss[i]) && input[:len(poss[i])] == poss[i] {
|
||||
result += findSolutionCount(input[len(poss[i]):])
|
||||
}
|
||||
}
|
||||
|
||||
cachePart2[input] = result
|
||||
return result
|
||||
}
|
||||
|
||||
func Part2(input structuredInput) int {
|
||||
var result = 0
|
||||
poss = input.poss
|
||||
|
||||
for _, line := range input.lines {
|
||||
result += findSolutionCount(line)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue