d3
This commit is contained in:
parent
785a00400f
commit
81f11c52ef
2 changed files with 63 additions and 0 deletions
38
d3/d3.go
Normal file
38
d3/d3.go
Normal file
|
@ -0,0 +1,38 @@
|
|||
package d3
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func D3(input string) int64 {
|
||||
binaries := strings.Split(strings.TrimSpace(input), "\n")
|
||||
|
||||
ones := make([]int, len(binaries[0]))
|
||||
|
||||
for _, binary := range binaries {
|
||||
for position, bit := range binary {
|
||||
if byte(bit) == '1' {
|
||||
ones[position]++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gamma := make([]string, len(ones))
|
||||
epsilon := make([]string, len(ones))
|
||||
|
||||
for pos, oneCount := range ones {
|
||||
if oneCount > len(binaries)/2 {
|
||||
gamma[pos] = "1"
|
||||
epsilon[pos] = "0"
|
||||
} else {
|
||||
gamma[pos] = "0"
|
||||
epsilon[pos] = "1"
|
||||
}
|
||||
}
|
||||
|
||||
gammaNum, _ := strconv.ParseInt(strings.Join(gamma, ""), 2, 64)
|
||||
epsilonNum, _ := strconv.ParseInt(strings.Join(epsilon, ""), 2, 64)
|
||||
|
||||
return gammaNum * epsilonNum
|
||||
}
|
25
d3/d3_test.go
Normal file
25
d3/d3_test.go
Normal file
|
@ -0,0 +1,25 @@
|
|||
package d3
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestD3(t *testing.T) {
|
||||
input := `
|
||||
00100
|
||||
11110
|
||||
10110
|
||||
10111
|
||||
10101
|
||||
01111
|
||||
00111
|
||||
11100
|
||||
10000
|
||||
11001
|
||||
00010
|
||||
01010`
|
||||
|
||||
assert.EqualValues(t, 198, D3(input))
|
||||
}
|
Loading…
Reference in a new issue