mirror of
https://github.com/aicodix/code.git
synced 2026-04-27 14:30:36 +00:00
optionally print sequence
This commit is contained in:
parent
31458c0f56
commit
25059e17a9
1 changed files with 22 additions and 7 deletions
|
|
@ -7,26 +7,41 @@ Copyright 2025 Ahmet Inan <inan@aicodix.de>
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int next(int y, int a, int b, int c, int mask) {
|
||||
y ^= y << a;
|
||||
y &= mask;
|
||||
y ^= y >> b;
|
||||
y ^= y << c;
|
||||
y &= mask;
|
||||
return y;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc != 2)
|
||||
if (argc != 2 && argc != 5)
|
||||
return 1;
|
||||
int bits = atoi(argv[1]);
|
||||
int mask = (1 << bits) - 1;
|
||||
int seed = 1;
|
||||
if (argc == 5) {
|
||||
int a = atoi(argv[2]);
|
||||
int b = atoi(argv[3]);
|
||||
int c = atoi(argv[4]);
|
||||
for (int y = seed, i = mask; i; --i) {
|
||||
printf("%d\n", y);
|
||||
y = next(y, a, b, c, mask);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
for (int a = 1; a < bits; ++a) {
|
||||
for (int b = 1; b < bits; ++b) {
|
||||
for (int c = 1; c < bits; ++c) {
|
||||
int good = 1;
|
||||
for (int y = seed, i = mask; good && i; --i) {
|
||||
y ^= y << a;
|
||||
y &= mask;
|
||||
y ^= y >> b;
|
||||
y ^= y << c;
|
||||
y &= mask;
|
||||
y = next(y, a, b, c, mask);
|
||||
good &= (i == 1) == (y == seed);
|
||||
}
|
||||
if (good)
|
||||
printf("%d %d %d\n", a, b, c);
|
||||
printf("%d %d %d %d\n", bits, a, b, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue