44 lines
1.2 KiB
Text
44 lines
1.2 KiB
Text
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;
|
|
}
|