Created
December 3, 2012 15:20
-
-
Save anonymous/4195675 to your computer and use it in GitHub Desktop.
Labyrinth generator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// About 323MB/s on craptop | |
#include <unistd.h> | |
#include <stdlib.h> | |
unsigned int buf[8192]; | |
unsigned int overflow[32]; | |
int main() { | |
int n; | |
for(;;) { | |
for(n = 0; n < sizeof(buf) / sizeof(buf[0]); ) { | |
unsigned int r = rand(); | |
buf[n++] = 0x2f2f2f2f + 0x2d * (r & 0x01010101); r >>= 1; // 1 | |
buf[n++] = 0x2f2f2f2f + 0x2d * (r & 0x01010101); r >>= 1; // 2 | |
buf[n++] = 0x2f2f2f2f + 0x2d * (r & 0x01010101); r >>= 1; // 3 | |
buf[n++] = 0x2f2f2f2f + 0x2d * (r & 0x01010101); r >>= 1; // 4 | |
buf[n++] = 0x2f2f2f2f + 0x2d * (r & 0x01010101); r >>= 1; // 5 | |
buf[n++] = 0x2f2f2f2f + 0x2d * (r & 0x01010101); r >>= 1; // 6 | |
buf[n++] = 0x2f2f2f2f + 0x2d * (r & 0x01010101); r >>= 1; // 7 | |
} | |
ssize_t s = write(1, buf, sizeof(buf)); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// About 410MB/s on craptop | |
#include <unistd.h> | |
#include <stdlib.h> | |
unsigned long long lut[256]; | |
unsigned long long buf[8192]; | |
unsigned long long overflow[32]; | |
int main() { | |
long long n, m, a,b,c; | |
char *p = (char *) lut; | |
for (n = 0; n < 256; ++n) | |
for (m = 0x80; m; m >>= 1) | |
*p++ = (n & m) ? 0x2f : 0x5c; | |
unsigned int r, q; | |
for(;;) { | |
for(n = 0; n < sizeof(buf) / sizeof(buf[0]); ) { | |
r = rand(); | |
buf[n++] = lut[0xFF & r]; r >>= 8; | |
buf[n++] = lut[0xFF & r]; r >>= 8; | |
buf[n++] = lut[0xFF & r]; r >>= 8; // r has 7 random bits left | |
q = rand(); | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; // q has 7 random bits left | |
r |= q << 7; | |
buf[n++] = lut[0xFF & r]; r >>= 8; // r has 6 random bits left | |
q = rand(); | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; // q has 7 random bits left | |
r |= q << 6; | |
buf[n++] = lut[0xFF & r]; r >>= 8; // r has 5 random bits left | |
q = rand(); | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; // q has 7 random bits left | |
r |= q << 5; | |
buf[n++] = lut[0xFF & r]; r >>= 8; // r has 4 random bits left | |
q = rand(); | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; // q has 7 random bits left | |
r |= q << 4; | |
buf[n++] = lut[0xFF & r]; r >>= 8; // r has 3 random bits left | |
q = rand(); | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; // q has 7 random bits left | |
r |= q << 3; | |
buf[n++] = lut[0xFF & r]; r >>= 8; // r has 2 random bits left | |
q = rand(); | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; // q has 7 random bits left | |
r |= q << 2; | |
buf[n++] = lut[0xFF & r]; r >>= 8; // r has 1 random bits left | |
q = rand(); | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; | |
buf[n++] = lut[0xFF & q]; q >>= 8; // q has 7 random bits left | |
r |= q << 1; | |
buf[n++] = lut[0xFF & r]; r >>= 8; // r has 0 random bits left | |
} | |
ssize_t s = write(1, buf, sizeof(buf)); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment