diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-03-23 09:54:08 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-23 09:54:08 +0000 |
| commit | bd30a74336995f4a98d5adfd34bdd9232117c499 (patch) | |
| tree | b9c83a8f12c1b604f4bf684eef04eac7d71d0e95 | |
| parent | 7e2658104ff5b399ec9ca3b884022794cadc89fe (diff) | |
| parent | a1c77cd39dde0f82373d1876a1848b0a54171048 (diff) | |
| download | perlweeklychallenge-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.pm | 44 | ||||
| -rw-r--r-- | challenge-261/lance-wicks/perl/t/01-eds.t | 56 |
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; |
