Task1
We count the maximum frequencies of vowels and consonants and sum them:
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util qw(max);
use Test::More tests => 5;
sub sum_of_frequencies {
my %h;
$h{$_}++ foreach split '', lc $_[0];
my ($c, $v) = (0, 0);
foreach (keys %h) {
/[aeiou]/ ? ($v = max($v, $h{$_})) : ($c = max($c, $h{$_}));
}
$c + $v;
}
is sum_of_frequencies('banana'),5,'Example 1';
is sum_of_frequencies('teestett'),7,'Example 2';
is sum_of_frequencies('aeiouuaa'),3,'Example 3';
is sum_of_frequencies('rhythm'),2,'Example 4';
is sum_of_frequencies('x'),1,'Example 5';
Task2
We calculate the score of each letter according to its position in the string and reverse alphabet enumeration and then sum the result:
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util qw(sum0);
use Test::More tests => 5;
sub reverse_degree{
my ($i,%h) = (1);
@h{'a'..'z'} = reverse 1..26;
sum0 map {$h{$_} * $i++} split '',lc $_[0]
}
is reverse_degree('z'),1,'Example 1';
is reverse_degree('a'),26,'Example 2';
is reverse_degree('bbc'),147,'Example 3';
is reverse_degree('racecar'),560,'Example 4';
is reverse_degree('zyx'),14,'Example 5';
done_testing();
No comments:
Post a Comment