Sou mentor do RubyLearning e um dos exercícios que damos aos nossos alunos é o exercício "Deaf Grandma" do livro de Chris Pine, " Learn to Program ". Aqui está a descrição:
Escreva um programa para a avó surda. O que você disser à avó (o que você digitar), ela deverá responder com: "Hein ?! Fala, filho!", A menos que você grite (digite todas as maiúsculas). Se você gritar, ela poderá ouvi-lo (ou pelo menos ela pensa assim) e gritar de volta: "Não, não desde 1938!"
Para tornar seu programa realmente crível, peça à avó que grite um ano diferente a cada vez; talvez qualquer ano aleatoriamente entre 1930 e 1950. (Esta parte é opcional e seria muito mais fácil se você ler a seção sobre o gerador de números aleatórios do Ruby no final do capítulo de métodos.) Você não pode parar de falar com a avó até que gritar "tchau".
Depois de várias iterações do curso, tentei ver o quão pequeno posso conseguir isso e agora tenho 112 caracteres:
puts (s||='').upcase==s ? "NO, NOT SINCE #{1930+rand(21)}!":"HUH?! SPEAK UP, SONNY!" until(s=gets.chomp)=="BYE"
Estou curioso para ver em quantos caracteres isso pode ser alcançado no idioma de sua escolha, porque acho que Ruby já está indo muito bem aqui.
Edit: A solução Perl postada abaixo levou a
ruby -nle 'puts($_=="BYE"?exit: $_.upcase!? "HUH?! SEPAK UP, SONNY!":"NO, NOT SINCE #{1930+rand(21)}!")'
que são 92 caracteres para a expressão + mais 2 para as opções n
e l
.