fmle - Challenge 2 - FULL - Perl

Ir em baixo

fmle - Challenge 2 - FULL - Perl

Mensagem  fmle em Dom Jul 24, 2011 5:34 pm

1 - Faça um Programa que leia um número e exiba o dia correspondente da semana (Começando de domingo ). Caso você digite outro valor deve aparecer valor inválido.
1
2
3
#!/usr/bin/perl
@dias = ("Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado"); # Vetor com os dias da semana.
((($dia = substr(<>, 0, -1)) == int($dia)) && ($dia > 0) && ($dia < 8)) ? print "$dias[$dia-1]\n" : print "Numero invalido\n"; # Verifica se o número é inteiro e se há um dia da semana correspondente ao mesmo.


2 - Faça um Programa que peça um número correspondente a um determinado ano e em seguida informe se este ano é ou não bissexto.
1
2
3
4
5
6
#!/usr/bin/perl
@arr = (0, 32, 0, 13, -1, 10000); # Limite superior de inferior de dia, mês e ano, respectivamente.
die "Formato inválido.\n" if ((@date = split(/\//, <>)) != 3); # Atribui ao vetor @date a data passada e verifica o formato dd/mm/aaaa.
map { $invalid |= !(($arr[0] < $_) & ($_ < $arr[1])), splice(@arr, 0, 2) } @date; # Verifica se é a data válida.
die "Data inválida.\n" if $invalid; # Se não, terminar a execução.
((!($date[2]%4) && ($date[2]%100)) || (!$date[2]%400)) ? print "Ano é bissexto\n" : print "Ano não é bissexto.\n"; # Verifica se o ano é bissexto.


3 - Faça um programa que peça uma nota, entre zero e dez. Mostre uma mensagem caso o valor seja inválido e continue pedindo até que o usuário informe um valor válido.
1
2
#!/usr/bin/perl
do { print "Entre com uma nota de 0 a 10\n"; } while( (($input = substr(<>, 0, -1))*1 ne $input) || ($input < 0) || ($input > 10) ); # Imprime uma mensagem enquanto a entrada não for um número, inteiro ou ponto flutuante, entre e incluindo 0 e 10.


4 - Faça um programa que leia um nome de usuário e a sua senha e não aceite a senha igual ao nome do usuário, mostrando uma mensagem de erro e voltando a pedir as informações.
1
2
#!/usr/bin/perl
do { print "Entre com usuário e senha diferentes separadas por um espaço.\n"; } while((@auth = split(/ +/, substr(<>, 0, -1))) && ($auth[0] eq $auth[1])) #Imprime uma mensagem até que o usuário($auth[0]) seja diferente da senha($auth[1]).


5 - Faça um programa que calcule a quantidade dinheiro gasto por um fumante com os seguintes dados: [...]
1
2
3
4
#!/usr/bin/perl
print "Entre com o número de anos que fuma, quantos cigarros fuma por dia e o preço da carteira de cigarro separados por um espaço.\n";
@data = split(/ +/, substr(<>, 0, -1)); # Preenche o vetor @data com os dados do fumante.
print ((int($data[0]*365*$data[1]/20) + ($data[0]*365*$data[1]%20 ? 1 : 0))*$data[2], "\n"); # Imprime o valor gasto, considerando uma carteira de 20 cigarros.


O código não é dos mais limpos e bem comentados, mas pra passar as férias, qualquer coisa tá valendo : )
Vô ver se eu termino o light e começo o hardcore hoje, se der eu faço o moderate amanhã ou depois. Boa sorte a todos!
avatar
fmle

Mensagens : 8
Data de inscrição : 24/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fmle - Challenge 2 - FULL - Perl

Mensagem  Z3r0 em Dom Jul 24, 2011 6:06 pm

Seja bem vindo ao Challenge fmle.
Gosto de gente como você...já entra mostrando o que sabe fazer de melhor ou quase isso ( não sei dos teus dotes hehehe ) enfim, bem vindo e espero que goste desta e das próximas versões de challenges. A propósito, o challenge 2 termina dia 28 deste mês... de qualquer modo, sua contribuição aqui, está valendo e muito.

Com você, já temos dois usando perl .. muito bom.
avatar
Z3r0

Mensagens : 149
Data de inscrição : 01/07/2011
Idade : 32

Ver perfil do usuário http://projectzim.blogspot.com

Voltar ao Topo Ir em baixo

Re: fmle - Challenge 2 - FULL - Perl

Mensagem  fmle em Dom Jul 24, 2011 7:26 pm

6 - Escreva um algoritmo para encontrar o número do telefone correspondente a um determinado
nome, na seguinte lista telefônica: [...]
1
2
3
4
#!/usr/bin/perl
%tel = ("Fulano", "334-45566", "Cicrano", "112-23344", "Beltrano", "551-12233", "Zé", "443-34422", "Toinho", "661-12233", "Luizinho", "776-65577"); # Vetor associativo com os nomes e telefones de cada um.
if ($tel_key = $tel{substr(<>, 0, -1)}) { print "$tel_key\n"; } # Imprime o telefone se existir.
else { print "Não consta.\n"; } # Caso o telefone nao exista.


7 - Faça um Programa que leia dois vetores com 10 elementos cada podendo ser strings ou números. Gere um terceiro vetor de 20 elementos, cujos valores deverão ser compostos pelos elementos intercalados dos dois outros vetores.
1
2
3
#!/usr/bin/perl
@main = ([split(/ +/, substr(<>, 0, -1))], [split(/ +/, substr(<>, 0, -1))]); # @main será um vetor bidimensional com os dados do dois vetores de entrada.
for (0 .. 20) { print "$main[$_/10][$_%10]\n"; } # Imprime o vetor na ordem correta.


8 - Utilizando vetores faça um programa que faça 5 perguntas para uma pessoa sobre um crime. As perguntas são: [...]
1
2
3
4
5
#!/usr/bin/perl
@class = (("Inocente") x 2, "Suspeita", ("Cúmplicie") x 2, "Assasino"); # Vetor com as classificações da pessoa.
@qs = ("Telefonou para a vitima?", "Esteve no local do crime?", "Mora perto da vitima?", "Devia para a vitima?", "Ja trabalhou com a vitima"); # Vetor com as perguntas.
foreach (@qs) { print "$_ [s/n]\n"; $s++ if (substr(<>, 0, -1) eq "s"); } # Imprime as perguntas e conta em $s quantas respostas foram 's'.
print "$class[$s]\n"; # Imprime a classificação da pessoa.


9 - Faça um programa que leia 2 strings e informe o conteúdo delas seguido do seu comprimento. Informe também se as duas strings possuem o mesmo comprimento e são iguais ou diferentes no conteúdo.
1
2
3
4
5
#!/usr/bin/perl
@str = (substr(<>, 0, -1), substr(<>, 0, -1)); # Armazena as strings no vetor @str.
map { print "\"$_\". Tamanho: ", length($_), " caracteres.\n" } @str; # Imprime as duas strings e seus respectivos tamanhos.
print "As strings tem tamanhos ", ("diferentes", "iguais")[length($str[0]) == length($str[1])], ".\n"; # Indica se as strings têm os mesmo tamanho.
print "As strings tem conteudos ", ("diferentes", "iguais")[$str[0] eq $str[1]], ".\n" # Indica se as strings são iguais.


1 - Faça um programa que imprima a sí mesmo ou seja, imprimir na tela o seu próprio código fonte. O código fonte será exibido ao abrir o arquivo onde ele está.

spkspkspks, será que vale isso? Se não, nada que um eval não resolve : )

2 - A soma dos números primos abaixo de 10 é 2 + 3 + 5 + 7 = 17.
Faça um programa que encontre e imprima a soma de todos os números primos abaixo de dois milhões como também, imprima quantos números foram encontrados.
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
@crivo = grep { $_ % 2 == 1 } 3 .. 2000000; # Vetor com todos os ímpares até 2000000.
$size = @crivo; # Size recebe o tamanho de @crivo.
for ($i = 0; $i < $size; $i++) { # Algoritmo para encontrar os primos.
if ($crivo[$i]) {
$count++;
$sum += $crivo[$i];
for($j = $i+2*$crivo[$i]; $j < $size; $j+=2*$crivo[$i]) {
$crivo[$j] = 0;
}
}
}
print $count+1, "\n"; # Imprime o número de primos encontrados mais o dois, que ainda não contamos.
print $sum+2, "\n"; # Imprime a soma dos primos encontrados mais dois, que ainda não somamos.


Rapá, esse trem tá rápido demais, o último crivo que eu fiz em C demorou 20 vezes mais, será que tá certo?

3 - Faça um programa que encontre o menor número de x + y + z com inteiros x> y> z> 0 tal que x + y, x - y, x + z, x - z, y + z, y - z sejam quadrados perfeitos.
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl
while(++$x) { # Iterar para todos os x > y > z até achar uma resposta.
$y = 0;
while(++$y < $x) {
$z = 0;
while(++$z < $y) {
if( # Testa se as somas e diferenças são quadrados perfeitos.
(sqrt(($x+$y)) =~ /^\d+$/) &&
(sqrt(($x-$y)) =~ /^\d+$/) &&
(sqrt(($x-$z)) =~ /^\d+$/) &&
(sqrt(($x+$z)) =~ /^\d+$/) &&
(sqrt(($y+$z)) =~ /^\d+$/) &&
(sqrt(($y-$z)) =~ /^\d+$/) ) { print "x + y + z = ", $x+$y+$z, "\n"; exit(0); }
}
}
}

Esse é força-bruta-mor, lerdo bagarai, vô deixar rodando pra ver se consigo alguma coisa.

Achei muito legal a questão 10 do moderate e do light mas num tô com paciência pra isso agora não, então deixa pra depois : )

