package util import ( "bufio" "bytes" "io/ioutil" "os" "strconv" "strings" ) // ReadInput isn't here to make friends. It is highly specific to this domain. // It assumes the first argument on the command-line is a file with input. It // returns an array of strings containing the lines of that file. func ReadInput() []string { file, err := os.Open(os.Args[1]) if err != nil { panic(err) } lines := []string{} scanner := bufio.NewScanner(file) for scanner.Scan() { lines = append(lines, scanner.Text()) } return lines } // ReadInputBytes is like ReadInput, but returns a byte array. func ReadInputBytes() []byte { rawData, err := ioutil.ReadFile(os.Args[1]) if err != nil { panic(err) } return bytes.TrimRight(rawData, "\n") } // ReadInputInts is like ReadInput, but returns an array of ints. (space-separated in the input) func ReadInputInts() []int { rawData, err := ioutil.ReadFile(os.Args[1]) if err != nil { panic(err) } strData := strings.Split(strings.TrimSpace(string(rawData)), " ") data := []int{} for _, newIntStr := range strData { newInt, err := strconv.Atoi(newIntStr) if err != nil { panic(err) } data = append(data, newInt) } return data }