diff options
| author | Niels van Dijke <perlboy@cpan.org> | 2022-11-21 12:40:00 +0000 |
|---|---|---|
| committer | Niels van Dijke <perlboy@cpan.org> | 2022-11-21 12:40:00 +0000 |
| commit | 9d1c9ef1077c6d54721eb76604d310522439c97f (patch) | |
| tree | 6061718bf5cdcc3778b279c0304d80ed765f8b9b | |
| parent | 93e16aedac1f6a51b5227a3510ef3cb125b2ff75 (diff) | |
| download | perlweeklychallenge-club-9d1c9ef1077c6d54721eb76604d310522439c97f.tar.gz perlweeklychallenge-club-9d1c9ef1077c6d54721eb76604d310522439c97f.tar.bz2 perlweeklychallenge-club-9d1c9ef1077c6d54721eb76604d310522439c97f.zip | |
Add Inline 'C' implemenaion (FAST!)
| -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; +} |
