diff --git a/20201216/main.go b/20201216/main.go new file mode 100644 index 0000000..42d3acc --- /dev/null +++ b/20201216/main.go @@ -0,0 +1,31 @@ +package main + +import "fmt" + +func main() { + +} + +func process(n int) []string { + m := make(map[string]struct{}) + for i := 2; i <= n; i++ { + for j := 1; j < i; j++ { + g := findGCD(i, j) + m[fmt.Sprintf("%d/%d", j/g, i/g)] = struct{}{} + } + } + var ret []string + for k := range m { + ret = append(ret, k) + } + return ret +} + +func findGCD(a, b int) int { + for a > 0 { + t := a + a = b % a + b = t + } + return b +} diff --git a/20201216/main_test.go b/20201216/main_test.go new file mode 100644 index 0000000..9c0c839 --- /dev/null +++ b/20201216/main_test.go @@ -0,0 +1,63 @@ +package main + +import ( + "reflect" + "sort" + "testing" +) + +func Test_process(t *testing.T) { + type args struct { + n int + } + tests := []struct { + name string + args args + want []string + }{ + { + "test1", + args{ + n: 2, + }, + []string{"1/2"}, + }, + { + "test2", + args{ + n: 3, + }, + []string{"1/2", "1/3", "2/3"}, + }, + { + "test3", + args{ + n: 4, + }, + []string{"1/2", "1/3", "1/4", "2/3", "3/4"}, + }, + { + "test4", + args{ + n: 1, + }, + nil, + }, + { + "test5", + args{ + n: 9, + }, + []string{"1/2", "1/3", "1/4", "1/5", "1/6", "1/7", "1/8", "1/9", "2/3", "2/5", "2/7", "2/9", "3/4", "3/5", "3/7", "3/8", "4/5", "4/7", "4/9", "5/6", "5/7", "5/8", "5/9", "6/7", "7/8", "7/9", "8/9"}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := process(tt.args.n) + sort.Strings(got) + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("process() = %v, want %v", got, tt.want) + } + }) + } +}