From 5ecd146deeffbad7fce1a07918da4b5c140fd05d Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Mon, 12 Jul 2021 12:37:50 +0000 Subject: Task 1 --- challenge-121/perlboy1967/perl/ch-1.pl | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 challenge-121/perlboy1967/perl/ch-1.pl diff --git a/challenge-121/perlboy1967/perl/ch-1.pl b/challenge-121/perlboy1967/perl/ch-1.pl new file mode 100755 index 0000000000..8ac1ad92bf --- /dev/null +++ b/challenge-121/perlboy1967/perl/ch-1.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl + +# Perl Weekly Challenge - 121 +# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-121/#TASK1 +# +# Task 1 - Invert Bit +# +# Author: Niels 'PerlBoy' van Dijke + +use v5.16; +use strict; +use warnings; + +use Test::More; + +# Prototype(s) +sub invertBit($$); + +my $tests = [ + [ 12, 3, 8], + [ 18, 4, 26], + [ 0b10101010, 5, 0b10111010 ], +]; + +foreach my $t (@$tests) { + printf "%s\n", join(',', @$t) unless is(invertBit($t->[0],$t->[1]), $t->[2]); + print "------------\n"; +} + +done_testing(); + +sub invertBit($$) { + my ($m,$n) = @_; + + # upper part + modified bit + lower part + return (((($m >> $n) << 1 ) + ((($m >> ($n - 1)) & 1 ) ^ 1)) << ($n - 1)) + + ($m & (0xff >> (8 - $n + 1))); +} -- cgit