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:
parent
85dd9a31e3
commit
3128ab673f
|
@ -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 {
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
.#..#..
|
||||
.##.###
|
||||
..####.
|
||||
##.##.#
|
||||
#.####.
|
||||
#.#.##.
|
||||
##.##.#
|
||||
..####.
|
||||
.##.###
|
||||
.#..#..
|
||||
##.....
|
||||
#.###.#
|
||||
##.....
|
||||
##.....
|
||||
#.###.#
|
|
@ -0,0 +1,17 @@
|
|||
...#...####...#..
|
||||
.....##.##.##....
|
||||
##....######....#
|
||||
..#.##.#..#.##...
|
||||
##.###.####.###.#
|
||||
..###...##...###.
|
||||
#####.##..##.####
|
||||
#######....######
|
||||
###...#.##.#...##
|
||||
....###.##.###...
|
||||
##.####.##.####.#
|
||||
..###...##...###.
|
||||
##.#.##....##.#.#
|
||||
##..#.#....#.#..#
|
||||
##.###.#..#.###.#
|
||||
###.#...##...#.##
|
||||
..####.####.####.
|
|
@ -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?
|
Loading…
Reference in New Issue