@Z3r0 Obrigado pela recepção : )
Eu sei que termina dia 28 mas não pretendo fazer tudo não, quem sabe na próxima.
avatar
fmle

Mensagens : 8
Data de inscrição : 24/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fmle - Challenge 2 - FULL - Perl

Mensagem  fvox em Seg Jul 25, 2011 4:42 pm

Hi.

Uia, perl sendo bem representado por aqui. =p
Mas po, faz os códigos de acordo com o strict pra ficar bonzinho, apesar de ser um passatempo hahah. Coloca um STDIN ao invés de <> pra evitar bug caso coloquem argv, etc (como já aconteceu comigo huaua). Mas pelos códigos você sabe disso =p.

Também to com uma preguiça da pêga de terminar isso até o dia 28 HUAUHAHUAHU. Falta o 10 dos dois níveis, mas são longos demais ;(

[]'s
avatar
fvox

Mensagens : 18
Data de inscrição : 02/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fmle - Challenge 2 - FULL - Perl

Mensagem  fmle em Seg Jul 25, 2011 6:07 pm

Sei nada, rapá : )
Aprendi só o basicão de Perl outro dia e não ví nenhuma menção a 'strict', mas, agora que falastes, vô dá uma olhada.
Muito obrigado, abs!
avatar
fmle

