package main import "os" import "fmt" import "strconv" // go run 6.go N N N N func main() { var banks []int seen := make(map[string]int) s := os.Args[1:] for _, element := range s { i, _ := strconv.Atoi(element) banks = append(banks, i) } fmt.Println(banks) count := 0 first := 0 for { count++ // find largest (lowest indexed wins) largest := 0 largestSize := -1 for pos, size := range banks { if largestSize < size { largestSize = size largest = pos } } fmt.Println(largest, largestSize) // redistribute banks[largest] = 0 for i := 0; i < largestSize; i++ { largest = (largest + 1) % len(banks) banks[largest]++ } // laziness.. keep := fmt.Sprint(banks) fmt.Println(count, keep) if seen[keep] == 1 && first == 0 { first = count } if seen[keep] == 2 { fmt.Println("total:", count, "first:", first, "second:", (count - first)) os.Exit(0) } seen[keep]++ } }