Skip to content

Commit

Permalink
day 161: reverse the bits of a 32-bit integer
Browse files Browse the repository at this point in the history
  • Loading branch information
vaskoz committed Feb 2, 2019
1 parent 4cc9585 commit 372d538
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
17 changes: 17 additions & 0 deletions day161/problem.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package day161

// Reverse32Bits reverses the bits and returned the result.
// Runs in O(32) time.
func Reverse32Bits(num uint32) uint32 {
var rev uint32
offset := uint(32)
for num != 0 {
offset--
rev <<= 1
if num&1 == 1 {
rev ^= 1
}
num >>= 1
}
return rev << offset
}
27 changes: 27 additions & 0 deletions day161/problem_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package day161

import "testing"

var testcases = []struct {
given, expected uint32
}{
{4042322160, 252645135},
{3, 3221225472},
}

func TestReverse32Bits(t *testing.T) {
t.Parallel()
for _, tc := range testcases {
if result := Reverse32Bits(tc.given); result != tc.expected {
t.Errorf("Expected %v got %v", tc.expected, result)
}
}
}

func BenchmarkReverse32Bits(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, tc := range testcases {
Reverse32Bits(tc.given)
}
}
}

0 comments on commit 372d538

Please sign in to comment.