When I was 9 years old, I used to go to my mom’s workplace to talk to some IT guys who were working there. Eventually, one of them started teaching me BASIC, getting me started into programming and fulfilling my desire to understand how people made “stuff appear on the screen”.
Nowadays I know how bad a language BASIC is, but I eventually get nostalgic. I still sometimes feel like opening an MS-DOS prompt on Microsoft Windows 95 and firing up QBasic 1.0, just to have hours of fun printing things on the screen and making the computer produce all sorts of beeps. Those were really nice days.
Hoje no trabalho, um colega enviou a seguinte piada para uma lista interna:
A esposa pede ao marido, um programador, para ir à mercearia e diz:
– Compre duas salsichas e, se eles tiverem ovos, compre 10.
O programador vai até a loja e pergunta:
– Vocês têm ovos?
– Sim.
– Então eu quero 10 salsichas.
Esta piada é simplesmente muito boa (de fato, eu pensei exatamente como o programador da piada) e o Otávio encaminhou a mensagem para pipoca-l, nossa lista de discussão do pessoal da Unisinos. A primeira resposta foi do Dante, com a seguinte objeção:
Mas cara, o programador não deveria primeiro comprar as duas salsichas
pra depois comprar mais 10?
O que nos mostrou que estávamos diante um grande problema semântico, e não de uma inocente piada. Dada a criticidade da necessidade de uma solução para o problema, o Otávio e eu prontamente começamos a trabalhar na solução. A conclusão à qual chegamos, com base em nossos trabalhos que seguiram escolas diferentes de pensamento para o Problema dos Ovos e das Salsichas do Programador, é de que o problema é altamente ambÃguo e não possui solução computacional definitiva.
A seguir encontra-se a resposta que produzimos, anunciando tal fato:
O problema é ambÃguo e sugere duas abordagens. (Cordeiro, O. C., 2008) sugere que o valor que representa a quantidade de salsichas a serem adquiridas é sobrescrito a cada pedido de compra, sugerindo uma mudança de idéia por parte do agente que executa a ação. Sendo assim, o problema pode ser resolvido utilizando o seguinte programa:
#!/bin/bash
SAUSAGES=0
function buy_sausages {
SAUSAGES=$1
}
buy_sausages 2 && if [[ $EGGS != 0 ]]; then buy_sausages 10; fi
echo $SAUSAGES
No entanto, a abordagem dada por (Silveira, C. L. B., 2008) acrescenta ao valor mencionado a quantidade requisitada pelo agente em cada ação de compra. O programa abaixo ilustra a semântica da abordagem:
#!/bin/bash
SAUSAGES=0
function buy_sausages {
SAUSAGES=$((SAUSAGES+$1))
}
buy_sausages 2 && if [[ $EGGS != 0 ]]; then buy_sausages 10; fi
echo $SAUSAGES
Os resultados da execução dos programas são apresentados a seguir, demonstrando a ambigüidade do problema em questão:
root@ubuntu32:~# EGGS=0 ./cesar.sh
2
root@ubuntu32:~# EGGS=1 ./cesar.sh
12
root@ubuntu32:~# EGGS=0 ./otavio.sh
2
root@ubuntu32:~# EGGS=1 ./otavio.sh
10
Dado que o resultado é determinÃstico, não são necessárias multiplas execuções para os cálculos de média e desvio padrão dos valores observados.
Referências:
Cordeiro, Otávio C. A non-cumulative approach to the Programmer’s Eggs and Sausages problem. Porto Alegre, 2008.
Silveira, César L. B.. Usage of recurrence relations in the solution of the Programmer’s Eggs and Sausages problem. Porto Alegre, 2008.
Ao contrário do que muitos acham, eu nem sou tanto assim:
49% GeekMingle2 – Free Online Dating
Já é o segundo teste que eu faço que atesta tal fato.
Achei o teste bem tri, ao contrário de alguns outros que existem por aÃ.
Como se baixa a Internet?
$ wget *
😛