62 lines
952 B
Go
62 lines
952 B
Go
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]++
|
|
|
|
}
|
|
}
|