mirror of
https://github.com/RussellChamp/advent-of-code-2021.git
synced 2026-10-27 21:52:32 +00:00
day 8 work and jumbled together
This commit is contained in:
1 parent
e76cb1a355
commit
c7ea0afedc
18 files changed
+457
-21
No files matched your search
@@ -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 }
|
||||
}
|
||||
@@ -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")
|
||||
}
|
||||
Reference in new issue
Block a user