Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions exercises/02_number/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
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)
}
}

//time complexity: O(n)
//space complexity: O(n)

func main() {
var i int
fmt.Scan(&i)
number(i)
}
28 changes: 28 additions & 0 deletions exercises/02_number/main_test.go
Original file line number Diff line number Diff line change
@@ -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
}
25 changes: 25 additions & 0 deletions exercises/03_fibonacci/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
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)
}
}

//time complexity: O(n)
//space complexity: O(n)

func main() {
var n, el1, el2 int
el1 = 0
el2 = 1
fmt.Scan(&n)
fibonacci(n, el1, el2)
}
16 changes: 16 additions & 0 deletions exercises/03_fibonacci/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package main

func Examplefibonacci() {
fibonacci(10, 0, 1)
// Output:
// 0
// 1
// 1
// 2
// 3
// 5
// 8
// 13
// 21
// 34
}
25 changes: 25 additions & 0 deletions exercises/04_is_power_of_two/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
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)
}
}

//time complexity: O(logn)
//space complexity: O(logn)

func main() {
var n int
fmt.Scan(&n)
power(n)
}
7 changes: 7 additions & 0 deletions exercises/04_is_power_of_two/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package main

func Examplepower() {
power(14)
// Output:
// Is not power of 2
}
23 changes: 23 additions & 0 deletions exercises/05_sum_of_digits/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
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)
}
}
}

//time complexity: O(n)
//space complexity: O(n)

func main() {
var n, sum1 int
fmt.Scan(&n)
sum(n, sum1)
}
10 changes: 10 additions & 0 deletions exercises/05_sum_of_digits/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package main

var sum1 int

func Examplesum() {
sum(1112, sum1)
// Output:
// 1112
// 5
}
27 changes: 27 additions & 0 deletions exercises/06_max_num/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
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
}
}

//time complexity: O(n)
//space complexity: O(n)

func main() {
s := []int{23, 10, 15, 0, 9, 20, 10}
fmt.Println(max(s))
}
28 changes: 28 additions & 0 deletions exercises/06_max_num/main_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
}
}
45 changes: 45 additions & 0 deletions exercises/main.go
Original file line number Diff line number Diff line change
@@ -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]
}
23 changes: 23 additions & 0 deletions exercises/main_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
}
}