Guest User

Untitled

a guest
Jun 24th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. {
  7. use integer; #use integer math
  8. my $x = 123456789;
  9. my $y = 362436069;
  10. my $w = 88675123;
  11. my $z = 521288629;
  12.  
  13. sub set_random_seed {
  14. $w = shift;
  15. }
  16.  
  17. sub random {
  18. my $t = $x ^ ($x << 11);
  19. $x = $y;
  20. $y = $z;
  21. $z = $w;
  22. my $rand = $w = ($w ^ ($w >> 19)) ^ ($t ^ ($t >> 8));
  23. return $rand % 256; #scale it back to a byte at a time
  24. }
  25. }
  26.  
  27. set_random_seed(5);
  28. print map { random(), "n" } 1 .. 10;
  29.  
  30. use strict;
  31. use warnings;
  32.  
  33. use List::Util qw(reduce);
  34. use vars qw($a $b);
  35.  
  36. print 'Taps: ', set_taps( 8, 7, 2, 1 ), "n";
  37. print 'Seed: ', seed_lfsr( 1 ), "n";
  38. print read_lfsr(), "n" for 1..10;
  39.  
  40. BEGIN {
  41. my $tap_mask;
  42. my $lfsr = 0;
  43.  
  44. sub read_lfsr {
  45. $lfsr = ($lfsr >> 1) ^ (-($lfsr & 1) & $tap_mask );
  46.  
  47. return $lfsr;
  48. }
  49.  
  50. sub seed_lfsr {
  51. $lfsr = shift || 0;
  52. $lfsr &= 0xFF;
  53. }
  54.  
  55. sub set_taps {
  56. my @taps = @_;
  57.  
  58. $tap_mask = reduce { $a + 2**$b } 0, @taps;
  59.  
  60. $tap_mask >>= 1;
  61.  
  62. $tap_mask &= 0xFF;
  63.  
  64. return $tap_mask;
  65. }
  66. }
Add Comment
Please, Sign In to add comment