master amadaluzia/rosetta-collatz / go / main.go
 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}