Я наставник в RubyLearning, и одним из упражнений, которое мы даем нашим студентам, является упражнение «Глухая бабушка» из книги Криса Пайна « Учись программировать ». Вот описание:
Написать программу «Глухая бабушка». Что бы вы ни сказали бабушке (что бы вы ни печатали), она должна ответить: «Да ?! Говори, сынок!», Если только ты не кричишь (набери все заглавные буквы). Если вы кричите, она слышит вас (или, по крайней мере, она так думает) и кричит в ответ: «Нет, не с 1938 года!»
Чтобы ваша программа была правдоподобной, каждый раз, когда бабушка кричит по-разному; может быть, любой случайный год между 1930 и 1950 годами. (Эта часть не обязательна, и будет намного проще, если вы прочитаете раздел о генераторе случайных чисел Руби в конце главы, посвященной методам.) Вы не можете перестать разговаривать с бабушкой, пока не кричать "пока".
После нескольких итераций курса я попытался увидеть, насколько маленьким я могу это получить, и теперь я сократил его до 112 символов:
puts (s||='').upcase==s ? "NO, NOT SINCE #{1930+rand(21)}!":"HUH?! SPEAK UP, SONNY!" until(s=gets.chomp)=="BYE"
Мне любопытно увидеть, как мало символов можно достичь на выбранном вами языке, потому что я думаю, что у Руби уже все хорошо.
Редактировать: решение Perl, опубликованное ниже, привело к
ruby -nle 'puts($_=="BYE"?exit: $_.upcase!? "HUH?! SEPAK UP, SONNY!":"NO, NOT SINCE #{1930+rand(21)}!")'
что составляет 92 символа для выражения + еще 2 для параметров n
и l
.