aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-03-23 09:54:08 +0000
committerGitHub <noreply@github.com>2024-03-23 09:54:08 +0000
commitbd30a74336995f4a98d5adfd34bdd9232117c499 (patch)
treeb9c83a8f12c1b604f4bf684eef04eac7d71d0e95
parent7e2658104ff5b399ec9ca3b884022794cadc89fe (diff)
parenta1c77cd39dde0f82373d1876a1848b0a54171048 (diff)
downloadperlweeklychallenge-club-bd30a74336995f4a98d5adfd34bdd9232117c499.tar.gz
perlweeklychallenge-club-bd30a74336995f4a98d5adfd34bdd9232117c499.tar.bz2
perlweeklychallenge-club-bd30a74336995f4a98d5adfd34bdd9232117c499.zip
Merge pull request #9789 from lancew/week-261
Perl solution, happy Ramadan Mohammad
-rw-r--r--challenge-261/lance-wicks/perl/lib/EDS.pm44
-rw-r--r--challenge-261/lance-wicks/perl/t/01-eds.t56
2 files changed, 100 insertions, 0 deletions
diff --git a/challenge-261/lance-wicks/perl/lib/EDS.pm b/challenge-261/lance-wicks/perl/lib/EDS.pm
new file mode 100644
index 0000000000..999d4a0e0d
--- /dev/null
+++ b/challenge-261/lance-wicks/perl/lib/EDS.pm
@@ -0,0 +1,44 @@
+package EDS;
+
+use strict;
+use warnings;
+
+sub absolute_diff {
+ my $self = shift;
+ my @ints = @_;
+ my $diff = 0;
+
+ my $element_sum = $self->element_sum(@ints);
+ my $digit_sum = $self->digit_sum(@ints);
+
+ $diff = $element_sum - $digit_sum;
+
+ return $diff;
+}
+
+sub element_sum {
+ my $self = shift;
+ my @ints = @_;
+ my $sum = 0;
+ for my $int (@ints) {
+ $sum += $int;
+ }
+
+ return $sum;
+}
+
+sub digit_sum {
+ my $self = shift;
+ my @ints = @_;
+ my $sum = 0;
+
+ for my $int (@ints) {
+ for my $d ( split '', $int ) {
+ $sum += $d;
+ }
+ }
+
+ return $sum;
+}
+
+1;
diff --git a/challenge-261/lance-wicks/perl/t/01-eds.t b/challenge-261/lance-wicks/perl/t/01-eds.t
new file mode 100644
index 0000000000..a8318815e3
--- /dev/null
+++ b/challenge-261/lance-wicks/perl/t/01-eds.t
@@ -0,0 +1,56 @@
+use Test2::V0 -target => EDS;
+
+isa_ok( $CLASS, 'EDS' );
+can_ok( $CLASS, 'element_sum' );
+can_ok( $CLASS, 'digit_sum' );
+can_ok( $CLASS, 'absolute_diff' );
+
+subtest "Example 1" => sub {
+ my @ints = ( 1, 2, 3, 45 );
+ my $got = $CLASS->element_sum(@ints);
+
+ is $got, 51, 'element_sum should return 51';
+
+ $got = $CLASS->digit_sum(@ints);
+ is $got, 15, 'digit_sum should return 15';
+
+ $got = $CLASS->absolute_diff(@ints);
+ is $got, 36, 'absolute_diff should return 36';
+};
+
+subtest "Examples 2-4" => sub {
+
+ my @tests = (
+ { name => 'Example 2',
+ ints => [ 1, 12, 3 ],
+ element_sum => 16,
+ digit_sum => 7,
+ absolute_diff => 9,
+ },
+ { name => 'Example 3',
+ ints => [ 1, 2, 3, 4 ],
+ element_sum => 10,
+ digit_sum => 10,
+ absolute_diff => 0,
+ },
+ { name => 'Example 4',
+ ints => [ 236, 416, 336, 350 ],
+ element_sum => 1338,
+ digit_sum => 42,
+ absolute_diff => 1296,
+ },
+ );
+
+ for my $test (@tests) {
+ subtest $test->{name} => sub {
+ for my $method (qw/element_sum digit_sum absolute_diff/) {
+ my $got = $CLASS->$method( $test->{ints}->@* );
+ is $got, $test->{$method},
+ "$test->{name} should give $method of $test->{$method}";
+ }
+ };
+ }
+
+};
+
+done_testing;