package main import ( "bufio" "fmt" "io/ioutil" "os" "strings" "time" intcode "git.bullercodeworks.com/brian/adventofcode/2019/intcode-processor" helpers "git.bullercodeworks.com/brian/adventofcode/helpers" ) func main() { progFileName := "input" if len(os.Args) > 1 { progFileName = os.Args[1] } dat, err := ioutil.ReadFile(progFileName) if err != nil { fmt.Println("Error reading program file:", err.Error()) os.Exit(1) } var prog []int stringDat := strings.TrimSpace(string(dat)) for _, v := range strings.Split(stringDat, ",") { prog = append(prog, helpers.Atoi(v)) } fmt.Println("Day 5, part 1: Input '1'") fmt.Println("Day 5, part 2: Input '5'") p := intcode.NewProgram(prog) go func() { for { if st := p.State(); st != intcode.RET_OK { if st == intcode.RET_ERR { os.Exit(1) } else { os.Exit(0) } } if p.NeedsInput() { fmt.Print("Requesting Input: ") reader := bufio.NewReader(os.Stdin) inp, err := reader.ReadString('\n') if err != nil { fmt.Println("Input Error:", err.Error()) } else { p.Input(helpers.Atoi(strings.TrimSpace(inp))) } } if p.NeedsOutput() { fmt.Println(p.Output()) } switch p.State() { case intcode.RET_ERR: panic(p.Error()) case intcode.RET_DONE: break } time.Sleep(1) } }() p.Run() }