Advertisement
Guest User

Secret Santa

a guest
Nov 25th, 2013
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.60 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use common::sense;
  4. use DDP;
  5.  
  6. #######################
  7. #Desafio Amigo Secreto#
  8. #    guedes.acp       #
  9. #   Forum Invaders    #
  10. #forum-invaders.com.br#
  11. #######################
  12.  
  13. my @n;
  14. my $n;
  15. my $c = 0;
  16. @SIG{qw(INT TERM HUP)} = sub { $c >= 2 ? die : $c++ };
  17.  
  18. {
  19.     my $nome;
  20.     sub opglobp{   
  21.         say "Insira o numero de partidipantes";
  22.         chomp ($n = <>);
  23.         $n = participantes($n);
  24.         &opfn;
  25.     }
  26.     sub opglobn{
  27.         say "Insira o nome do partidipante";
  28.         chomp ($nome = <>);
  29.         nomes($nome) ? push(@n, $nome) : &opglobn;
  30.     }
  31.     sub opfn{
  32.         for (my $i = 0; $i <= $n -1; $i){
  33.             opglobn;
  34.             $i++;
  35.         }
  36.     &main;
  37.     }
  38. }
  39.    
  40. sub help{
  41.     given($_[0]){
  42.         when(1){say "O numero de participantes deve ser maior ou igual a 3"; return 0}
  43.         when(2){say "Nao e permitido nomes com menos de 4 caracteres";opglobn}
  44.     }
  45. }
  46. sub participantes {($_[0] <= 2) ? return help(1) : return $_[0]} #determina n de participantes
  47. sub nomes {(length $_[0] < 4) ? return help(2) : return $_[0]} #recebe os nomes dos participantes
  48. sub sortname{ my $p = int rand(@_); return $_[$p], $p}
  49.  
  50. sub main {
  51.     my @nomes = @n;
  52.     my @nomesi = @nomes;
  53.     my $cn = @nomes;
  54.     my %sort;
  55.     DUMP: for (my $i =0; $i <= $cn; $i++){
  56.         my ($s, $po) = sortname(@nomes);
  57.         my ($si, $poi) = sortname(@nomesi);
  58.         if ($s ne $si){
  59.             splice(@nomes, $po, 1);
  60.             splice(@nomesi, $poi, 1);
  61.             if(!exists $sort{$si}){
  62.                 $sort{$s} = $si;
  63.             }
  64.             else{
  65.                 if($sort{$si} eq $s){
  66.                     $sort{$si} = $sort{$si} . " =>ambos";
  67.                 }
  68.                 else{
  69.                     $sort{$s} = $si;
  70.                 }
  71.             }
  72.         }
  73.         else{ if (@nomes != 0) {$i--; next DUMP;}}
  74.     }
  75.     p %sort;
  76. }
  77.  
  78. opglobp;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement