diff options
| author | lancew <lw@judocoach.com> | 2024-03-21 22:23:04 +0000 |
|---|---|---|
| committer | lancew <lw@judocoach.com> | 2024-03-21 22:23:09 +0000 |
| commit | a1c77cd39dde0f82373d1876a1848b0a54171048 (patch) | |
| tree | 4aa8c18051acaaa655ec7264e65f8a5490971972 | |
| parent | 8e95e94de527f8344f979dbb45b935139b1ddeb7 (diff) | |
| download | perlweeklychallenge-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.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; |
