a little more refactoring
This commit is contained in:
parent
4e64387873
commit
561b10916d
64
03/main.go
64
03/main.go
@ -45,8 +45,8 @@ type coord struct {
|
||||
col int
|
||||
}
|
||||
|
||||
func isSymbol(s schematic, row, col int) bool {
|
||||
if c, ok := s[coord{row, col}]; ok {
|
||||
func isSymbol(s schematic, c coord) bool {
|
||||
if c, ok := s[c]; ok {
|
||||
return c.symb != 0
|
||||
}
|
||||
return false
|
||||
@ -87,20 +87,13 @@ func partOne() {
|
||||
for col := 0; col <= 139; col++ {
|
||||
if entry, ok := schematic[coord{row, col}]; ok && entry.symb == 0 {
|
||||
part := mustAtoi(entry.num)
|
||||
if isSymbol(schematic, row, col-1) {
|
||||
// look behind
|
||||
sum += part
|
||||
}
|
||||
if isSymbol(schematic, row, col+len(entry.num)) {
|
||||
// look ahead
|
||||
if isSymbol(schematic, coord{row, col - 1}) || isSymbol(schematic, coord{row, col + len(entry.num)}) {
|
||||
// look ahead and look behind
|
||||
sum += part
|
||||
}
|
||||
for i := -1; i < len(entry.num)+1; i++ {
|
||||
// check row above and below
|
||||
if isSymbol(schematic, row-1, col+i) {
|
||||
sum += part
|
||||
}
|
||||
if isSymbol(schematic, row+1, col+i) {
|
||||
if isSymbol(schematic, coord{row - 1, col + i}) || isSymbol(schematic, coord{row + 1, col + i}) {
|
||||
sum += part
|
||||
}
|
||||
}
|
||||
@ -149,38 +142,31 @@ func partTwo() {
|
||||
if entry, ok := schematic[coord{row, col}]; ok && entry.symb == 0 {
|
||||
offset := len(entry.num)
|
||||
part := mustAtoi(entry.num)
|
||||
if isSymbol(schematic, row, col-1) {
|
||||
k := coord{row, col - 1}
|
||||
if gears[k] != 0 {
|
||||
sum += gears[k] * part
|
||||
} else {
|
||||
gears[k] = part
|
||||
}
|
||||
}
|
||||
if isSymbol(schematic, row, col+offset) {
|
||||
k := coord{row, col + offset}
|
||||
if gears[k] != 0 {
|
||||
sum += gears[k] * part
|
||||
} else {
|
||||
gears[k] = part
|
||||
found := false
|
||||
k := coord{}
|
||||
if isSymbol(schematic, coord{row, col - 1}) {
|
||||
k = coord{row, col - 1}
|
||||
found = true
|
||||
}
|
||||
if isSymbol(schematic, coord{row, col + offset}) {
|
||||
k = coord{row, col + offset}
|
||||
found = true
|
||||
}
|
||||
for i := -1; i < offset+1; i++ {
|
||||
if isSymbol(schematic, row-1, col+i) {
|
||||
k := coord{row - 1, col + i}
|
||||
if gears[k] != 0 {
|
||||
sum += gears[k] * part
|
||||
} else {
|
||||
if isSymbol(schematic, coord{row - 1, col + i}) {
|
||||
k = coord{row - 1, col + i}
|
||||
found = true
|
||||
}
|
||||
if isSymbol(schematic, coord{row + 1, col + i}) {
|
||||
k = coord{row + 1, col + i}
|
||||
found = true
|
||||
}
|
||||
}
|
||||
if found {
|
||||
if gears[k] == 0 {
|
||||
gears[k] = part
|
||||
}
|
||||
}
|
||||
if isSymbol(schematic, row+1, col+i) {
|
||||
k := coord{row + 1, col + i}
|
||||
if gears[k] != 0 {
|
||||
sum += gears[k] * part
|
||||
} else {
|
||||
gears[k] = part
|
||||
}
|
||||
sum += gears[k] * part
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user