day13, part2

had a bug in 'recording' the failed lines for Vertical.
debugged at second field in input, which was marking only 1 column as
having 1 smudge
This commit is contained in:
efim 2023-12-13 15:04:51 +00:00
parent 85dd9a31e3
commit 762e72744c
1 changed files with 19 additions and 10 deletions

View File

@ -8,7 +8,7 @@ import (
) )
func Run() int { func Run() int {
filename := "day13/example" filename := "day13/input"
fmt.Println("hello day 13.", filename) fmt.Println("hello day 13.", filename)
bytes, err := os.ReadFile(filename) bytes, err := os.ReadFile(filename)
if err != nil { if err != nil {
@ -34,7 +34,12 @@ func Calc(field Field) int {
for rowNum, row := range field.Symbols { for rowNum, row := range field.Symbols {
for colNum, symb := range row { for colNum, symb := range row {
for _, horizontalMirrorUnderCheck := range horizontals { for _, horizontalMirrorUnderCheck := range horizontals {
// if horizontalMirrorUnderCheck.Smaller != 4 {
// continue
// }
mirroredRow, shouldCheck := horizontalMirrorUnderCheck.reflectCoord(rowNum) mirroredRow, shouldCheck := horizontalMirrorUnderCheck.reflectCoord(rowNum)
// log.Println("for mirror", horizontalMirrorUnderCheck.String())
// log.Printf("> checking row %d and mirrored %d; should %t\n", rowNum, mirroredRow, shouldCheck)
if shouldCheck { if shouldCheck {
// log.Printf("checking horizontal mirror %+v", horizontalMirrorUnderCheck) // log.Printf("checking horizontal mirror %+v", horizontalMirrorUnderCheck)
// log.Printf("in should check for row %d, col %d, mirrored row %d\n", rowNum, colNum, mirroredRow) // log.Printf("in should check for row %d, col %d, mirrored row %d\n", rowNum, colNum, mirroredRow)
@ -70,15 +75,18 @@ func Calc(field Field) int {
for rowNum, row := range field.Symbols { for rowNum, row := range field.Symbols {
symb := row[colNum] symb := row[colNum]
for _, verticalMirrorUnderCheck := range verticals { for _, verticalMirrorUnderCheck := range verticals {
// if verticalMirrorUnderCheck.Smaller != 8 {
// continue
// }
mirroredCol, shouldCheck := verticalMirrorUnderCheck.reflectCoord(colNum) mirroredCol, shouldCheck := verticalMirrorUnderCheck.reflectCoord(colNum)
if shouldCheck { if shouldCheck {
// log.Printf("checking vertical mirror %+v", horizontalMirrorUnderCheck) // log.Printf("checking vertical mirror %+v", verticalMirrorUnderCheck)
// log.Printf("in should check for row %d, col %d, mirrored row %d\n", rowNum, colNum, mirroredRow) // log.Printf("in should check for row %d, col %d, mirrored col %d\n", rowNum, colNum, mirroredCol)
mirroredSymb := field.Symbols[rowNum][mirroredCol] mirroredSymb := field.Symbols[rowNum][mirroredCol]
isMirrored := symb == mirroredSymb isMirrored := symb == mirroredSymb
if !isMirrored { if !isMirrored {
// log.Printf("found not mirrored : %s != %s\n", string(symb), string(mirroredSymb)) // log.Printf("found not mirrored : %s != %s\n", string(symb), string(mirroredSymb))
verticalMirrorUnderCheck.FailedLineChecks[rowNum] += 1 verticalMirrorUnderCheck.FailedLineChecks[colNum] += 1
} }
} }
} }
@ -143,7 +151,7 @@ func (f *Field) initMirrors() (vertical []Mirror, horizontal []Mirror) {
for rowNum := 0; rowNum < amountHorizontal; rowNum++ { for rowNum := 0; rowNum < amountHorizontal; rowNum++ {
maxDist := min(rowNum, height - 1 - (rowNum+1)) maxDist := min(rowNum, height - 1 - (rowNum+1))
log.Println("maxDist ", maxDist, "for rowNum ", rowNum) // log.Println("maxDist ", maxDist, "for rowNum ", rowNum)
horizontal[rowNum] = Mirror{ horizontal[rowNum] = Mirror{
Smaller: rowNum, Smaller: rowNum,
Bigger: rowNum + 1, Bigger: rowNum + 1,
@ -183,7 +191,7 @@ func (m *Mirror)isFullMirror() bool {
for failedLine, failedSymbols := range m.FailedLineChecks { for failedLine, failedSymbols := range m.FailedLineChecks {
reflectedLine, _ := m.reflectCoord(failedLine) reflectedLine, _ := m.reflectCoord(failedLine)
doublyReflected, _ := m.reflectCoord(reflectedLine) doublyReflected, _ := m.reflectCoord(reflectedLine)
log.Printf(">>>> checking failed line %d, reflected is %d; doubly %d. amount failed is %d\n", failedLine, reflectedLine, doublyReflected, failedSymbols) // log.Printf(">>>> checking failed line %d, reflected is %d; doubly %d. amount failed is %d\n", failedLine, reflectedLine, doublyReflected, failedSymbols)
if failedSymbols == 1 && (doublyReflected == failedLine) { if failedSymbols == 1 && (doublyReflected == failedLine) {
return true return true
} }
@ -200,10 +208,11 @@ func (m *Mirror)String() string {
func (m *Mirror) reflectCoord(coord int) (reflected int, shouldCheck bool) { func (m *Mirror) reflectCoord(coord int) (reflected int, shouldCheck bool) {
dist := m.Smaller - coord dist := m.Smaller - coord
_, distConfirmed := m.SuccessfulLineChecks[dist] // _, distConfirmed := m.SuccessfulLineChecks[dist]
if distConfirmed { // if distConfirmed {
return 0, false // either line already fully confirmed, or failed. no need for additional checks // // log.Printf("> getting dist confirmed for coord %d ; dist %d\n", coord, dist)
} // return 0, false // either line already fully confirmed, or failed. no need for additional checks
// }
reflected = m.Bigger + dist reflected = m.Bigger + dist
if dist < 0 { if dist < 0 {