Skip to content

Commit efda7a6

Browse files
author
openset
committed
Add: Binary Prefix Divisible By 5
1 parent 947b9ca commit efda7a6

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package binary_prefix_divisible_by_5
2+
3+
func prefixesDivBy5(A []int) []bool {
4+
ans, v := make([]bool, len(A)), 0
5+
for i, b := range A {
6+
v = (v<<1 + b) % 5
7+
ans[i] = v == 0
8+
}
9+
return ans
10+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package binary_prefix_divisible_by_5
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
type caseType struct {
9+
input []int
10+
expected []bool
11+
}
12+
13+
func TestPrefixesDivBy5(t *testing.T) {
14+
tests := [...]caseType{
15+
{
16+
input: []int{0, 1, 1},
17+
expected: []bool{true, false, false},
18+
},
19+
{
20+
input: []int{1, 1, 1},
21+
expected: []bool{false, false, false},
22+
},
23+
{
24+
input: []int{0, 1, 1, 1, 1, 1},
25+
expected: []bool{true, false, false, false, true, false},
26+
},
27+
{
28+
input: []int{1, 1, 1, 0, 1},
29+
expected: []bool{false, false, false, false, false},
30+
},
31+
{
32+
input: []int{1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0},
33+
expected: []bool{false, false, true, false, false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, true, false, false, true, false, false, true, true, true, true, true, true, true, false, false, true, false, false, false, false, true, true},
34+
},
35+
}
36+
for _, tc := range tests {
37+
output := prefixesDivBy5(tc.input)
38+
if !reflect.DeepEqual(output, tc.expected) {
39+
t.Fatalf("input: %v, output: %v, expected: %v", tc.input, output, tc.expected)
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)