Skip to content

Instantly share code, notes, and snippets.

Created December 3, 2012 15:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/4195675 to your computer and use it in GitHub Desktop.
Save anonymous/4195675 to your computer and use it in GitHub Desktop.
Labyrinth generator
// 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));
}
}
// 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