code.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "log"
  6. "os"
  7. )
  8. type Object struct {
  9. xmin, ymin, zmin int
  10. xmax, ymax, zmax int
  11. }
  12. func readInput(file *os.File) (map[int][]Object, map[int][]Object, []Object) {
  13. scanner := bufio.NewScanner(file)
  14. startsAt := make(map[int][]Object)
  15. endsAt := make(map[int][]Object)
  16. var objects []Object
  17. for scanner.Scan() {
  18. line := scanner.Text()
  19. if line == "" {
  20. break
  21. }
  22. var object Object
  23. n, err := fmt.Sscanf(line, "%d,%d,%d~%d,%d,%d", &object.xmin, &object.ymin, &object.zmin, &object.xmax, &object.ymax, &object.zmax)
  24. if n != 6 || err != nil {
  25. log.Fatalf("Bad input: %s\n%s", line, err)
  26. }
  27. startsAt[object.zmin] = append(startsAt[object.zmin], object)
  28. endsAt[object.zmax] = append(endsAt[object.zmax], object)
  29. objects = append(objects, object)
  30. }
  31. return startsAt, endsAt, objects
  32. }
  33. func main() {
  34. if len(os.Args) < 2 {
  35. log.Fatal("You need to specify a file!")
  36. }
  37. filePath := os.Args[1]
  38. file, err := os.Open(filePath)
  39. if err != nil {
  40. log.Fatalf("Failed to open %s!\n", filePath)
  41. }
  42. startsAt, endsAt, objects := readInput(file)
  43. fmt.Println(startsAt, endsAt, objects)
  44. }