60 lines
872 B
Go
60 lines
872 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
const jobs = 12
|
|
|
|
type environment struct{ seq, cnt int }
|
|
|
|
var (
|
|
env [jobs]environment
|
|
seq, cnt *int
|
|
)
|
|
|
|
func hail() {
|
|
fmt.Printf("% 4d", *seq)
|
|
if *seq == 1 {
|
|
return
|
|
}
|
|
(*cnt)++
|
|
if *seq&1 != 0 {
|
|
*seq = 3*(*seq) + 1
|
|
} else {
|
|
*seq /= 2
|
|
}
|
|
}
|
|
|
|
func switchTo(id int) {
|
|
seq = &env[id].seq
|
|
cnt = &env[id].cnt
|
|
}
|
|
|
|
func main() {
|
|
for i := 0; i < jobs; i++ {
|
|
switchTo(i)
|
|
env[i].seq = i + 1
|
|
}
|
|
|
|
again:
|
|
for i := 0; i < jobs; i++ {
|
|
switchTo(i)
|
|
hail()
|
|
}
|
|
fmt.Println()
|
|
|
|
for j := 0; j < jobs; j++ {
|
|
switchTo(j)
|
|
if *seq != 1 {
|
|
goto again
|
|
}
|
|
}
|
|
fmt.Println()
|
|
|
|
fmt.Println("COUNTS:")
|
|
for i := 0; i < jobs; i++ {
|
|
switchTo(i)
|
|
fmt.Printf("% 4d", *cnt)
|
|
}
|
|
fmt.Println()
|
|
}
|