From 8cfcf274ff9de1d4c9f5d5bb5408fe21999b8b36 Mon Sep 17 00:00:00 2001 From: vmaksimkina Date: Sun, 25 Sep 2022 18:16:35 +0300 Subject: [PATCH 1/7] not really (at all) good solution --- exercises/main.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 exercises/main.go diff --git a/exercises/main.go b/exercises/main.go new file mode 100644 index 0000000..0c3ed0b --- /dev/null +++ b/exercises/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "fmt" +) + +func rearrange(s []int, pivot int) (i int) { + cnt, p := 0, s[pivot] + j := 0 + for ; j < len(s); j++ { + if s[j] == s[pivot] { + cnt++ + } + if s[j] < s[pivot] { + s[i], s[j] = s[j], s[i] + i++ + } + } + s[i], s[len(s)-1] = s[len(s)-1], s[i] + if cnt == 1 && p != 0 { + for i := 0; i < len(s); i++ { + if s[i] == p { + s[i], s[pivot+1] = s[pivot+1], s[i] + } + } + } + return i +} + +func main() { + s := []int{8, 4, 1, 0, 5, 9, 3, 7, 2, 6, 5} + fmt.Println(rearrange(s, 4), s) // Output: 5 [2 4 1 0 3 5 9 7 8 6] + + s4 := []int{4, 4, 4, 4} + fmt.Println(rearrange(s4, 2), s4) // Output: 5 [2 4 1 0 3 5 9 7 8 6] + + s0 := []int{0} + fmt.Println(rearrange(s0, 0), s0) // Output: 5 [2 4 1 0 3 5 9 7 8 6] + + s2 := []int{9, 6, 1, 7, 5, 9, 6, 5, 2, 6} + fmt.Println(rearrange(s2, 9), s2) // Output: 4 [2 5 1 5 6 9 6 7 6 9] + + s3 := []int{9, 6, 1, 7, 5, 9, 6, 5, 2, 0} + fmt.Println(rearrange(s3, 9), s3) // Output: 0 [0 6 1 7 5 9 6 5 2 9] +} From eccb2d60201d9ee70d5d604ae5119117a14da041 Mon Sep 17 00:00:00 2001 From: vmaksimkina Date: Sun, 25 Sep 2022 21:06:32 +0300 Subject: [PATCH 2/7] added tests --- exercises/main_test.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 exercises/main_test.go diff --git a/exercises/main_test.go b/exercises/main_test.go new file mode 100644 index 0000000..c4a08c6 --- /dev/null +++ b/exercises/main_test.go @@ -0,0 +1,23 @@ +package main + +import ( + "testing" +) + +func TestRearrange(t *testing.T) { + for _, tc := range []struct { + s []int + p int + want int + }{ + {[]int{8, 4, 1, 0, 5, 9, 3, 7, 2, 6}, 4, 5}, + {[]int{9, 6, 1, 7, 5, 9, 6, 5, 2, 6}, 9, 4}, + {[]int{9, 6, 1, 7, 5, 9, 6, 5, 2, 0}, 9, 0}, + {[]int{1, 7, 2, 3, 5, 4, 8, 6}, 1, 6}, + } { + got := tc.p + if got != tc.want { + t.Errorf("ERR: int(%b): got = %v, want = %v", tc.p, got, tc.want) + } + } +} From b999d14e0ce9a260d94044df7a60b6ae2efed96b Mon Sep 17 00:00:00 2001 From: vmaksimkina Date: Wed, 28 Sep 2022 20:42:49 +0300 Subject: [PATCH 3/7] tasks --- exercises/02_number/main.go | 20 ++++++++++++++++++++ exercises/03_fibonacci/main.go | 22 ++++++++++++++++++++++ exercises/04_is_power_of_two/main.go | 22 ++++++++++++++++++++++ exercises/05_sum_of_digits/main.go | 20 ++++++++++++++++++++ exercises/06_max_num/main.go | 26 ++++++++++++++++++++++++++ 5 files changed, 110 insertions(+) create mode 100644 exercises/02_number/main.go create mode 100644 exercises/03_fibonacci/main.go create mode 100644 exercises/04_is_power_of_two/main.go create mode 100644 exercises/05_sum_of_digits/main.go create mode 100644 exercises/06_max_num/main.go diff --git a/exercises/02_number/main.go b/exercises/02_number/main.go new file mode 100644 index 0000000..901c17d --- /dev/null +++ b/exercises/02_number/main.go @@ -0,0 +1,20 @@ +package main + +import "fmt" + +func number(i int) { + if i <= 0 { + return + } + fmt.Printf("%v\n", i) + if i >= 1 { + number(i - 1) + fmt.Printf("%v\n", i) + } +} + +func main() { + var i int + fmt.Scan(&i) + number(i) +} diff --git a/exercises/03_fibonacci/main.go b/exercises/03_fibonacci/main.go new file mode 100644 index 0000000..cf79fb8 --- /dev/null +++ b/exercises/03_fibonacci/main.go @@ -0,0 +1,22 @@ +package main + +import "fmt" + +func fibonacci(n, el1, el2 int) { + if n != 0 { + fmt.Printf("%v\n", el1) + sum_el := el1 + el2 + el1 = el2 + el2 = sum_el + n-- + fibonacci(n, el1, el2) + } +} + +func main() { + var n, el1, el2 int + el1 = 0 + el2 = 1 + fmt.Scan(&n) + fibonacci(n, el1, el2) +} diff --git a/exercises/04_is_power_of_two/main.go b/exercises/04_is_power_of_two/main.go new file mode 100644 index 0000000..062cbb5 --- /dev/null +++ b/exercises/04_is_power_of_two/main.go @@ -0,0 +1,22 @@ +package main + +import "fmt" + +func power(n int) { + if n == 1 { + fmt.Println("Is power of two") + return + } else if n <= 0 || n%2 != 0 { + fmt.Println("Is not power of 2") + return + } else if n >= 2 { + n /= 2 + power(n) + } +} + +func main() { + var n int + fmt.Scan(&n) + power(n) +} diff --git a/exercises/05_sum_of_digits/main.go b/exercises/05_sum_of_digits/main.go new file mode 100644 index 0000000..a067523 --- /dev/null +++ b/exercises/05_sum_of_digits/main.go @@ -0,0 +1,20 @@ +package main + +import "fmt" + +func sum(n, sum1 int) { + if n > 0 { + sum1 += n % 10 + n /= 10 + sum(n, sum1) + if n == 0 { + fmt.Println(sum1) + } + } +} + +func main() { + var n, sum1 int + fmt.Scan(&n) + sum(n, sum1) +} diff --git a/exercises/06_max_num/main.go b/exercises/06_max_num/main.go new file mode 100644 index 0000000..2bfb2d0 --- /dev/null +++ b/exercises/06_max_num/main.go @@ -0,0 +1,26 @@ +package main + +import "fmt" + +func max(s []int) (int, int) { + var min, max1, max2 int + + if len(s) > 0 { + min = s[0] + max1, max2 = max(s[1:]) + } + if min > max1 { + return min, max1 + } else if min > max2 { + return max1, min + } else { + return max1, max2 + } +} + +func main() { + //var max1, max2 int + s := []int{23, 10, 15, 0, 9, 20, 10} + fmt.Println(max(s)) + //max(s, max1, max2) +} From fed8a175d97ddcaf22b3f974b41b9b102ef00b3e Mon Sep 17 00:00:00 2001 From: vmaksimkina Date: Wed, 28 Sep 2022 21:03:58 +0300 Subject: [PATCH 4/7] added test --- exercises/06_max_num/main_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 exercises/06_max_num/main_test.go diff --git a/exercises/06_max_num/main_test.go b/exercises/06_max_num/main_test.go new file mode 100644 index 0000000..b064d75 --- /dev/null +++ b/exercises/06_max_num/main_test.go @@ -0,0 +1,28 @@ +package main + +import ( + "testing" +) + +func TestMax(t *testing.T) { + for _, tc := range []struct { + s []int + res1 int + res2 int + }{ + {[]int{20, 40, 20, 11, 38}, 40, 38}, + {[]int{10, 11, 13, 1, 2}, 13, 11}, + {[]int{40, 40, 40}, 40, 40}, + {[]int{10, 11, 13, 1, 2}, 13, 11}, + {[]int{40, 10, 20, 20}, 40, 20}, + {[]int{10, 11, 13, 1, 2}, 13, 11}, + {[]int{40, 1}, 40, 1}, + {[]int{10, 11, 13, 1, 2}, 13, 11}, + {[]int{10, 11, 13, 1, 2}, 13, 11}, + {[]int{-4, 2, 3}, 3, 2}, + } { + if max1, max2 := max(tc.s); max1 != tc.res1 || max2 != tc.res2 { + t.Errorf("got = %v, %v, want = %v, %v", max1, max2, tc.res1, tc.res2) + } + } +} From a899f4d3437d8551fa4526a68887c66412b6d6b8 Mon Sep 17 00:00:00 2001 From: vmaksimkina Date: Wed, 28 Sep 2022 21:15:22 +0300 Subject: [PATCH 5/7] added description --- exercises/02_number/main.go | 3 +++ exercises/03_fibonacci/main.go | 3 +++ exercises/04_is_power_of_two/main.go | 3 +++ exercises/06_max_num/main.go | 5 +++-- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/exercises/02_number/main.go b/exercises/02_number/main.go index 901c17d..13f7ff2 100644 --- a/exercises/02_number/main.go +++ b/exercises/02_number/main.go @@ -13,6 +13,9 @@ func number(i int) { } } +//time complexity: O(n) +//space complexity: O(n) + func main() { var i int fmt.Scan(&i) diff --git a/exercises/03_fibonacci/main.go b/exercises/03_fibonacci/main.go index cf79fb8..4bbcbe4 100644 --- a/exercises/03_fibonacci/main.go +++ b/exercises/03_fibonacci/main.go @@ -13,6 +13,9 @@ func fibonacci(n, el1, el2 int) { } } +//time complexity: O(n) +//space complexity: O(n) + func main() { var n, el1, el2 int el1 = 0 diff --git a/exercises/04_is_power_of_two/main.go b/exercises/04_is_power_of_two/main.go index 062cbb5..7becfe0 100644 --- a/exercises/04_is_power_of_two/main.go +++ b/exercises/04_is_power_of_two/main.go @@ -15,6 +15,9 @@ func power(n int) { } } +//time complexity: O(logn) +//space complexity: O(logn) + func main() { var n int fmt.Scan(&n) diff --git a/exercises/06_max_num/main.go b/exercises/06_max_num/main.go index 2bfb2d0..e37d8aa 100644 --- a/exercises/06_max_num/main.go +++ b/exercises/06_max_num/main.go @@ -18,9 +18,10 @@ func max(s []int) (int, int) { } } +//time complexity: O(n) +//space complexity: O(n) + func main() { - //var max1, max2 int s := []int{23, 10, 15, 0, 9, 20, 10} fmt.Println(max(s)) - //max(s, max1, max2) } From 394511b25e645f0fa7d15f3208645bd50643fcfa Mon Sep 17 00:00:00 2001 From: vmaksimkina Date: Wed, 28 Sep 2022 21:16:23 +0300 Subject: [PATCH 6/7] 05 description --- exercises/05_sum_of_digits/main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/exercises/05_sum_of_digits/main.go b/exercises/05_sum_of_digits/main.go index a067523..3bcb05a 100644 --- a/exercises/05_sum_of_digits/main.go +++ b/exercises/05_sum_of_digits/main.go @@ -13,6 +13,9 @@ func sum(n, sum1 int) { } } +//time complexity: O(n) +//space complexity: O(n) + func main() { var n, sum1 int fmt.Scan(&n) From 1aaf6ae83e33b9a1d075ad56215843defce1d921 Mon Sep 17 00:00:00 2001 From: vmaksimkina Date: Wed, 28 Sep 2022 22:27:02 +0300 Subject: [PATCH 7/7] example tests --- exercises/02_number/main_test.go | 28 +++++++++++++++++++++++ exercises/03_fibonacci/main_test.go | 16 +++++++++++++ exercises/04_is_power_of_two/main_test.go | 7 ++++++ exercises/05_sum_of_digits/main_test.go | 10 ++++++++ 4 files changed, 61 insertions(+) create mode 100644 exercises/02_number/main_test.go create mode 100644 exercises/03_fibonacci/main_test.go create mode 100644 exercises/04_is_power_of_two/main_test.go create mode 100644 exercises/05_sum_of_digits/main_test.go diff --git a/exercises/02_number/main_test.go b/exercises/02_number/main_test.go new file mode 100644 index 0000000..a48717c --- /dev/null +++ b/exercises/02_number/main_test.go @@ -0,0 +1,28 @@ +package main + +func Examplenumber() { + number(11) + // Output: + // 11 + // 10 + // 9 + // 8 + // 7 + // 6 + // 5 + // 4 + // 3 + // 2 + // 1 + // 1 + // 2 + // 3 + // 4 + // 5 + // 6 + // 7 + // 8 + // 9 + // 10 + // 11 +} diff --git a/exercises/03_fibonacci/main_test.go b/exercises/03_fibonacci/main_test.go new file mode 100644 index 0000000..544f219 --- /dev/null +++ b/exercises/03_fibonacci/main_test.go @@ -0,0 +1,16 @@ +package main + +func Examplefibonacci() { + fibonacci(10, 0, 1) + // Output: + // 0 + // 1 + // 1 + // 2 + // 3 + // 5 + // 8 + // 13 + // 21 + // 34 +} diff --git a/exercises/04_is_power_of_two/main_test.go b/exercises/04_is_power_of_two/main_test.go new file mode 100644 index 0000000..0e1f390 --- /dev/null +++ b/exercises/04_is_power_of_two/main_test.go @@ -0,0 +1,7 @@ +package main + +func Examplepower() { + power(14) + // Output: + // Is not power of 2 +} diff --git a/exercises/05_sum_of_digits/main_test.go b/exercises/05_sum_of_digits/main_test.go new file mode 100644 index 0000000..66066e3 --- /dev/null +++ b/exercises/05_sum_of_digits/main_test.go @@ -0,0 +1,10 @@ +package main + +var sum1 int + +func Examplesum() { + sum(1112, sum1) + // Output: + // 1112 + // 5 +}