28 lines
846 B
Text
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")
|
|
}
|