Completed both parts of Day 13 puzzle with help to debug my code
parent
23060cdf49
commit
2e3c9db727
@ -0,0 +1,527 @@
|
||||
package day13
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gitea.paas.celticinfo.fr/oabrivard/aoc2023/utils"
|
||||
)
|
||||
|
||||
func isMirror(vector []int) bool {
|
||||
if len(vector) == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
if len(vector) == 1 {
|
||||
return false
|
||||
}
|
||||
|
||||
return vector[0] == vector[len(vector)-1] && isMirror(vector[1:len(vector)-1])
|
||||
}
|
||||
|
||||
func findMirrorPos(vector []int) int {
|
||||
|
||||
for i := range vector {
|
||||
if isMirror(vector[i:]) {
|
||||
return i + (len(vector)-i)/2
|
||||
}
|
||||
}
|
||||
|
||||
for j := len(vector); j > 0; j-- {
|
||||
if isMirror(vector[:j]) {
|
||||
return j / 2
|
||||
}
|
||||
}
|
||||
|
||||
return -1
|
||||
}
|
||||
|
||||
/*
|
||||
func findMirror2(vector []int, start int, end int, skipFirst bool) int {
|
||||
if start > end {
|
||||
if start < len(vector) && vector[start] == vector[end] {
|
||||
return end
|
||||
} else {
|
||||
return -1
|
||||
}
|
||||
}
|
||||
|
||||
if vector[start] == vector[end] {
|
||||
result := -1
|
||||
for i := start + 1; i < end+1; i++ {
|
||||
result = findMirror2(vector, i, end-1, skipFirst)
|
||||
|
||||
if result != -1 {
|
||||
break
|
||||
}
|
||||
}
|
||||
return result
|
||||
} else {
|
||||
if skipFirst {
|
||||
return findMirror2(vector, start+1, end, skipFirst)
|
||||
} else {
|
||||
return findMirror2(vector, start, end-1, skipFirst)
|
||||
}
|
||||
// skipFirstResult := findMirror(vector, start+1, end)
|
||||
// if skipFirstResult > 0 {
|
||||
// return skipFirstResult
|
||||
// } else {
|
||||
// skipLastResult := findMirror(vector, start, end+1)
|
||||
// if skipLastResult > 0 {
|
||||
// return skipLastResult
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
func sumPatternLines(lines [][]byte) int {
|
||||
result := 0
|
||||
height := len(lines)
|
||||
width := len(lines[0])
|
||||
|
||||
matrix := make([][]byte, height)
|
||||
vector := make([]int, width)
|
||||
|
||||
for row, line := range lines {
|
||||
matrix[row] = make([]byte, len(line))
|
||||
|
||||
for col, r := range line {
|
||||
matrix[row][col] = r
|
||||
|
||||
if r == '#' {
|
||||
vector[col] += utils.Pow2(row)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
colCount := findMirror(vector, 0, width-1, true) + 1
|
||||
|
||||
if colCount > 0 {
|
||||
//fmt.Println(vector)
|
||||
fmt.Println("found vertical at", colCount)
|
||||
} else {
|
||||
colCount = findMirror(vector, 0, width-1, false) + 1
|
||||
if colCount > 0 {
|
||||
//fmt.Println(vector)
|
||||
fmt.Println("found vertical at", colCount)
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
colCount := findMirrorPos(vector)
|
||||
if colCount > 0 {
|
||||
result = colCount
|
||||
|
||||
fmt.Println("found vertical at", colCount)
|
||||
/*
|
||||
for _, l := range lines {
|
||||
fmt.Println(string(l))
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
vector = make([]int, height)
|
||||
|
||||
for col := 0; col < width; col++ {
|
||||
for row := 0; row < height; row++ {
|
||||
if matrix[row][col] == '#' {
|
||||
vector[row] += utils.Pow2(col)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
rowCount := findMirror(vector, 0, height-1, true) + 1
|
||||
|
||||
if rowCount > 0 {
|
||||
//fmt.Println(vector)
|
||||
fmt.Println("found horizontal at", rowCount)
|
||||
} else {
|
||||
rowCount = findMirror(vector, 0, height-1, false) + 1
|
||||
if rowCount > 0 {
|
||||
//fmt.Println(vector)
|
||||
fmt.Println("found horizontal at", rowCount)
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
rowCount := findMirrorPos(vector)
|
||||
if rowCount > 0 {
|
||||
result += rowCount * 100
|
||||
|
||||
fmt.Println("found horizontal at", rowCount)
|
||||
/*
|
||||
for _, l := range lines {
|
||||
fmt.Println(string(l))
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
}
|
||||
|
||||
func SumMirrorLines(lines []string) int {
|
||||
result := 0
|
||||
pattern := [][]byte{}
|
||||
count := 0
|
||||
for _, line := range lines {
|
||||
if line == "" {
|
||||
fmt.Println("Analyzing pattern", count)
|
||||
result += sumPatternLines(pattern)
|
||||
pattern = [][]byte{}
|
||||
count++
|
||||
} else {
|
||||
pattern = append(pattern, []byte(line))
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func SumMirrorLinesWithSumdge(lines []string) int {
|
||||
result := 0
|
||||
pattern := [][]byte{}
|
||||
count := 0
|
||||
for _, line := range lines {
|
||||
if line == "" {
|
||||
fmt.Println("Analyzing pattern", count)
|
||||
|
||||
sum := 0
|
||||
OuterLoop:
|
||||
for row := range pattern {
|
||||
for col := range pattern[row] {
|
||||
saved := pattern[row][col]
|
||||
|
||||
if saved == '.' {
|
||||
pattern[row][col] = '#'
|
||||
} else {
|
||||
pattern[row][col] = '.'
|
||||
}
|
||||
|
||||
sum = sumPatternLines(pattern)
|
||||
pattern[row][col] = saved
|
||||
|
||||
if sum > 0 {
|
||||
break OuterLoop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result += sum
|
||||
pattern = [][]byte{}
|
||||
count++
|
||||
} else {
|
||||
pattern = append(pattern, []byte(line))
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func findNextReflectionPoint(vector []int, first int, vector2 []int, smudge int) (bool, int) {
|
||||
width := len(vector)
|
||||
found := false
|
||||
start := first
|
||||
end := 0
|
||||
result := -1
|
||||
smudgeCount := 0
|
||||
for i := first; i < width-1; i++ {
|
||||
if vector[i] == vector[i+1] {
|
||||
found = true
|
||||
result = i
|
||||
start = i
|
||||
end = i + 1
|
||||
break
|
||||
}
|
||||
|
||||
if smudgeCount < smudge && (vector2[i]+smudge == vector2[i+1] || vector2[i] == vector2[i+1]+smudge) {
|
||||
smudgeCount++
|
||||
found = true
|
||||
result = i
|
||||
start = i
|
||||
end = i + 1
|
||||
break
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if !found {
|
||||
return false, result
|
||||
}
|
||||
|
||||
for {
|
||||
if vector[start] != vector[end] {
|
||||
if smudgeCount >= smudge {
|
||||
return false, result
|
||||
} else {
|
||||
if vector2[start]+smudge == vector2[end] || vector2[start] == vector2[end]+smudge {
|
||||
smudgeCount++
|
||||
} else {
|
||||
return false, result
|
||||
}
|
||||
}
|
||||
}
|
||||
if start == 0 {
|
||||
if smudgeCount < smudge {
|
||||
return false, result
|
||||
} else {
|
||||
return true, result
|
||||
}
|
||||
}
|
||||
if end == width-1 {
|
||||
if smudgeCount < smudge {
|
||||
return false, result
|
||||
} else {
|
||||
return true, result
|
||||
}
|
||||
}
|
||||
|
||||
start--
|
||||
end++
|
||||
}
|
||||
}
|
||||
|
||||
func getPatternSum(lines [][]byte, smudge int) (int, int) {
|
||||
height := len(lines)
|
||||
width := len(lines[0])
|
||||
|
||||
matrix := make([][]byte, height)
|
||||
vector := make([]int, width)
|
||||
vector2 := make([]int, width)
|
||||
|
||||
for row, line := range lines {
|
||||
matrix[row] = make([]byte, len(line))
|
||||
|
||||
for col, r := range line {
|
||||
matrix[row][col] = r
|
||||
|
||||
if r == '#' {
|
||||
vector[col] += utils.Pow2(row)
|
||||
vector2[col] += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
success, colCount := findNextReflectionPoint(vector, 0, vector2, smudge)
|
||||
colCount++
|
||||
for {
|
||||
if success {
|
||||
fmt.Println("found vertical at", colCount)
|
||||
/*
|
||||
for _, l := range lines {
|
||||
fmt.Println(string(l))
|
||||
}
|
||||
*/
|
||||
break
|
||||
}
|
||||
|
||||
if colCount >= len(vector)-1 || colCount == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
success, colCount = findNextReflectionPoint(vector, colCount, vector2, smudge)
|
||||
colCount++
|
||||
}
|
||||
|
||||
vector = make([]int, height)
|
||||
vector2 = make([]int, height)
|
||||
|
||||
for col := 0; col < width; col++ {
|
||||
for row := 0; row < height; row++ {
|
||||
if matrix[row][col] == '#' {
|
||||
vector[row] += utils.Pow2(col)
|
||||
vector2[row] += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
success, rowCount := findNextReflectionPoint(vector, 0, vector2, smudge)
|
||||
rowCount++
|
||||
for {
|
||||
if success {
|
||||
fmt.Println("found horizontal at", rowCount)
|
||||
/*
|
||||
for _, l := range lines {
|
||||
fmt.Println(string(l))
|
||||
}
|
||||
*/
|
||||
break
|
||||
}
|
||||
|
||||
if rowCount >= len(vector)-1 || rowCount == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
success, rowCount = findNextReflectionPoint(vector, rowCount, vector2, smudge)
|
||||
rowCount++
|
||||
}
|
||||
|
||||
return rowCount, colCount
|
||||
}
|
||||
|
||||
func SumMirrorLines2(lines []string, smudge int) int {
|
||||
result := 0
|
||||
pattern := [][]byte{}
|
||||
count := 0
|
||||
for _, line := range lines {
|
||||
if line == "" {
|
||||
fmt.Println("Analyzing pattern", count)
|
||||
rowCount, colCount := getPatternSum(pattern, smudge)
|
||||
result += rowCount*100 + colCount
|
||||
pattern = [][]byte{}
|
||||
count++
|
||||
} else {
|
||||
pattern = append(pattern, []byte(line))
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func SumMirrorLinesWithSumdge2(lines []string) int {
|
||||
result := 0
|
||||
pattern := [][]byte{}
|
||||
count := 0
|
||||
for _, line := range lines {
|
||||
if line == "" {
|
||||
fmt.Println("Analyzing pattern", count)
|
||||
rowBase, colBase := getPatternSum(pattern, 0)
|
||||
|
||||
sum := 0
|
||||
OuterLoop:
|
||||
for row := range pattern {
|
||||
for col := range pattern[row] {
|
||||
saved := pattern[row][col]
|
||||
|
||||
if saved == '.' {
|
||||
pattern[row][col] = '#'
|
||||
} else {
|
||||
pattern[row][col] = '.'
|
||||
}
|
||||
|
||||
rowCount, colCount := getPatternSum(pattern, 1)
|
||||
if rowCount != rowBase && colBase != colCount {
|
||||
for _, l := range pattern {
|
||||
fmt.Println(string(l))
|
||||
}
|
||||
fmt.Println(row, col)
|
||||
sum += rowCount*100 + colCount
|
||||
}
|
||||
pattern[row][col] = saved
|
||||
|
||||
if sum > 0 {
|
||||
break OuterLoop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result += sum
|
||||
pattern = [][]byte{}
|
||||
count++
|
||||
} else {
|
||||
pattern = append(pattern, []byte(line))
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func vectorDiff(v1 []int, v2 []int) int {
|
||||
sum := 0
|
||||
|
||||
for i, v := range v1 {
|
||||
sum += utils.AbsInt(v - v2[i])
|
||||
}
|
||||
|
||||
return sum
|
||||
}
|
||||
|
||||
// Only valid solution for both parts
|
||||
func findReflectionPoint(matrix [][]int, smudge int) int {
|
||||
width := len(matrix)
|
||||
|
||||
// trouver la premiere paire de layouts a partir de 'first'
|
||||
for first := 0; first < width-1; {
|
||||
smudgeCount := smudge
|
||||
start := -1
|
||||
end := -1
|
||||
|
||||
for i := first; i < width-1; i++ {
|
||||
diff := vectorDiff(matrix[i], matrix[i+1])
|
||||
|
||||
if smudgeCount >= diff {
|
||||
smudgeCount -= diff
|
||||
start = i
|
||||
end = i + 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if start == -1 {
|
||||
return -1
|
||||
}
|
||||
|
||||
result := start
|
||||
|
||||
for {
|
||||
if start == 0 || end == width-1 {
|
||||
if smudgeCount == 0 {
|
||||
return result
|
||||
} else {
|
||||
first = result + 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
start--
|
||||
end++
|
||||
|
||||
diff := vectorDiff(matrix[start], matrix[end])
|
||||
smudgeCount -= diff
|
||||
|
||||
if smudgeCount < 0 {
|
||||
first = result + 1
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1
|
||||
}
|
||||
|
||||
// Only valid solution for both parts
|
||||
func SumMirrorLines3(lines []string, smudge int) int {
|
||||
result := 0
|
||||
matrix := [][]int{}
|
||||
|
||||
count := 0
|
||||
for _, line := range lines {
|
||||
if line == "" {
|
||||
fmt.Println("Analyzing pattern", count)
|
||||
|
||||
rowCount := findReflectionPoint(matrix, smudge) + 1
|
||||
|
||||
matrix2 := utils.Transpose[int](matrix)
|
||||
colCount := findReflectionPoint(matrix2, smudge) + 1
|
||||
|
||||
fmt.Println("found horizontal at ", rowCount, "and vertical at ", colCount)
|
||||
|
||||
result += rowCount*100 + colCount
|
||||
matrix = [][]int{}
|
||||
|
||||
count++
|
||||
} else {
|
||||
vector := make([]int, len(line))
|
||||
|
||||
for j, b := range line {
|
||||
if b == '.' {
|
||||
vector[j] = 0
|
||||
} else {
|
||||
vector[j] = 1
|
||||
}
|
||||
}
|
||||
|
||||
matrix = append(matrix, vector)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
@ -0,0 +1,294 @@
|
||||
package day13
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"gitea.paas.celticinfo.fr/oabrivard/aoc2023/utils"
|
||||
)
|
||||
|
||||
func TestSumMirrorLines(t *testing.T) {
|
||||
lines := []string{
|
||||
"#.##..##.",
|
||||
"..#.##.#.",
|
||||
"##......#",
|
||||
"##......#",
|
||||
"..#.##.#.",
|
||||
"..##..##.",
|
||||
"#.#.##.#.",
|
||||
"",
|
||||
"#...##..#",
|
||||
"#....#..#",
|
||||
"..##..###",
|
||||
"#####.##.",
|
||||
"#####.##.",
|
||||
"..##..###",
|
||||
"#....#..#",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLines(lines)
|
||||
|
||||
if result != 405 {
|
||||
t.Fatalf("expected 405, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLinesDebug(t *testing.T) {
|
||||
lines := []string{
|
||||
"#...#..#.",
|
||||
"#...#..#.",
|
||||
".####..#.",
|
||||
"..#..#..#",
|
||||
"...#....#",
|
||||
"##..###..",
|
||||
"#...####.",
|
||||
"#...####.",
|
||||
"##..##...",
|
||||
"...#....#",
|
||||
"..#..#..#",
|
||||
".####..#.",
|
||||
"#...#..#.",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLines(lines)
|
||||
|
||||
if result != 100 {
|
||||
t.Fatalf("expected 100, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLinesWithInput1(t *testing.T) {
|
||||
lines := utils.ReadLines("input.txt")
|
||||
|
||||
result := SumMirrorLines(lines)
|
||||
|
||||
if result != 43614 {
|
||||
t.Fatalf("expected 43614 %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLinesWithSmudge(t *testing.T) {
|
||||
lines := []string{
|
||||
"#.##..##.",
|
||||
"..#.##.#.",
|
||||
"##......#",
|
||||
"##......#",
|
||||
"..#.##.#.",
|
||||
"..##..##.",
|
||||
"#.#.##.#.",
|
||||
"",
|
||||
"#...##..#",
|
||||
"#....#..#",
|
||||
"..##..###",
|
||||
"#####.##.",
|
||||
"#####.##.",
|
||||
"..##..###",
|
||||
"#....#..#",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLinesWithSumdge(lines)
|
||||
|
||||
if result != 400 {
|
||||
t.Fatalf("expected 400, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLinesWithSmudgeWithInput1(t *testing.T) {
|
||||
lines := utils.ReadLines("input.txt")
|
||||
|
||||
result := SumMirrorLinesWithSumdge(lines)
|
||||
|
||||
if result != 43614 {
|
||||
t.Fatalf("expected 43614 %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLines2(t *testing.T) {
|
||||
lines := []string{
|
||||
"#.##..##.",
|
||||
"..#.##.#.",
|
||||
"##......#",
|
||||
"##......#",
|
||||
"..#.##.#.",
|
||||
"..##..##.",
|
||||
"#.#.##.#.",
|
||||
"",
|
||||
"#...##..#",
|
||||
"#....#..#",
|
||||
"..##..###",
|
||||
"#####.##.",
|
||||
"#####.##.",
|
||||
"..##..###",
|
||||
"#....#..#",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLines2(lines, 0)
|
||||
|
||||
if result != 405 {
|
||||
t.Fatalf("expected 405, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLines2WithInput1(t *testing.T) {
|
||||
lines := utils.ReadLines("input.txt")
|
||||
|
||||
result := SumMirrorLines2(lines, 0)
|
||||
|
||||
if result != 43614 {
|
||||
t.Fatalf("expected 43614 %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLines2Debug(t *testing.T) {
|
||||
lines := []string{
|
||||
"...###...##",
|
||||
"##....#..#.",
|
||||
"###.#.#....",
|
||||
"#..###.##.#",
|
||||
"#..###.##.#",
|
||||
"###.#......",
|
||||
"##....#..#.",
|
||||
"...###...##",
|
||||
"...###...##",
|
||||
"##....#..#.",
|
||||
"###.#......",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLines2(lines, 0)
|
||||
|
||||
if result != 800 {
|
||||
t.Fatalf("expected 800, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLines2WithSmudge(t *testing.T) {
|
||||
lines := []string{
|
||||
"#.##..##.",
|
||||
"..#.##.#.",
|
||||
"##......#",
|
||||
"##......#",
|
||||
"..#.##.#.",
|
||||
"..##..##.",
|
||||
"#.#.##.#.",
|
||||
"",
|
||||
"#...##..#",
|
||||
"#....#..#",
|
||||
"..##..###",
|
||||
"#####.##.",
|
||||
"#####.##.",
|
||||
"..##..###",
|
||||
"#....#..#",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLines2(lines, 1)
|
||||
|
||||
if result != 405 {
|
||||
t.Fatalf("expected 405, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLinesWithSmudge2(t *testing.T) {
|
||||
lines := []string{
|
||||
"#.##..##.",
|
||||
"..#.##.#.",
|
||||
"##......#",
|
||||
"##......#",
|
||||
"..#.##.#.",
|
||||
"..##..##.",
|
||||
"#.#.##.#.",
|
||||
"",
|
||||
"#...##..#",
|
||||
"#....#..#",
|
||||
"..##..###",
|
||||
"#####.##.",
|
||||
"#####.##.",
|
||||
"..##..###",
|
||||
"#....#..#",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLinesWithSumdge2(lines)
|
||||
|
||||
if result != 400 {
|
||||
t.Fatalf("expected 400, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLines3(t *testing.T) {
|
||||
lines := []string{
|
||||
"#.##..##.",
|
||||
"..#.##.#.",
|
||||
"##......#",
|
||||
"##......#",
|
||||
"..#.##.#.",
|
||||
"..##..##.",
|
||||
"#.#.##.#.",
|
||||
"",
|
||||
"#...##..#",
|
||||
"#....#..#",
|
||||
"..##..###",
|
||||
"#####.##.",
|
||||
"#####.##.",
|
||||
"..##..###",
|
||||
"#....#..#",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLines3(lines, 0)
|
||||
|
||||
if result != 405 {
|
||||
t.Fatalf("expected 405, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLines3WithInput1(t *testing.T) {
|
||||
lines := utils.ReadLines("input.txt")
|
||||
|
||||
result := SumMirrorLines3(lines, 0)
|
||||
|
||||
if result != 43614 {
|
||||
t.Fatalf("expected 43614 %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLines3WithSmudge(t *testing.T) {
|
||||
lines := []string{
|
||||
"#.##..##.",
|
||||
"..#.##.#.",
|
||||
"##......#",
|
||||
"##......#",
|
||||
"..#.##.#.",
|
||||
"..##..##.",
|
||||
"#.#.##.#.",
|
||||
"",
|
||||
"#...##..#",
|
||||
"#....#..#",
|
||||
"..##..###",
|
||||
"#####.##.",
|
||||
"#####.##.",
|
||||
"..##..###",
|
||||
"#....#..#",
|
||||
"",
|
||||
}
|
||||
|
||||
result := SumMirrorLines3(lines, 1)
|
||||
|
||||
if result != 400 {
|
||||
t.Fatalf("expected 400, got %v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSumMirrorLines3WithSmudgeWithInput1(t *testing.T) {
|
||||
lines := utils.ReadLines("input.txt")
|
||||
|
||||
result := SumMirrorLines3(lines, 1)
|
||||
|
||||
if result != 36771 {
|
||||
t.Fatalf("expected 36771 %v", result)
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue