aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Wicks <lw@judocoach.com>2021-07-12 17:56:26 +0100
committerLance Wicks <lw@judocoach.com>2021-07-12 17:56:26 +0100
commita49821ee7e41d0c94c5ffa5af647201fe4e1dd95 (patch)
treeb01d05e743763055f646558740c9cec10594b47d
parent1aa7b6eaba2a58fc1ef0612373e3aed6b61f345d (diff)
downloadperlweeklychallenge-club-a49821ee7e41d0c94c5ffa5af647201fe4e1dd95.tar.gz
perlweeklychallenge-club-a49821ee7e41d0c94c5ffa5af647201fe4e1dd95.tar.bz2
perlweeklychallenge-club-a49821ee7e41d0c94c5ffa5af647201fe4e1dd95.zip
121: Task 1, Perl
-rw-r--r--challenge-121/lance-wicks/perl/ch-1.pl19
-rw-r--r--challenge-121/lance-wicks/perl/lib/Invert.pm21
-rw-r--r--challenge-121/lance-wicks/perl/t/01-invert-accept.t20
3 files changed, 60 insertions, 0 deletions
diff --git a/challenge-121/lance-wicks/perl/ch-1.pl b/challenge-121/lance-wicks/perl/ch-1.pl
new file mode 100644
index 0000000000..050be84ea8
--- /dev/null
+++ b/challenge-121/lance-wicks/perl/ch-1.pl
@@ -0,0 +1,19 @@
+use strict;
+use warnings;
+
+__PACKAGE__->run() unless caller;
+
+use lib './lib';
+use Invert;
+
+sub run {
+ my $m = $ARGV[0] || shift;
+ my $n = $ARGV[1] || shift;
+
+ my $invert = Invert->new;
+ my $inverted = $invert->bit( m => $m, n => $n );
+ print "Input: \$m = $m, \$n = $n\nOutput: $inverted\n";
+}
+
+1;
+
diff --git a/challenge-121/lance-wicks/perl/lib/Invert.pm b/challenge-121/lance-wicks/perl/lib/Invert.pm
new file mode 100644
index 0000000000..f17f9e9a0a
--- /dev/null
+++ b/challenge-121/lance-wicks/perl/lib/Invert.pm
@@ -0,0 +1,21 @@
+package Invert;
+
+use Moo;
+
+sub bit {
+ my ($self, %args) = @_;
+
+ my $m = $args{m};
+ my $n = $args{n};
+
+ my $bin_m = sprintf("%08b",$m);
+
+ my $bit = substr $bin_m, -($n), 1;
+
+ substr $bin_m, -($n), 1, $bit ? 0 : 1 ;
+
+ return oct "0b$bin_m";
+}
+
+
+1;
diff --git a/challenge-121/lance-wicks/perl/t/01-invert-accept.t b/challenge-121/lance-wicks/perl/t/01-invert-accept.t
new file mode 100644
index 0000000000..660dae1fb7
--- /dev/null
+++ b/challenge-121/lance-wicks/perl/t/01-invert-accept.t
@@ -0,0 +1,20 @@
+use Test2::V0 -target => 'Invert';
+use Test::Output;
+
+subtest 'Testing the script output' => sub {
+ require './ch-1.pl';
+
+ stdout_is { &run( 12, 3 ) }
+ "Input: \$m = 12, \$n = 3\nOutput: 8\n", 'Example 1';
+
+ stdout_is { &run( 18, 4 ) }
+ "Input: \$m = 18, \$n = 4\nOutput: 26\n", 'Example 2';
+};
+
+subtest 'Invert::bit' => sub {
+ is $CLASS->bit( m => 12, n => 3 ), 8, 'Example one';
+
+ is $CLASS->bit( m => 18, n => 4 ), 26, 'Example two';
+};
+
+done_testing;