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
|
col int
|
||||||
}
|
}
|
||||||
|
|
||||||
func isSymbol(s schematic, row, col int) bool {
|
func isSymbol(s schematic, c coord) bool {
|
||||||
if c, ok := s[coord{row, col}]; ok {
|
if c, ok := s[c]; ok {
|
||||||
return c.symb != 0
|
return c.symb != 0
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@ -87,20 +87,13 @@ func partOne() {
|
|||||||
for col := 0; col <= 139; col++ {
|
for col := 0; col <= 139; col++ {
|
||||||
if entry, ok := schematic[coord{row, col}]; ok && entry.symb == 0 {
|
if entry, ok := schematic[coord{row, col}]; ok && entry.symb == 0 {
|
||||||
part := mustAtoi(entry.num)
|
part := mustAtoi(entry.num)
|
||||||
if isSymbol(schematic, row, col-1) {
|
if isSymbol(schematic, coord{row, col - 1}) || isSymbol(schematic, coord{row, col + len(entry.num)}) {
|
||||||
// look behind
|
// look ahead and look behind
|
||||||
sum += part
|
|
||||||
}
|
|
||||||
if isSymbol(schematic, row, col+len(entry.num)) {
|
|
||||||
// look ahead
|
|
||||||
sum += part
|
sum += part
|
||||||
}
|
}
|
||||||
for i := -1; i < len(entry.num)+1; i++ {
|
for i := -1; i < len(entry.num)+1; i++ {
|
||||||
// check row above and below
|
// check row above and below
|
||||||
if isSymbol(schematic, row-1, col+i) {
|
if isSymbol(schematic, coord{row - 1, col + i}) || isSymbol(schematic, coord{row + 1, col + i}) {
|
||||||
sum += part
|
|
||||||
}
|
|
||||||
if isSymbol(schematic, row+1, col+i) {
|
|
||||||
sum += part
|
sum += part
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -149,38 +142,31 @@ func partTwo() {
|
|||||||
if entry, ok := schematic[coord{row, col}]; ok && entry.symb == 0 {
|
if entry, ok := schematic[coord{row, col}]; ok && entry.symb == 0 {
|
||||||
offset := len(entry.num)
|
offset := len(entry.num)
|
||||||
part := mustAtoi(entry.num)
|
part := mustAtoi(entry.num)
|
||||||
if isSymbol(schematic, row, col-1) {
|
found := false
|
||||||
k := coord{row, col - 1}
|
k := coord{}
|
||||||
if gears[k] != 0 {
|
if isSymbol(schematic, coord{row, col - 1}) {
|
||||||
sum += gears[k] * part
|
k = coord{row, col - 1}
|
||||||
} else {
|
found = true
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
if isSymbol(schematic, coord{row, col + offset}) {
|
||||||
|
k = coord{row, col + offset}
|
||||||
|
found = true
|
||||||
}
|
}
|
||||||
for i := -1; i < offset+1; i++ {
|
for i := -1; i < offset+1; i++ {
|
||||||
if isSymbol(schematic, row-1, col+i) {
|
if isSymbol(schematic, coord{row - 1, col + i}) {
|
||||||
k := coord{row - 1, col + i}
|
k = coord{row - 1, col + i}
|
||||||
if gears[k] != 0 {
|
found = true
|
||||||
sum += gears[k] * part
|
}
|
||||||
} else {
|
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
|
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 {
|
} else {
|
||||||
gears[k] = part
|
sum += gears[k] * part
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user