#!/usr/bin/perl -w

# Uma solucao para o exercicio 3 da Aula 27 de MAC211
# M.S.Reis, 17/6/2010

# Esta solucao utiliza a funcao substr para ler a linha apenas uma vez.
# Alem disso, imprime tanto a vogal quanto a consoante mais frequentes.

use strict;
use warnings;

my (%frequencia, $total);

$frequencia{$_} = 0 foreach 'A'..'Z';

# Sintaxe do substr:
#
# my $substring = substr($string, $initial_position, $length); 
#

while(<>){
    my $linha = uc $_;
    foreach (0 .. (length($linha) - 1)){
        my $c = substr($linha, $_, 1);
        $c ge 'A' and $c le 'Z' and $frequencia{$c}++;
    }
}

$total += $frequencia{$_} foreach (keys %frequencia);
$total != 0 and $frequencia{$_} /= $total foreach(keys %frequencia);

my @lista = reverse sort {$frequencia{$a} <=> $frequencia{$b}} ('A', 'E', 'I', 'O', 'U');
printf "Vogal mais frequente: %s -> %1.2f \n", $lista[0], $frequencia{$lista[0]};    

# removo as chaves das vogais; sobram somente as consoantes! Para isso uso a funcao "delete"
# 
delete $frequencia{$_} foreach ('A', 'E', 'I', 'O', 'U');
@lista = reverse sort {$frequencia{$a} <=> $frequencia{$b}} keys %frequencia;
printf "Consoante mais frequente: %s -> %1.2f \n", $lista[0], $frequencia{$lista[0]};
