Peter’s blog ✴ Week 264 ✴ 8 April 2024
THE WEEKLY CHALLENGE
Greatest letter and mashed arrays
You are given a string, $str, made up of only alphabetic characters [a..zA..Z]. Write a script to return the greatest English letter in the given string. A letter is greatest if it occurs as lower and upper case. Also letter ‘b’ is greater than ‘a’ as ‘b’ appears after ‘a’ in the English alphabet.
Example 1 Input: $str = 'PeRlwEeKLy' Output: L There are two letters E and L that appears as lower and upper. The letter L appears after E, so the L is the greatest English letter. Example 2 Input: $str = 'ChaLlenge' Output: L Example 3 Input: $str = 'The' Output: ''
I can think of several ways of meeting this challenge, but I think this one is probably the most efficient.
$str in reverse (eg cbaCBA)
$c.*$C where $C == uc($c)
Because of the reverse sort the first match will be the match which is the last alphabetically, and thus the greatest English letter in the string.
Breaking task into smaller steps make the job so easy. Live demo is the highlight for me as always.
#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2024-04-08 use utf8; # Week 264 - task 1 - Greatest English letter use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; greatest_english_letter('PeRlwEeKLy'); greatest_english_letter('zebras live in London Zoo'); greatest_english_letter('Antelopes like chocolate'); greatest_english_letter('all lower case gives a null result'); greatest_english_letter('the lower case can come fiRst'); greatest_english_letter('maybe harder - yAaBbcCdDY'); sub greatest_english_letter { my ($str, $C, $c, $m); $str = shift; say qq[\nInput: \$str = '$str']; # reverse sort characters of $str $str = join('', sort { $b cmp $a } split('', $str)); # loop over lc chars in $str while ($str =~ m|([a-z])|g) { $C = uc($1); # test for uc same char next unless $str =~ m|$1.*$C|; say qq[Output: '$C']; return; } say qq[Output: '']; }
11 lines of code
Input: $str = 'PeRlwEeKLy' Output: 'L' Input: $str = 'zebras live in London Zoo' Output: 'Z' Input: $str = 'Antelopes like chocolate' Output: 'A' Input: $str = 'all lower case gives a null result' Output: '' Input: $str = 'the lower case can come fiRst' Output: 'R' Input: $str = 'maybe harder - yAaBbcCdDY' Output: 'Y'
Any content of this website which has been created by Peter Campbell Smith is in the public domain