codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <stdio.h> #include <stdint.h> #include <inttypes.h> int main(int argc, char **argv) { uint32_t lfsr = 1, buf_bits = 0; uint16_t valid = 0, old = 0, buf_cnt = 0, out_cnt = 0; do { uint32_t mask, b1, b2; b1 = lfsr & 1; lfsr = (lfsr >> 1) ^ (0xD0000001u & -(uint32_t)b1); b2 = lfsr & 1; lfsr = (lfsr >> 1) ^ (0xD0000001u & -(uint32_t)b2); ++valid; old += b2; mask = 1; do { uint32_t next = b1 ^ (old & mask); if( next ) { ++buf_cnt; buf_bits = (buf_bits << 1) | !!b1; } b1 = next << 1; mask <<= 1; } while( valid & mask ); if( b1 ) old |= mask; else old &= ~mask; ++valid; if( buf_cnt >= 16 ) { buf_cnt -= 16; printf( "%04" PRIx16, (buf_bits >> buf_cnt) & 0xFFFFu ); if( 19 == (out_cnt % 20) ) printf("\n"); ++out_cnt; } } while( out_cnt < 1000 ); return 0; }
Private
[
?
]
Run code
Submit