Boletim ViaLinuxis

Jorge Kinoshita
Sorteio de Amigo Secreto: algoritmo

(un)subscribe
7-12-00

No boletim http://www.pcs.usp.br/~jkinoshi/bs/b001127.html apresentei o CGI-script para sortear amigos secretos em:
http://www.pcs.usp.br/cgi-bin/jkinoshi/natal/fazlista.cgi
Algumas pessoas se interessaram em saber como funciona o algoritmo para fazer o sorteio: como se evita que a própria pessoa sorteie ela mesma e como evitar que haja círculos (João tira Pedro e Pedro tira João).

Fiz o seguinte:
Em fazlista.cgi:
- o script recebe a lista de nomes (um por linha).
- as linhas são embaralhadas usando uma função randômica e armazenadas em um arquivo.
O nome da linha 1 tira o da linha 2, o da linha 2 tira o da linha 3, etc. e o da última linha retira o primeiro.

Em amigo.cgi:
- Quando o João vê o nome de seu amigo secreto, a linha correspondente ao "João" é marcada para se evitar que alguém veja o amigo secreto dele.

O "lançamento" deste script, embora simples, envolveu diversas tarefas:
1. Concepção
- inviabilidade de se fazer um sorteio real de amigo secreto,
- idéia de usar a internet para resolver o problema,
- idéia do algoritmo,
2. Implementação
- implementação em Perl da idéia básica,
- enfeites para deixar a página amigável
3. Divulgação.
- divulgação no boletim de 27 de Novembro

Para a dica de hoje ficar um pouco mais técnica, vai um complemento: use o pacote CGI.pm para criar os scripts CGI em Perl. A documentação pode ser acessada através do comando:

perldoc CGI
^JC