私はRubyLearningのメンターであり、私たちが生徒に提供するエクササイズの1つは、クリス・パインの本「Learn to Program」の「ろうおばあちゃん」エクササイズです。説明は次のとおりです。
ろうおばあちゃんプログラムを書く。おばあちゃんに何を言っても(入力したものは何でも)、彼女は叫ぶ(すべて大文字で入力する)場合を除き、「ハァッ!声を上げて、息子よ!」あなたが叫ぶと、彼女はあなたの声を聞くことができ(少なくとも彼女はそう思う)、「いいえ、1938年以来じゃない!」と叫ぶ。
あなたのプログラムを本当に信じられるものにするために、おばあちゃんは毎回異なる年を叫んでください。多分、1930年から1950年の間の任意の年。 「BYE」と叫ぶ。
いくつかのコースを繰り返した後、私はこれをどれだけ小さくできるかを試してみましたが、今では112文字になりました。
puts (s||='').upcase==s ? "NO, NOT SINCE #{1930+rand(21)}!":"HUH?! SPEAK UP, SONNY!" until(s=gets.chomp)=="BYE"
ここでRubyはすでに非常にうまく機能していると思うので、あなたが選択した言語でこれを達成できる文字数が少ないことに興味があります。
編集:以下に投稿されたPerlソリューションは、
ruby -nle 'puts($_=="BYE"?exit: $_.upcase!? "HUH?! SEPAK UP, SONNY!":"NO, NOT SINCE #{1930+rand(21)}!")'
式は92文字n
、l
オプションとオプションはさらに2文字です。