Skip to content

Commit

Permalink
refactoring: reimplement the logic of Intersection
Browse files Browse the repository at this point in the history
  • Loading branch information
duke-git committed Nov 29, 2024
1 parent 58a37b7 commit 8f3ea60
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 85 deletions.
98 changes: 49 additions & 49 deletions cryptor/rsa_private_example.pem
Original file line number Diff line number Diff line change
@@ -1,51 +1,51 @@
-----BEGIN rsa private key-----
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
-----END rsa private key-----
24 changes: 12 additions & 12 deletions cryptor/rsa_public_example.pem
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
-----BEGIN rsa public key-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAndYMNkKkKpiljieXZEVn
izdndsLOD11062JZMEU3g0KZzJovygXnGoadrRxnukaMpDD1AzJdK4vT/jawJ/5f
c7ErTIDrm0eWGMgR9ggU3kas70JJKry6KmtvGAWxyL9DRV0JFXfOwtvwVJ2JN4Zd
UQtrzJza0T5uVsM9fs0RmTi5Ga883mZ/w2Ed4LoZ089ZhF/+AqYBrb9qocxkIEyy
2oeZVG9y2lO5tIlN98ytAanrq6qsuHHW4MAG3mL7ocx5mikANNdWkiTFxxY6D1Pk
OWk57RRns7CT43BwoUj3n8ThHN4c9thS/SB7A++RJ2sHQWfpPxzp4vNKw7SAOpcS
PhOrN1m1vl/JstQcksdbG+lpl/vqtnOB2QDCpS3jdKjgkpUlylb1Udx7qdQQtY5J
b9/fiMlCbVT//3hGfJGb5gpz2jjw7SJOkih461eyz7xgS+on6FHXiIvbb0jdy2pj
PAI2bVc4+53lCWlOKQ/zXvi1WOYjp9cuhccTy85M4cBU5MBH8kiW/RLJDSNmRuh8
dOyr/J+Q34878waVUAel/bhmh40BzxQ+2h8CJ/AjAPIQvOVXQi2eKFGiRk3cLwca
NE5DAv0csxeP8Yt5IuS+ms7qHTGRUzL9MgX767K4hd+9DJUO4XkNLietVDpyWFl4
8DoqAzp0hvh7Fxt/SN17WCUCAwEAAQ==
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxZGG6vSSETKwW7bxx7NA
1tXmNh+0AAsOmdwOyd77C/F7bmf3iacdzsdJgumWpBZLpo7Xdke/6NWbzizdbawb
BKkLH5vdZpEYJsbIx9vQYPRrAL1taRHpWwqC86aZHhJ8afo5KARkW8U1BB+MCfJ0
oGOgkpHPbbs7jRNhrUP52BPbdRUw7ZwwJHEseuAvw+nv80UmHdI5mrgKj//8r+cB
1JnErqJi0yTOgYwKqOPFcMoaCoyLRdMV8en1QZ7nY6KWF32K/OBGM8++lRsZGttF
Thx3Zs54QU2GFgthH5rkMtucuZUXDN2k+QqV1XrSC/a+IDZ1zhx0+NUuExktOpOq
kvc4IslIOPAcBJ4MoUWShOy91rW34QSV2ZgD6VMTYMce6xpH4Oh680I4ZtewZiRd
BnQ4EADoxPbiBHfTQJfzUBtaZDXqOFNN+friCITTKice0dByDlCN85bL7et0hyIs
FU1xi0SmFbt3IBFwsJf5B/aorLhZqwCIUFvf7EahOH51PlGr7M2ltZtpgHmFBzB0
zYAoYOnDU1+avzVP5l9fObH4uLl8/fjeAr8pSB0drjaKf0Bj434aKrrftDyeGuMW
pXhFu9rr/eXXUVqU/jBfHR+60m+MBK9h8efkqtVW3EqNVApsapRFo/LNNDAC9lCK
WuFBjh0igdZNjSuatG9O9rMCAwEAAQ==
-----END rsa public key-----
37 changes: 13 additions & 24 deletions slice/slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -921,36 +921,25 @@ func Merge[T any](slices ...[]T) []T {
// Intersection creates a slice of unique elements that included by all slices.
// Play: https://go.dev/play/p/anJXfB5wq_t
func Intersection[T comparable](slices ...[]T) []T {
if len(slices) == 0 {
return []T{}
}
if len(slices) == 1 {
return Unique(slices[0])
}
result := []T{}
elementCount := make(map[T]int)

reducer := func(sliceA, sliceB []T) []T {
hashMap := make(map[T]int)
for _, v := range sliceA {
hashMap[v] = 1
}
for _, slice := range slices {
seen := make(map[T]bool)

out := make([]T, 0)
for _, val := range sliceB {
if v, ok := hashMap[val]; v == 1 && ok {
out = append(out, val)
hashMap[val]++
for _, item := range slice {
if !seen[item] {
seen[item] = true
elementCount[item]++
}
}
return out
}

result := reducer(slices[0], slices[1])

reduceSlice := make([][]T, 2)
for i := 2; i < len(slices); i++ {
reduceSlice[0] = result
reduceSlice[1] = slices[i]
result = reducer(reduceSlice[0], reduceSlice[1])
for _, item := range slices[0] {
if elementCount[item] == len(slices) {
result = append(result, item)
elementCount[item] = 0
}
}

return result
Expand Down

0 comments on commit 8f3ea60

Please sign in to comment.