code.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "log"
  6. "os"
  7. "strconv"
  8. "strings"
  9. )
  10. func readInput(file *os.File) ([][]int, []string) {
  11. scanner := bufio.NewScanner(file)
  12. var numbers [][]int
  13. var symbols []string
  14. for scanner.Scan() {
  15. line := scanner.Text()
  16. if line == "" {
  17. continue
  18. }
  19. if line[0] == '+' || line[0] == '*' {
  20. parts := strings.Split(line, " ")
  21. for _, part := range parts {
  22. if part == "" || part == " " {
  23. continue
  24. }
  25. symbols = append(symbols, strings.Trim(part, " "))
  26. }
  27. } else {
  28. var lineNumbers []int
  29. parts := strings.Split(line, " ")
  30. for _, part := range parts {
  31. if part == "" || part == " " {
  32. continue
  33. }
  34. i, err := strconv.Atoi(strings.Trim(part, " "))
  35. if err != nil {
  36. log.Fatalf("Bad input: %s", part)
  37. }
  38. lineNumbers = append(lineNumbers, i)
  39. }
  40. numbers = append(numbers, lineNumbers)
  41. }
  42. }
  43. return numbers, symbols
  44. }
  45. func main() {
  46. if len(os.Args) < 2 {
  47. log.Fatal("You need to specify a file!")
  48. }
  49. filePath := os.Args[1]
  50. file, err := os.Open(filePath)
  51. if err != nil {
  52. log.Fatalf("Failed to open %s!\n", filePath)
  53. }
  54. numbers, symbols := readInput(file)
  55. fmt.Println(numbers, symbols)
  56. }