diff options
| -rwxr-xr-x | challenge-192/perlboy1967/perl/ch-1.pl | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/challenge-192/perlboy1967/perl/ch-1.pl b/challenge-192/perlboy1967/perl/ch-1.pl index f3c1f5abbf..f40a39c3a1 100755 --- a/challenge-192/perlboy1967/perl/ch-1.pl +++ b/challenge-192/perlboy1967/perl/ch-1.pl @@ -21,6 +21,7 @@ use warnings; use Test::More; use Benchmark qw(:all); +use Inline 'C'; sub binaryFlipString ($) { @@ -51,9 +52,31 @@ is(binaryFlipBinary(4),3); is(binaryFlipBinary(6),1); is(binaryFlipBinary(0b10101),0b1010); +is(binaryFlipC(5),2); +is(binaryFlipC(5),2); +is(binaryFlipC(4),3); +is(binaryFlipC(6),1); +is(binaryFlipC(0b10101),0b1010); done_testing; -cmpthese(1_000_000, { +cmpthese(5_000_000, { 'Binary' => sub{binaryFlipBinary(12345678)}, + 'BinaryC' => sub{binaryFlipC(12345678)}, 'String' => sub{binaryFlipString(12345678)}, }); + +__END__ +__C__ + +int binaryFlipC (int i) { + int j = i; + int m = 0; + + while (j) { + j >>= 1; + m <<= 1; + m++; + } + + return ~i & m; +} |
