RosettaCodeData/Task/Set-right-adjacent-bits/Wren/set-right-adjacent-bits.wren
2023-07-01 13:44:08 -04:00

28 lines
846 B
Text

var setRightBits = Fn.new { |bits, e, n|
if (e == 0 || n <= 0) return bits
var bits2 = bits.toList
for (i in 0...e - 1) {
var c = bits[i]
if (c == 1) {
var j = i + 1
while (j <= i + n && j < e) {
bits2[j] = 1
j = j + 1
}
}
}
return bits2
}
var b = "010000000000100000000010000000010000000100000010000010000100010010"
var tests = [["1000", 2], ["0100", 2], ["0010", 2], ["0000", 2], [b, 0], [b, 1], [b, 2], [b, 3]]
for (test in tests) {
var bits = test[0]
var e = bits.count
var n = test[1]
System.print("n = %(n); Width e = %(e):")
System.print(" Input b: %(bits)")
bits = bits.map { |c| c.bytes[0] - 48 }.toList
bits = setRightBits.call(bits, e, n)
System.print(" Result: %(bits.join())\n")
}