Sono un mentore di RubyLearning e uno degli esercizi che facciamo ai nostri studenti è l'esercizio "Nonna sorda" dal libro " Impara al programma " di Chris Pine . Ecco la descrizione:
Scrivi un programma Nonna sorda. Qualunque cosa tu dica alla nonna (qualunque cosa tu digiti), lei dovrebbe rispondere con: "Eh ?! Parla, figliolo!", A meno che tu non lo gridi (digita tutte le maiuscole). Se gridi, ti sente (o almeno la pensa così) e grida: "No, non dal 1938!"
Per rendere il tuo programma davvero credibile, chiedi alla nonna di urlare un anno diverso ogni volta; forse ogni anno a caso tra il 1930 e il 1950. (Questa parte è facoltativa e sarebbe molto più semplice se leggi la sezione sul generatore di numeri casuali di Ruby alla fine del capitolo dei metodi.) Non puoi smettere di parlare con la nonna fino a quando gridare "BYE".
Dopo varie iterazioni di corsi ho provato a vedere quanto sono piccolo e ora riesco a ridurlo a 112 caratteri:
puts (s||='').upcase==s ? "NO, NOT SINCE #{1930+rand(21)}!":"HUH?! SPEAK UP, SONNY!" until(s=gets.chomp)=="BYE"
Sono curioso di vedere in quanti pochi personaggi questo può essere realizzato nella lingua che preferisci, perché penso che Ruby stia già andando molto bene qui.
Modifica: la soluzione Perl pubblicata di seguito ha portato a
ruby -nle 'puts($_=="BYE"?exit: $_.upcase!? "HUH?! SEPAK UP, SONNY!":"NO, NOT SINCE #{1930+rand(21)}!")'
che è di 92 caratteri per l'espressione + 2 in più per le opzioni ne l.

