aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlancew <lw@judocoach.com>2024-03-21 22:23:04 +0000
committerlancew <lw@judocoach.com>2024-03-21 22:23:09 +0000
commita1c77cd39dde0f82373d1876a1848b0a54171048 (patch)
tree4aa8c18051acaaa655ec7264e65f8a5490971972
parent8e95e94de527f8344f979dbb45b935139b1ddeb7 (diff)
downloadperlweeklychallenge-club-a1c77cd39dde0f82373d1876a1848b0a54171048.tar.gz
perlweeklychallenge-club-a1c77cd39dde0f82373d1876a1848b0a54171048.tar.bz2
perlweeklychallenge-club-a1c77cd39dde0f82373d1876a1848b0a54171048.zip
Perl solution, happy Ramadan Mohammad
Was thinking about Mr cpan_author and how awesome all the effort you put into Perl is. How positive you are for all those who are lucky enough to have contact with you! Kia Kaha my friend!
-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;