Skip to content

Commit dbe5e1a

Browse files
authored
Merge pull request #2119 from codeflash-ai/cf-go-language-support
[FEAT] Base Golang omni
2 parents 0a2ec48 + ec44654 commit dbe5e1a

61 files changed

Lines changed: 8856 additions & 6 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

code_to_optimize/go/algorithms.go

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
package sample
2+
3+
import "strings"
4+
5+
func TwoSum(nums []int, target int) [2]int {
6+
for i := 0; i < len(nums); i++ {
7+
for j := i + 1; j < len(nums); j++ {
8+
if nums[i]+nums[j] == target {
9+
return [2]int{i, j}
10+
}
11+
}
12+
}
13+
return [2]int{-1, -1}
14+
}
15+
16+
func FindDuplicates(nums []int) []int {
17+
var result []int
18+
for i := 0; i < len(nums); i++ {
19+
found := false
20+
for j := 0; j < i; j++ {
21+
if nums[i] == nums[j] {
22+
found = true
23+
break
24+
}
25+
}
26+
if found {
27+
alreadyAdded := false
28+
for _, r := range result {
29+
if r == nums[i] {
30+
alreadyAdded = true
31+
break
32+
}
33+
}
34+
if !alreadyAdded {
35+
result = append(result, nums[i])
36+
}
37+
}
38+
}
39+
return result
40+
}
41+
42+
func UniqueElements(nums []int) []int {
43+
var result []int
44+
for _, num := range nums {
45+
found := false
46+
for _, r := range result {
47+
if r == num {
48+
found = true
49+
break
50+
}
51+
}
52+
if !found {
53+
result = append(result, num)
54+
}
55+
}
56+
return result
57+
}
58+
59+
func MostFrequent(nums []int) int {
60+
if len(nums) == 0 {
61+
return 0
62+
}
63+
64+
maxCount := 0
65+
maxNum := nums[0]
66+
67+
for _, num := range nums {
68+
count := 0
69+
for _, other := range nums {
70+
if other == num {
71+
count++
72+
}
73+
}
74+
if count > maxCount {
75+
maxCount = count
76+
maxNum = num
77+
}
78+
}
79+
return maxNum
80+
}
81+
82+
func Intersection(a, b []int) []int {
83+
var result []int
84+
for _, x := range a {
85+
for _, y := range b {
86+
if x == y {
87+
already := false
88+
for _, r := range result {
89+
if r == x {
90+
already = true
91+
break
92+
}
93+
}
94+
if !already {
95+
result = append(result, x)
96+
}
97+
}
98+
}
99+
}
100+
return result
101+
}
102+
103+
func MergeSortedSlices(a, b []int) []int {
104+
var result []int
105+
result = append(result, a...)
106+
result = append(result, b...)
107+
108+
for i := 0; i < len(result); i++ {
109+
for j := i + 1; j < len(result); j++ {
110+
if result[j] < result[i] {
111+
result[i], result[j] = result[j], result[i]
112+
}
113+
}
114+
}
115+
return result
116+
}
117+
118+
func LongestCommonPrefix(strs []string) string {
119+
if len(strs) == 0 {
120+
return ""
121+
}
122+
123+
prefix := strs[0]
124+
for _, s := range strs[1:] {
125+
for !strings.HasPrefix(s, prefix) {
126+
prefix = prefix[:len(prefix)-1]
127+
if prefix == "" {
128+
return ""
129+
}
130+
}
131+
}
132+
return prefix
133+
}
134+
135+
func MaxSubarraySum(nums []int) int {
136+
if len(nums) == 0 {
137+
return 0
138+
}
139+
140+
maxSum := nums[0]
141+
for i := 0; i < len(nums); i++ {
142+
for j := i; j < len(nums); j++ {
143+
sum := 0
144+
for k := i; k <= j; k++ {
145+
sum += nums[k]
146+
}
147+
if sum > maxSum {
148+
maxSum = sum
149+
}
150+
}
151+
}
152+
return maxSum
153+
}
154+
155+
func IsPrime(n int) bool {
156+
if n < 2 {
157+
return false
158+
}
159+
for i := 2; i < n; i++ {
160+
if n%i == 0 {
161+
return false
162+
}
163+
}
164+
return true
165+
}
166+
167+
func PrimesUpTo(limit int) []int {
168+
var primes []int
169+
for i := 2; i <= limit; i++ {
170+
if IsPrime(i) {
171+
primes = append(primes, i)
172+
}
173+
}
174+
return primes
175+
}
176+
177+
func GCD(a, b int) int {
178+
if a < 0 {
179+
a = -a
180+
}
181+
if b < 0 {
182+
b = -b
183+
}
184+
for b != 0 {
185+
a, b = b, a%b
186+
}
187+
return a
188+
}
189+
190+
func LCM(a, b int) int {
191+
if a == 0 || b == 0 {
192+
return 0
193+
}
194+
return a / GCD(a, b) * b
195+
}
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package sample
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func TestTwoSum(t *testing.T) {
9+
got := TwoSum([]int{2, 7, 11, 15}, 9)
10+
if got != [2]int{0, 1} {
11+
t.Errorf("TwoSum([2,7,11,15], 9) = %v, want [0,1]", got)
12+
}
13+
14+
got = TwoSum([]int{1, 2, 3}, 10)
15+
if got != [2]int{-1, -1} {
16+
t.Errorf("TwoSum no match = %v, want [-1,-1]", got)
17+
}
18+
}
19+
20+
func TestFindDuplicates(t *testing.T) {
21+
got := FindDuplicates([]int{1, 2, 3, 2, 4, 3, 5})
22+
want := []int{2, 3}
23+
if !reflect.DeepEqual(got, want) {
24+
t.Errorf("FindDuplicates = %v, want %v", got, want)
25+
}
26+
27+
got = FindDuplicates([]int{1, 2, 3})
28+
if len(got) != 0 {
29+
t.Errorf("expected no duplicates, got %v", got)
30+
}
31+
}
32+
33+
func TestUniqueElements(t *testing.T) {
34+
got := UniqueElements([]int{1, 2, 2, 3, 3, 3, 4})
35+
want := []int{1, 2, 3, 4}
36+
if !reflect.DeepEqual(got, want) {
37+
t.Errorf("UniqueElements = %v, want %v", got, want)
38+
}
39+
}
40+
41+
func TestMostFrequent(t *testing.T) {
42+
got := MostFrequent([]int{1, 2, 2, 3, 3, 3, 2, 2})
43+
if got != 2 {
44+
t.Errorf("MostFrequent = %d, want 2", got)
45+
}
46+
47+
got = MostFrequent([]int{})
48+
if got != 0 {
49+
t.Errorf("MostFrequent empty = %d, want 0", got)
50+
}
51+
}
52+
53+
func TestIntersection(t *testing.T) {
54+
got := Intersection([]int{1, 2, 3, 4}, []int{3, 4, 5, 6})
55+
want := []int{3, 4}
56+
if !reflect.DeepEqual(got, want) {
57+
t.Errorf("Intersection = %v, want %v", got, want)
58+
}
59+
60+
got = Intersection([]int{1, 2}, []int{3, 4})
61+
if len(got) != 0 {
62+
t.Errorf("expected empty intersection, got %v", got)
63+
}
64+
}
65+
66+
func TestMergeSortedSlices(t *testing.T) {
67+
got := MergeSortedSlices([]int{1, 3, 5}, []int{2, 4, 6})
68+
want := []int{1, 2, 3, 4, 5, 6}
69+
if !reflect.DeepEqual(got, want) {
70+
t.Errorf("MergeSortedSlices = %v, want %v", got, want)
71+
}
72+
}
73+
74+
func TestLongestCommonPrefix(t *testing.T) {
75+
got := LongestCommonPrefix([]string{"flower", "flow", "flight"})
76+
if got != "fl" {
77+
t.Errorf("LongestCommonPrefix = %q, want \"fl\"", got)
78+
}
79+
80+
got = LongestCommonPrefix([]string{"dog", "racecar", "car"})
81+
if got != "" {
82+
t.Errorf("LongestCommonPrefix = %q, want \"\"", got)
83+
}
84+
85+
got = LongestCommonPrefix([]string{})
86+
if got != "" {
87+
t.Errorf("LongestCommonPrefix empty = %q, want \"\"", got)
88+
}
89+
}
90+
91+
func TestMaxSubarraySum(t *testing.T) {
92+
got := MaxSubarraySum([]int{-2, 1, -3, 4, -1, 2, 1, -5, 4})
93+
if got != 6 {
94+
t.Errorf("MaxSubarraySum = %d, want 6", got)
95+
}
96+
97+
got = MaxSubarraySum([]int{-1, -2, -3})
98+
if got != -1 {
99+
t.Errorf("MaxSubarraySum all negative = %d, want -1", got)
100+
}
101+
102+
got = MaxSubarraySum([]int{})
103+
if got != 0 {
104+
t.Errorf("MaxSubarraySum empty = %d, want 0", got)
105+
}
106+
}
107+
108+
func TestIsPrime(t *testing.T) {
109+
primes := []int{2, 3, 5, 7, 11, 13, 17, 19, 23}
110+
for _, p := range primes {
111+
if !IsPrime(p) {
112+
t.Errorf("IsPrime(%d) = false, want true", p)
113+
}
114+
}
115+
116+
nonPrimes := []int{0, 1, 4, 6, 8, 9, 10, 15}
117+
for _, n := range nonPrimes {
118+
if IsPrime(n) {
119+
t.Errorf("IsPrime(%d) = true, want false", n)
120+
}
121+
}
122+
}
123+
124+
func TestPrimesUpTo(t *testing.T) {
125+
got := PrimesUpTo(20)
126+
want := []int{2, 3, 5, 7, 11, 13, 17, 19}
127+
if !reflect.DeepEqual(got, want) {
128+
t.Errorf("PrimesUpTo(20) = %v, want %v", got, want)
129+
}
130+
}
131+
132+
func TestGCD(t *testing.T) {
133+
tests := []struct {
134+
a, b, want int
135+
}{
136+
{12, 8, 4},
137+
{7, 13, 1},
138+
{0, 5, 5},
139+
{-12, 8, 4},
140+
}
141+
142+
for _, tc := range tests {
143+
got := GCD(tc.a, tc.b)
144+
if got != tc.want {
145+
t.Errorf("GCD(%d, %d) = %d, want %d", tc.a, tc.b, got, tc.want)
146+
}
147+
}
148+
}
149+
150+
func TestLCM(t *testing.T) {
151+
tests := []struct {
152+
a, b, want int
153+
}{
154+
{4, 6, 12},
155+
{7, 13, 91},
156+
{0, 5, 0},
157+
}
158+
159+
for _, tc := range tests {
160+
got := LCM(tc.a, tc.b)
161+
if got != tc.want {
162+
t.Errorf("LCM(%d, %d) = %d, want %d", tc.a, tc.b, got, tc.want)
163+
}
164+
}
165+
}

0 commit comments

Comments
 (0)