From a1c77cd39dde0f82373d1876a1848b0a54171048 Mon Sep 17 00:00:00 2001 From: lancew Date: Thu, 21 Mar 2024 22:23:04 +0000 Subject: 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! --- challenge-261/lance-wicks/perl/lib/EDS.pm | 44 ++++++++++++++++++++++++ challenge-261/lance-wicks/perl/t/01-eds.t | 56 +++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 challenge-261/lance-wicks/perl/lib/EDS.pm create mode 100644 challenge-261/lance-wicks/perl/t/01-eds.t 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; -- cgit