Je suis un mentor chez RubyLearning et l'un des exercices que nous donnons à nos élèves est l'exercice «Sourde grand-mère» du livre de Chris Pine « Apprendre à programmer ». Voici la description:
Écrivez un programme sur la grand-mère sourde. Quoi que vous disiez à grand-mère (quoi que vous tapiez), elle devrait répondre par: "Hein?! Parlez, mon fils!", À moins que vous ne le criiez (tapez toutes les capitales). Si vous criez, elle peut vous entendre (ou du moins elle le pense) et crie: "Non, pas depuis 1938!"
Pour rendre votre programme vraiment crédible, demandez à grand-mère de crier une année différente à chaque fois; peut-être n'importe quelle année au hasard entre 1930 et 1950. (Cette partie est facultative, et serait beaucoup plus facile si vous lisez la section sur le générateur de nombres aléatoires de Ruby à la fin du chapitre sur les méthodes.) Vous ne pouvez pas arrêter de parler à grand-mère jusqu'à ce que vous criez "BYE".
Après plusieurs itérations de cours, j'ai essayé de voir à quel point je pouvais obtenir cela et maintenant le réduire à 112 caractères:
puts (s||='').upcase==s ? "NO, NOT SINCE #{1930+rand(21)}!":"HUH?! SPEAK UP, SONNY!" until(s=gets.chomp)=="BYE"
Je suis curieux de voir combien de personnages cela peut être réalisé dans la langue de votre choix, car je pense que Ruby se débrouille déjà très bien ici.
Edit: La solution Perl publiée ci-dessous a conduit à
ruby -nle 'puts($_=="BYE"?exit: $_.upcase!? "HUH?! SEPAK UP, SONNY!":"NO, NOT SINCE #{1930+rand(21)}!")'
qui est de 92 caractères pour l'expression + 2 autres pour les options n
et l
.