1package main
2
3import (
4 "strings"
5 "fmt"
6 "log"
7)
8
9func collatz(a int) int {
10 if a % 2 == 0 {
11 return a / 2;
12 }
13
14 return 3 * a + 1;
15}
16
17func collatzSequence(a int) (string, error) {
18 var sb strings.Builder
19 _, err := fmt.Fprintf(&sb, "%d: ", a)
20 if err != nil {
21 return "", err
22 }
23
24 for i := a; i >= 1; i = collatz(i) {
25 if (i == 1) {
26 _, err = sb.WriteString("1")
27 if err != nil {
28 return "", err
29 }
30 break
31 }
32 _, err = fmt.Fprintf(&sb, "%d, ", i)
33 if err != nil {
34 return "", err
35 }
36 }
37
38 return sb.String(), nil
39}
40
41func main() {
42 var err error
43 var message string
44 for i := 1; i <= 10000; i++ {
45 message, err = collatzSequence(i)
46 if err != nil {
47 log.Fatalln(err)
48 }
49 fmt.Println(message)
50 }
51}