package main import ( "bufio" "fmt" "log" "math" "os" ) type box struct { x, y, z int id, best int inCircuit bool } func (p box) DistanceTo(other box) float64 { dx := other.x - p.x dy := other.y - p.y dz := other.z - p.z return math.Sqrt(float64(dx*dx + dy*dy + dz*dz)) } func readInput(file *os.File) []box { scanner := bufio.NewScanner(file) var boxes []box var id int for scanner.Scan() { line := scanner.Text() if line == "" { continue } var x, y, z int n, err := fmt.Sscanf(line, "%d,%d,%d", &x, &y, &z) if n != 3 || err != nil { log.Fatalf("Bad input: %s", line) } boxes = append(boxes, box{x: x, y: y, z: z, id: id}) id++ } return boxes } type circuit struct { first, second int boxes []box } type distance struct { first, second int value float64 } func part1(boxes []box) int { var result int var distances []distance for i := range boxes { for j := i + 1; j < len(boxes); j++ { howFar := boxes[j].DistanceTo(boxes[i]) distances = append(distances, distance{first: boxes[i].id, second: boxes[j].id, value: howFar}) } } fmt.Println(distances) return result } func main() { if len(os.Args) < 2 { log.Fatal("You need to specify a file!") } filePath := os.Args[1] file, err := os.Open(filePath) if err != nil { log.Fatalf("Failed to open %s!\n", filePath) } boxes := readInput(file) part1(boxes) }