Mensagens : 8
Data de inscrição : 24/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fmle - Challenge 2 - FULL - Perl

Mensagem  fvox em Seg Jul 25, 2011 6:19 pm

Hi.

Ah, sim. O "strict" faz parte das boas práticas e do "modern perl", como dizem atualmente. Ele força você a declarar variáveis antes de usá-las, te obriga a usar o "my" para um controle maior, etc.
Aliás, segue uma ÓTIMA apostila feita pelo grande chromatic sobre perl moderno:
http://onyxneon.com/books/modern_perl/modern_perl_letter.pdf

Ele tem um módulo chamado Modern::Perl que implementa automaticamente o strict, os warnings, o 5.10, e por aí vai. Mas a vantagem mesmo é usar o módulo common::sense que apresenta uma economia de memória em relação a implementar o "use strict; use warnings" manualmente, mas ele não habilita TODAS as warnings.

Ah, o common::sense também implementa as features "say, switch e state". Ao invés de você dar um print, você usa o say. Ao invés de dar vários ifs, você usa o given() que é o switch, e por aí vai.

O perl atual tá bem bacaninha hahah. Vale a pena investir!

[]'s
avatar
fvox

Mensagens : 18
Data de inscrição : 02/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fmle - Challenge 2 - FULL - Perl

Mensagem  fmle em Seg Jul 25, 2011 6:33 pm

Rapá, que maravilha de apostila, muito obrigado!
avatar
fmle

Mensagens : 8
Data de inscrição : 24/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fmle - Challenge 2 - FULL - Perl

Mensagem  fvox em Seg Jul 25, 2011 6:39 pm

Hi.

Essa apostila é fodíssima mesmo. A melhor parte a orientação a objeto em Perl através do módulo Moose.
Mas você já pegou bem a "loucura" do perl que é a sintaxe e a parada das referências, então não vai ter trabalho em entender o resto.

Tenho um post lá no fórum invaders com algumas referências de estudo. Vou deixar o quote aqui, caso seja útil pra ti.


fvox escreveu:Estou criando este tópico para a postagem de fontes de estudo de Perl.


Programming Perl - Perl Training

Book excelente em inglês para quem está começando. Explica as estruturas e as particularidades do perl em relação à outras linguagens. Recomendo para quem está começando.
http://perltraining.com.au/notes/progperl.pdf

Modern Perl - Chromatic

Ótimas explicações sobre o Perl Moderno. A abordagem do livro é muito ampla, que passa por escalares, expressões regulares, Moose, etc.
http://onyxneon.com/books/modern_perl/modern_perl_letter.pdf

Advanced Perl Programming

Livro um pouco mais avançado. Mostra as estruturas complexas e referências, orientação a objeto, utilização de sockets, criação de interfaces gráficas e o melhor: explica sobre o funcionamento interno do Perl, ou seja, como funciona o interpretador dentro do "C code".
http://portal.aauj.edu/portal_resources/downloads/programming/oreilly_advanced_perl_programming1997.pdf


Mas não se esqueçam do glorioso perldoc, do man e do mestre CPAN.


Quem se interessar em comprar um livro, o perl[dot]org oferece um índice com livros recomendados:
http://www.perl.org/books/library.html


[]'s
avatar
fvox

Mensagens : 18
Data de inscrição : 02/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: fmle - Challenge 2 - FULL - Perl

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum