day12.go 1009 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "log"
  6. "os"
  7. )
  8. type sequence struct {
  9. action string
  10. value int
  11. }
  12. func readFile(file *os.File) ([]sequence, error) {
  13. var sequences []sequence
  14. scanner := bufio.NewScanner(file)
  15. for scanner.Scan() {
  16. var p sequence
  17. line := scanner.Text()
  18. if line == "" {
  19. break
  20. }
  21. n, err := fmt.Sscanf(line, "%1s%d\n", &p.action, &p.value)
  22. if err != nil || n != 2 {
  23. return sequences, fmt.Errorf("Error scanning '%s': %s", line, err)
  24. }
  25. sequences = append(sequences, p)
  26. }
  27. if err := scanner.Err(); err != nil {
  28. return sequences, fmt.Errorf("Scanner error: %s", err)
  29. }
  30. return sequences, nil
  31. }
  32. func main() {
  33. if len(os.Args) < 2 {
  34. log.Fatal("You need to specify a file!")
  35. }
  36. file, err := os.Open(os.Args[1])
  37. if err != nil {
  38. log.Fatalf("Failed to open %s!\n", os.Args[1])
  39. }
  40. sequences, err := readFile(file)
  41. if err != nil {
  42. log.Fatalf("Can't read sequences!\n%s", err)
  43. }
  44. for _, item := range sequences {
  45. fmt.Println(item)
  46. }
  47. file.Close()
  48. }