segunda-feira, julho 09, 2007

numeros.pl

Estava eu nesse fim de domingo, em casa, sem ter o que fazer. Nesse momento de ócio, lembrei de um numerólogo que estava dando entrevista essa semana na TV e procurei por Numerologia na Wikipédia. Comecei a ler o artigo e decidi fazer uns testes.

O problema é que é chato ficar somando os valores das letras dos nomes pra saber o número da pessoa. Então, como bom cientista da computação que sou, implementei um programinha pra fazer essa tarefa.

Pois bem, escrevi o código em Perl. Como programas em Perl são interpretados e não compilados, você vai precisar ter o interpretador instalado em seu computador pra executar o programa. Quem usa Windows, pode tentar o ActivePerl. Quem usa Linux ou outro UNIX, provavelmente já tem o Perl instalado (se não tiver, você pode baixar o fonte e compilar ou instalar o pacote correspondente). Pra executar o programa, use a linha de comando:

perl numeros.pl


O programa irá perguntar seu nome completo e sua data de nascimento. Em seguida, vai somar os valores de cada letra do nome e dar seu número na numerologia. Depois, vai somar os números da sua data de nascimento e lhe entregar o número correspondente à sua lição de vida. Aí é só usar o artigo da Wikipédia pra saber o que cada número significa.

#!/usr/bin/perl
# Referencia: http://pt.wikipedia.org/wiki/Numerologia

# Soma os digitos
sub soma {
my $numero = 0;
my (@digitos) = split(//, $_[0]);

for (my $i = 0; $i < @digitos; ++$i) {
$numero += abs($digitos[$i]);
}

if ($numero >= 10) {
return &soma($numero);
} else {
return $numero;
}
}

# Tabela de numerologia
my $tabela = ({
a => 1, b => 2, c => 3, d => 4, e => 5, f => 6,
g => 7, h => 8, i => 9, j => 1, k => 2, l => 3,
m => 4, n => 5, o => 6, p => 7, q => 8, r => 9,
s => 1, t => 2, u => 3, v => 4, w => 5, x => 6,
y => 7, z => 8,
});

# Solicita o nome
my $nome = undef;
do {
print "Digite seu nome completo, sem acentos ou cedilha:\n";
$nome = lc(<STDIN>);

chop($nome);
} while ($nome eq '');

# Solicida data de nascimento
my $nasc = undef;
do {
print "Digite sua data de nascimento, ex.: 10\/11\/1982\n";
$nasc = lc(<STDIN>);

chop($nasc);
} while ($nasc eq '');


# Divide as letras e calcula a soma
my (@letras) = split(//, $nome);
my $numero = 0;

for (my $i = 0; $i < @letras; ++$i) {
next if $letras[$i] eq ' ';
$numero += $tabela->{$letras[$i]};
}

# Exibe o resultado
print "Seu numero: " . &soma($numero) . "\n";
print "Sua licao de vida: " . &soma($nasc) . "\n";

Nenhum comentário: