diff --git a/day13/dayThirteen.go b/day13/dayThirteen.go index 6ed2688..e0bc63d 100644 --- a/day13/dayThirteen.go +++ b/day13/dayThirteen.go @@ -8,7 +8,7 @@ import ( ) func Run() int { - filename := "day13/example" + filename := "day13/input" fmt.Println("hello day 13.", filename) bytes, err := os.ReadFile(filename) if err != nil { @@ -34,7 +34,12 @@ func Calc(field Field) int { for rowNum, row := range field.Symbols { for colNum, symb := range row { for _, horizontalMirrorUnderCheck := range horizontals { + // if horizontalMirrorUnderCheck.Smaller != 4 { + // continue + // } 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 { // log.Printf("checking horizontal mirror %+v", horizontalMirrorUnderCheck) // 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 { symb := row[colNum] for _, verticalMirrorUnderCheck := range verticals { + // if verticalMirrorUnderCheck.Smaller != 8 { + // continue + // } mirroredCol, shouldCheck := verticalMirrorUnderCheck.reflectCoord(colNum) if shouldCheck { - // log.Printf("checking vertical mirror %+v", horizontalMirrorUnderCheck) - // log.Printf("in should check for row %d, col %d, mirrored row %d\n", rowNum, colNum, mirroredRow) + // log.Printf("checking vertical mirror %+v", verticalMirrorUnderCheck) + // log.Printf("in should check for row %d, col %d, mirrored col %d\n", rowNum, colNum, mirroredCol) mirroredSymb := field.Symbols[rowNum][mirroredCol] isMirrored := symb == mirroredSymb if !isMirrored { // 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++ { maxDist := min(rowNum, height - 1 - (rowNum+1)) - log.Println("maxDist ", maxDist, "for rowNum ", rowNum) + // log.Println("maxDist ", maxDist, "for rowNum ", rowNum) horizontal[rowNum] = Mirror{ Smaller: rowNum, Bigger: rowNum + 1, @@ -183,7 +191,7 @@ func (m *Mirror)isFullMirror() bool { for failedLine, failedSymbols := range m.FailedLineChecks { reflectedLine, _ := m.reflectCoord(failedLine) 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) { return true } @@ -200,10 +208,11 @@ func (m *Mirror)String() string { func (m *Mirror) reflectCoord(coord int) (reflected int, shouldCheck bool) { dist := m.Smaller - coord - _, distConfirmed := m.SuccessfulLineChecks[dist] - if distConfirmed { - return 0, false // either line already fully confirmed, or failed. no need for additional checks - } + // _, distConfirmed := m.SuccessfulLineChecks[dist] + // if distConfirmed { + // // 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 if dist < 0 { diff --git a/day13/example3 b/day13/example3 new file mode 100644 index 0000000..2a83e84 --- /dev/null +++ b/day13/example3 @@ -0,0 +1,15 @@ +.#..#.. +.##.### +..####. +##.##.# +#.####. +#.#.##. +##.##.# +..####. +.##.### +.#..#.. +##..... +#.###.# +##..... +##..... +#.###.# diff --git a/day13/example4 b/day13/example4 new file mode 100644 index 0000000..7f12257 --- /dev/null +++ b/day13/example4 @@ -0,0 +1,17 @@ +...#...####...#.. +.....##.##.##.... +##....######....# +..#.##.#..#.##... +##.###.####.###.# +..###...##...###. +#####.##..##.#### +#######....###### +###...#.##.#...## +....###.##.###... +##.####.##.####.# +..###...##...###. +##.#.##....##.#.# +##..#.#....#.#..# +##.###.#..#.###.# +###.#...##...#.## +..####.####.####. diff --git a/day13/notes.org b/day13/notes.org new file mode 100644 index 0000000..08a3d80 --- /dev/null +++ b/day13/notes.org @@ -0,0 +1,72 @@ +#+title: Notes +* part 2 problems +making example 3 from first field of my input + +.#..#.. +.##.### +..####. +##.##.# +#.####. +#.#.##. +##.##.# +..####. +.##.### +.#..#.. +##..... +#.###.# +##..... +##..... +#.###.# +* the mirror should be between 4 & 5 +but my output is +horizontal: Mirror (full false) between 4 and 5. successful lines: map[0:{} 1:{} 2:{} 3:{} 4:{} 6:{} 7:{} 8:{} 9:{} 10:{} 11:{} 12:{} 13:{} 14:{}] ; failed lines: map[5:1]. Max check dist: 4 + +why is line 4 marked as successful? + +** let's turn off verticals, and only look at checks for horizontal 4 +** why do i have 'row 4, mirrored 0'? +because of 'should check false' i guess +** now example 3 works, but some other still don't find the mirror +* another example +error should be on line 2 + +...#...####...#.. +.....##.##.##.... +##....######....# +..#.##.#..#.##... +##.###.####.###.# +..###...##...###. +#####.##..##.#### +#######....###### +###...#.##.#...## +....###.##.###... +##.####.##.####.# +..###...##...###. +##.#.##....##.#.# +##..#.#....#.#..# +##.###.#..#.###.# +###.#...##...#.## +..####.####.####. +** deleting around (8,9) +..... +..... +##..# +..#.. +##..# +..##. +##### +##### +##### +..... +##..# +..##. +##..# +##..# +##..# +##### +..##. + +error should be (2, 3) +** let's only keep vertical, with Smaller 8 +oh, there should be 'line 3, 1 error', but there also should be 'line 2, 1 error' +why don't we have this?