CS153/hw6/hw4programs/lfsr.oat

45 lines
1.2 KiB
Text
Raw Normal View History

global lfsr_iterations = 5;
global lfsr_length = 4;
global lfsr_init_values = new bool[]{true, false, true, false};
bool xor(bool x, bool y) {
return (x & !y) | (!x & y);
}
string string_of_bool(bool b) {
if (b) { return "T"; }
else { return "F"; }
}
void print_lfsr(bool[] lfsr_register, int len) {
for (var i = 0; i < len; i = i + 1;) {
print_string(string_of_bool(lfsr_register[i]));
}
return;
}
int program(int argc, string[] argv) {
/* Initialize the working register */
var lfsr_register = new bool[lfsr_length];
for (var i=0; i < lfsr_length; i=i+1;) {
lfsr_register[i] = lfsr_init_values[i];
}
/* Do the computations */
for (var i = 0; i < lfsr_iterations; i = i + 1;) {
var new_first =
xor(lfsr_register[lfsr_length - 1], lfsr_register[lfsr_length - 2]);
for (var j = lfsr_length - 1; j > 0; j = j - 1;) {
lfsr_register[j] = lfsr_register[j - 1];
}
lfsr_register[0] = new_first;
}
/* Print the initial and final bool arrays with a space separator */
print_lfsr(lfsr_init_values, lfsr_length);
print_string(" ");
print_lfsr(lfsr_register, lfsr_length);
return 0;
}