463919ad |
1 | #! /usr/bin/perl |
2 | |
3 | $len = shift || 32; |
4 | $op = shift || "+"; |
5 | |
6 | sub r { |
7 | my $l = shift || $len; |
8 | my $i; |
9 | my $s; |
10 | for ($i = 0; $i < $l; $i++) { |
11 | my $x = rand(256); |
12 | $s .= sprintf("%02x", $x); |
13 | } |
14 | return $s; |
15 | } |
16 | |
17 | $| = 1; |
18 | open(BC, "|bc | tr A-Z a-z") or die; |
19 | print BC "obase=16\nibase=16\n"; |
20 | $x = r(); |
21 | if ($op eq "<<" || $op eq ">>") { |
22 | $y = int(rand($len * 4)) + int(rand($len * 4)); |
23 | $op = ($op eq "<<" ? "*" : "/"); |
24 | $z = sprintf("%x", $y); |
25 | print "$x $y\n"; |
26 | print BC "\U$x $op (2^$z)\n"; |
27 | } elsif ($op eq "/") { |
28 | $ylen = int(rand($len)) + 1; |
29 | $y = r($ylen); |
30 | print "$x\n$y\n"; |
31 | print BC "\U$x / $y\n$x % $y\n"; |
32 | } elsif ($op eq "2") { |
33 | print "$x\n"; |
34 | print BC "\U$x * $x\n"; |
35 | } else { |
36 | $y = r(); |
37 | print "$x\n$y\n"; |
38 | print BC "\U$x $op $y\n"; |
39 | } |
40 | close(BC); |