adventofcode/2019/day17/part1.go

70 lines
1.1 KiB
Go

package main
import (
"fmt"
intcode "git.bullercodeworks.com/brian/adventofcode/2019/intcode-processor"
"time"
)
func part1(prog []int) {
p := intcode.NewProgram(prog)
go func() {
var line []byte
for {
for !p.NeedsOutput() {
time.Sleep(1)
}
out := byte(p.Output())
fmt.Print(string(out))
if out == '\n' {
layout = append(layout, line)
line = []byte{}
} else {
line = append(line, out)
}
}
}()
fmt.Println("Running")
p.Run()
fmt.Println("Done")
var total int
for y := range layout {
for x := range layout[y] {
if IsIntersection(x, y) {
total = total + (x * y)
fmt.Print("O")
} else {
fmt.Print(string(layout[y][x]))
}
}
fmt.Println()
}
fmt.Println("# Part 1: ", total)
}
func IsIntersection(x, y int) bool {
if y == 0 || y == len(layout)-2 {
return false
} else if x == 0 || x == len(layout[y])-2 {
return false
}
if layout[y][x] != '#' {
return false
}
if layout[y-1][x] != '#' {
return false
}
if layout[y+1][x] != '#' {
return false
}
if layout[y][x-1] != '#' {
return false
}
if layout[y][x+1] != '#' {
return false
}
return true
}