From c3f8b7f1b9db49c31cae54702aaefa86ddbd11f5 Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Mon, 31 Jul 2023 19:08:19 +0100 Subject: add solutions for week 228 in perl --- challenge-228/steven-wilson/perl/ch-01.pl | 24 ++++++++++++++++++++++++ challenge-228/steven-wilson/perl/ch-02.pl | 27 +++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 challenge-228/steven-wilson/perl/ch-01.pl create mode 100644 challenge-228/steven-wilson/perl/ch-02.pl diff --git a/challenge-228/steven-wilson/perl/ch-01.pl b/challenge-228/steven-wilson/perl/ch-01.pl new file mode 100644 index 0000000000..dae4b4e6ba --- /dev/null +++ b/challenge-228/steven-wilson/perl/ch-01.pl @@ -0,0 +1,24 @@ +#!/usr/bin/env perl + +use 5.12.0; +use Test::More; + +cmp_ok( sum_unique( ( 2, 1, 3, 2 ) ), '==', 4, "2 unique elements" ); +cmp_ok( sum_unique( ( 1, 1, 1, 1 ) ), '==', 0, "0 unique elements" ); +cmp_ok( sum_unique( ( 2, 1, 3, 4 ) ), '==', 10, "all elements unique" ); +done_testing(); + +sub sum_unique { + my @elements = @_; + my %element_count; + my $sum = 0; + for (@elements) { + $element_count{$_}++; + } + for ( keys %element_count ) { + if ( $element_count{$_} == 1 ) { + $sum += $_; + } + } + return $sum; +} diff --git a/challenge-228/steven-wilson/perl/ch-02.pl b/challenge-228/steven-wilson/perl/ch-02.pl new file mode 100644 index 0000000000..2af5a79c64 --- /dev/null +++ b/challenge-228/steven-wilson/perl/ch-02.pl @@ -0,0 +1,27 @@ +#!/usr/bin/env perl + +use 5.12.0; +use List::Util qw / min /; +use Test::More; + +cmp_ok( empty_array( ( 3, 4, 2 ) ), '==', 5, "array out of order" ); +cmp_ok( empty_array( ( 1, 2, 3 ) ), '==', 3, "array accending order" ); +cmp_ok( empty_array( () ), '==', 0, "array empty" ); +done_testing(); + +sub empty_array { + my @elements = @_; + my $ops = 0; + while ( @elements ) { + if ( min(@elements) == $elements[0] ) { + shift @elements; + $ops++; + } + else { + my $element = shift @elements; + push @elements, $element; + $ops++; + } + } + return $ops; +} -- cgit From bc832b19dd7f9507b7c3b787959b8368c18fe7d9 Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Mon, 31 Jul 2023 21:52:59 +0100 Subject: small changes --- challenge-228/steven-wilson/perl/ch-02.pl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/challenge-228/steven-wilson/perl/ch-02.pl b/challenge-228/steven-wilson/perl/ch-02.pl index 2af5a79c64..17b0e0689e 100644 --- a/challenge-228/steven-wilson/perl/ch-02.pl +++ b/challenge-228/steven-wilson/perl/ch-02.pl @@ -12,16 +12,15 @@ done_testing(); sub empty_array { my @elements = @_; my $ops = 0; - while ( @elements ) { + while (@elements) { if ( min(@elements) == $elements[0] ) { shift @elements; - $ops++; } else { my $element = shift @elements; push @elements, $element; - $ops++; } + $ops++; } return $ops; } -- cgit