From bd7299957268fdcda38c666bdeeb9e4a377e36f5 Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Sun, 4 Sep 2022 13:51:05 +0100 Subject: add solution week 180 task 1 in perl --- challenge-180/steven-wilson/perl/ch-01.pl | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 challenge-180/steven-wilson/perl/ch-01.pl diff --git a/challenge-180/steven-wilson/perl/ch-01.pl b/challenge-180/steven-wilson/perl/ch-01.pl new file mode 100644 index 0000000000..60bf86968e --- /dev/null +++ b/challenge-180/steven-wilson/perl/ch-01.pl @@ -0,0 +1,33 @@ +#!/usr/bin/env perl +# Week 180 Task 1 +# Write a script to find out the first unique character in the given string +# and print its index (0-based). + +use strict; +use warnings; +use Test::More; + +ok(first_unique_character("Perl Weekly Challenge") == 0, "First"); +ok(first_unique_character("Long Live Perl") == 1, "Second"); +ok(first_unique_character("LOLOLx") == 5, "Last"); +ok(!defined(first_unique_character("LOLO")), "None"); +done_testing(); + +sub first_unique_character { + my $s = shift; + my $len = length $s; + my $index = 0; + while ( $index < $len) { + my $c = substr $s, $index, 1; + my $number = () = $s =~ /$c/gi; + if ( $number == 1){ + last; + } + $index++; + if ($index == $len) { + undef $index; + last; + } + } + return $index; +} \ No newline at end of file -- cgit From da25ccd5e0a44350c38ced981192339ece78424e Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Sun, 4 Sep 2022 16:24:45 +0100 Subject: add solution week 180 task 2 in perl --- challenge-180/steven-wilson/perl/ch-02.pl | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 challenge-180/steven-wilson/perl/ch-02.pl diff --git a/challenge-180/steven-wilson/perl/ch-02.pl b/challenge-180/steven-wilson/perl/ch-02.pl new file mode 100644 index 0000000000..f68652e646 --- /dev/null +++ b/challenge-180/steven-wilson/perl/ch-02.pl @@ -0,0 +1,28 @@ +#!/usr/bin/env perl +# Week 180 Task 2 +# You are given list of numbers, @n and an integer $i. +# Write a script to trim the given list where element is less than or equal to +# the given integer. + +use strict; +use warnings; +use Test::More; + +my @n_t1 = ( 1, 4, 2, 3, 5 ); +my $i_t1 = 3; +my @r_t1 = ( 4, 5 ); + +my @n_t2 = ( 9, 0, 6, 2, 3, 8, 5 ); +my $i_t2 = 4; +my @r_t2 = ( 9, 6, 8, 5 ); + +is_deeply( trim_list( $i_t1, \@n_t1 ), \@r_t1 ); +is_deeply( trim_list( $i_t2, \@n_t2 ), \@r_t2 ); +done_testing(); + +sub trim_list { + my $i = shift; + my $n_ref = shift; + my @r = grep { $_ > $i } @{$n_ref}; + return \@r; +} -- cgit