diff --git a/92_square_digit_chains/main.go b/92_square_digit_chains/main.go new file mode 100644 index 0000000..e1462c4 --- /dev/null +++ b/92_square_digit_chains/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "strconv" +) + +func main() { + count := 0 + for i := 1; i < 10000000; i++ { + if goChain(i) { + count++ + } + } + fmt.Println(count) +} + +func goChain(n int) bool { + s := strconv.Itoa(n) + sum := 0 + for _, c := range s { + i, _ := strconv.Atoi(string(c)) + sum += i * i + } + if sum == 89 { + return true + } else if sum == 1 { + return false + } + return goChain(sum) +} diff --git a/92_square_digit_chains/main_test.go b/92_square_digit_chains/main_test.go new file mode 100644 index 0000000..ea4ef24 --- /dev/null +++ b/92_square_digit_chains/main_test.go @@ -0,0 +1,32 @@ +package main + +import "testing" + +func Test_goChain(t *testing.T) { + type args struct { + n int + } + tests := []struct { + name string + args args + want bool + }{ + { + "test1", + args{44}, + false, + }, + { + "test2", + args{85}, + true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := goChain(tt.args.n); got != tt.want { + t.Errorf("goChain() = %v, want %v", got, tt.want) + } + }) + } +}