From a7c413c8ed84af3aa1b02a95454e4ef8f6d16df1 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 25 Sep 2022 19:40:32 +0300 Subject: [PATCH 1/2] Homework --- exercises/main.go | 21 +++++++++++++++++++++ exercises/main_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 exercises/main.go create mode 100644 exercises/main_test.go diff --git a/exercises/main.go b/exercises/main.go new file mode 100644 index 0000000..70d84a3 --- /dev/null +++ b/exercises/main.go @@ -0,0 +1,21 @@ +package main + +func rearrange(s []int, pivot int) (i int) { + l, r, p := 0, len(s)-1, s[pivot] + for { + for s[l] < p { + l++ + } + for s[r] > p { + r-- + } + if l >= r { + return r + } + if s[l] != s[r] { + s[l], s[r] = s[r], s[l] + } else { + r-- + } + } +} diff --git a/exercises/main_test.go b/exercises/main_test.go new file mode 100644 index 0000000..48f8887 --- /dev/null +++ b/exercises/main_test.go @@ -0,0 +1,34 @@ +package main + +import ( + "testing" +) + +func TestRearrange(t *testing.T) { + for _, tc := range []struct { + name string + s []int + pivot int + want int + }{ + {"no repeated elements", []int{8, 4, 1, 0, 5, 9, 3, 7, 2, 6}, 4, 5}, + {"repeated elements", []int{9, 6, 1, 7, 5, 9, 6, 5, 2, 6}, 9, 4}, + {"empty left side", []int{9, 6, 1, 7, 5, 9, 6, 5, 2, 0}, 9, 0}, + } { + t.Run(tc.name, func(t *testing.T) { + got := rearrange(tc.s, tc.pivot) + areLess(tc.s[:got], tc.s[got], t) + if got != tc.want { + t.Errorf("got = %v, want = %v", got, tc.want) + } + }) + } +} + +func areLess(s []int, p int, t *testing.T) { + for _, e := range s { + if e > p { + t.Errorf("%v > %v", e, p) + } + } +} From a1a0d5d6fbc88c294533542435cb89d1c6d914ae Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 28 Sep 2022 22:36:33 +0300 Subject: [PATCH 2/2] Tasks 2-6 --- exercises/fibonacci/main.go | 32 ++++++++++++++++++++++++++++++++ exercises/isPowerOf2/main.go | 17 +++++++++++++++++ exercises/maxNumber/main.go | 21 +++++++++++++++++++++ exercises/numbers/main.go | 15 +++++++++++++++ exercises/sumDigits/main.go | 24 ++++++++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 exercises/fibonacci/main.go create mode 100644 exercises/isPowerOf2/main.go create mode 100644 exercises/maxNumber/main.go create mode 100644 exercises/numbers/main.go create mode 100644 exercises/sumDigits/main.go diff --git a/exercises/fibonacci/main.go b/exercises/fibonacci/main.go new file mode 100644 index 0000000..73c9202 --- /dev/null +++ b/exercises/fibonacci/main.go @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" +) + +func fibonacci(n, n1, n2 int) { + if n == 0 { + return + } + fmt.Printf("%v ", n2) + fibonacci(n-1, n2, n1+n2) +} + +func main() { + fibonacci(1, 0, 1) + fmt.Println() + fibonacci(2, 0, 1) + fmt.Println() + fibonacci(3, 0, 1) + fmt.Println() + fibonacci(4, 0, 1) + fmt.Println() + fibonacci(5, 0, 1) + fmt.Println() + fibonacci(6, 0, 1) + fmt.Println() + fibonacci(7, 0, 1) +} + +// Time complexity: O(n) +// Space complexity: O(n) diff --git a/exercises/isPowerOf2/main.go b/exercises/isPowerOf2/main.go new file mode 100644 index 0000000..912d41c --- /dev/null +++ b/exercises/isPowerOf2/main.go @@ -0,0 +1,17 @@ +package main + +import "fmt" + +func isPowerOf2(n int) { + if n%2 == 1 && n != 1 { + fmt.Println("NO") + return + } else if n == 1 { + fmt.Println("YES") + return + } + isPowerOf2(n / 2) +} + +// Time complexity: O(log(n)) +// Space complexity: O(log(n)) diff --git a/exercises/maxNumber/main.go b/exercises/maxNumber/main.go new file mode 100644 index 0000000..5d785f2 --- /dev/null +++ b/exercises/maxNumber/main.go @@ -0,0 +1,21 @@ +package main + +import ( + "fmt" +) + +func max(s []int, i, max1, max2 int) { + if i == len(s) { + fmt.Println(max1, max2) + return + } + if max2 < s[i] && s[i] <= max1 { + max2 = s[i] + } else if max1 < s[i] { + max1, max2 = s[i], max1 + } + max(s, i+1, max1, max2) +} + +// Time complexity: O(n) +// Space complexity: O(n) diff --git a/exercises/numbers/main.go b/exercises/numbers/main.go new file mode 100644 index 0000000..766a91d --- /dev/null +++ b/exercises/numbers/main.go @@ -0,0 +1,15 @@ +package main + +import "fmt" + +func print(n int) { + if n == 0 { + return + } + fmt.Println(n) + print(n - 1) + fmt.Println(n) +} + +// Time complexity: O(n) +// Space complexity: O(n) diff --git a/exercises/sumDigits/main.go b/exercises/sumDigits/main.go new file mode 100644 index 0000000..19fef06 --- /dev/null +++ b/exercises/sumDigits/main.go @@ -0,0 +1,24 @@ +package main + +import ( + "fmt" +) + +func sumDigits(n, sum int) { + if n == 0 { + fmt.Println(sum) + return + } + sum += n % 10 + sumDigits(n/10, sum) +} + +func main() { + sumDigits(123, 0) + sumDigits(987, 0) + sumDigits(12345, 0) + sumDigits(12357, 0) +} + +// Time complexity: O(n) +// Space complexity: O(n)