RubyLearning'de danışmanım ve öğrencilerimize verdiğimiz alıştırmalardan biri, Chris Pine'ın " Programlamayı Öğren " kitabındaki "Sağır Büyükanne" alıştırması . İşte açıklaması:
Bir Sağır Büyükanne programı yazın. Büyükannene ne söylersen söylesin (ne yazarsın), cevap vermeli: "Huh ?! Konuş, evlat!", Diye bağırmadığın sürece (tüm harfleri yaz). Bağırırsanız, sizi duyabilir (ya da en azından öyle düşünüyor) ve geri bağırır: "Hayır, 1938'den beri değil!"
Programınıza gerçekten inandırıcı yapmak için, büyükannenin her seferinde farklı bir yıl bağırmasını sağlayın; 1930 ve 1950 yılları arasında rastgele herhangi bir yıl olabilir. (Bu bölüm isteğe bağlıdır ve yöntemler bölümünün sonunda Ruby'nin rasgele sayı üreteci bölümünü okursanız çok daha kolay olurdu.) Size kadar büyükannenizle konuşmayı durduramazsınız. "BYE" diye bağır.
Birkaç ders tekrarından sonra bunu ne kadar küçük alabileceğimi görmeye çalıştım ve şimdi 112 karaktere düşürdüm:
puts (s||='').upcase==s ? "NO, NOT SINCE #{1930+rand(21)}!":"HUH?! SPEAK UP, SONNY!" until(s=gets.chomp)=="BYE"
Bunun, seçtiğiniz dilde kaç karaktere ulaşılabileceğini görmek merak ediyorum, çünkü Ruby'nin burada gerçekten çok başarılı olduğunu düşünüyorum.
Düzenleme: aşağıda yayınlanan Perl çözümü yol açtı
ruby -nle 'puts($_=="BYE"?exit: $_.upcase!? "HUH?! SEPAK UP, SONNY!":"NO, NOT SINCE #{1930+rand(21)}!")'
ifadesi için 92 karakterdir n
ve l
seçenekler için + 2 .