Set right-adjacent bits: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Raku}}: added an example as per task spec) |
(Added Go) |
||
Line 243: | Line 243: | ||
010000000000100000000010000000010000000100000010000010000100010010 |
010000000000100000000010000000010000000100000010000010000100010010 |
||
011110000000111100000011110000011110000111100011110011110111111111 |
011110000000111100000011110000011110000111100011110011110111111111 |
||
</pre> |
|||
=={{header|Go}}== |
|||
{{trans|Wren}} |
|||
<lang go>package main |
|||
import ( |
|||
"fmt" |
|||
"strings" |
|||
) |
|||
type test struct { |
|||
bs string |
|||
n int |
|||
} |
|||
func setRightBits(bits []byte, e, n int) []byte { |
|||
if e == 0 || n <= 0 { |
|||
return bits |
|||
} |
|||
bits2 := make([]byte, len(bits)) |
|||
copy(bits2, bits) |
|||
for i := 0; i < e-1; i++ { |
|||
c := bits[i] |
|||
if c == 1 { |
|||
j := i + 1 |
|||
for j <= i+n && j < e { |
|||
bits2[j] = 1 |
|||
j++ |
|||
} |
|||
} |
|||
} |
|||
return bits2 |
|||
} |
|||
func main() { |
|||
b := "010000000000100000000010000000010000000100000010000010000100010010" |
|||
tests := []test{ |
|||
test{"1000", 2}, test{"0100", 2}, test{"0010", 2}, test{"0000", 2}, |
|||
test{b, 0}, test{b, 1}, test{b, 2}, test{b, 3}, |
|||
} |
|||
for _, test := range tests { |
|||
bs := test.bs |
|||
e := len(bs) |
|||
n := test.n |
|||
fmt.Println("n =", n, "; Width e =", e, "\b:") |
|||
fmt.Println(" Input b:", bs) |
|||
bits := []byte(bs) |
|||
for i := 0; i < len(bits); i++ { |
|||
bits[i] = bits[i] - '0' |
|||
} |
|||
bits = setRightBits(bits, e, n) |
|||
var sb strings.Builder |
|||
for i := 0; i < len(bits); i++ { |
|||
sb.WriteByte(bits[i] + '0') |
|||
} |
|||
fmt.Println(" Result :", sb.String()) |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
n = 2 ; Width e = 4: |
|||
Input b: 1000 |
|||
Result : 1110 |
|||
n = 2 ; Width e = 4: |
|||
Input b: 0100 |
|||
Result : 0111 |
|||
n = 2 ; Width e = 4: |
|||
Input b: 0010 |
|||
Result : 0011 |
|||
n = 2 ; Width e = 4: |
|||
Input b: 0000 |
|||
Result : 0000 |
|||
n = 0 ; Width e = 66: |
|||
Input b: 010000000000100000000010000000010000000100000010000010000100010010 |
|||
Result : 010000000000100000000010000000010000000100000010000010000100010010 |
|||
n = 1 ; Width e = 66: |
|||
Input b: 010000000000100000000010000000010000000100000010000010000100010010 |
|||
Result : 011000000000110000000011000000011000000110000011000011000110011011 |
|||
n = 2 ; Width e = 66: |
|||
Input b: 010000000000100000000010000000010000000100000010000010000100010010 |
|||
Result : 011100000000111000000011100000011100000111000011100011100111011111 |
|||
n = 3 ; Width e = 66: |
|||
Input b: 010000000000100000000010000000010000000100000010000010000100010010 |
|||
Result : 011110000000111100000011110000011110000111100011110011110111111111 |
|||
</pre> |
</pre> |
||