day 8 work and jumbled together

This commit is contained in:
RussellChamp committed 2021-12-08 16:31:05 -05:00
1 parent e76cb1a355
commit c7ea0afedc
18 files changed
+457 -21

No files matched your search

+54
View File
@@ -0,0 +1,54 @@
package bits
func GetBitCount(val int) int {
count := 0
for val != 0 {
count += val & 1
val >>= 1
}
return count
}
// returns the number of matching bits in the two value's binary expression
func MatchingOnBits(v1 int, v2 int) int {
count := 0
for v1 != 0 && v2 != 0 {
if v1&1 == 1 && v2&1 == 1 {
count += 1
}
v1 >>= 1
v2 >>= 1
}
return count
}
func BitwiseAnd(v1 int, v2 int) int {
val := 0
for block := 1; v1 != 0 || v2 != 0; block <<= 1 {
if v1&1 == 1 || v2&1 == 1 {
val += block
}
if v1 > 0 {
v1 >>= 1
}
if v2 > 0 {
v2 >>= 1
}
}
return val
}
func BitwiseAndA(a ...int) int {
total := 0
for _, i := range a {
total = BitwiseAnd(total, i)
}
return total
}
func ByBitCount(size int) func(int) bool {
return func(val int) bool { return GetBitCount(val) == size }
}
+28
View File
@@ -0,0 +1,28 @@
package bits
import (
"AoC2021/utils/assert"
"testing"
)
func TestGetBitCount(t *testing.T) {
assert.EqualsInt(t, GetBitCount(0), 0, "should count zero bits")
assert.EqualsInt(t, GetBitCount(15), 4, "should count bits")
assert.EqualsInt(t, GetBitCount(16), 1, "should not count empty bits")
}
func TestMatchingOnBits(t *testing.T) {
assert.EqualsInt(t, MatchingOnBits(5 /*101*/, 13 /*1101*/), 2, "should match 2 bits")
}
func TestBitwiseAnd(t *testing.T) {
assert.EqualsInt(t, BitwiseAnd(7 /*111*/, 18 /*10010*/), 23 /*10111*/, "should bitwise add")
}
func TestBitwiseAndA(t *testing.T) {
assert.EqualsInt(t, BitwiseAndA(1, 4, 8, 12), 13 /*1101*/, "should bitwise add lists")
}
func TestByBitCount(t *testing.T) {
twoBitFilter := ByBitCount(2)
assert.IsTrue(t, twoBitFilter(17 /*10001*/), "should count bits")
}