ฉันเป็นที่ปรึกษาของ RubyLearning และหนึ่งในแบบฝึกหัดที่เรามอบให้กับนักเรียนของเราคือแบบฝึกหัด "คนหูหนวกคุณยาย" จากหนังสือของ Chris Pine " Learn to Program " นี่คือคำอธิบาย:
เขียนโปรแกรม Deaf Grandma ไม่ว่าคุณจะพูดอะไรกับคุณย่า (ไม่ว่าคุณจะพิมพ์อะไร) เธอควรตอบด้วย: "อืม?! พูดออกมานี่ซันนี่!" เว้นแต่คุณจะตะโกน (พิมพ์ทุกประเภท) หากคุณตะโกนเธอจะได้ยินคุณ (หรืออย่างน้อยเธอก็คิดอย่างนั้น) และตะโกนกลับมาว่า: "ไม่ไม่ใช่ตั้งแต่ปี 1938!"
เพื่อให้โปรแกรมของคุณน่าเชื่อถือจริงๆให้คุณยายตะโกนปีละครั้งกัน อาจสุ่มปีใดก็ได้ระหว่างปี 1930 ถึง 1950 (ส่วนนี้เป็นทางเลือกและจะง่ายกว่ามากถ้าคุณอ่านส่วนของตัวสร้างหมายเลขสุ่มของ Ruby ที่ท้ายบทวิธี) คุณไม่สามารถหยุดคุยกับคุณยายจนกว่าคุณจะ ตะโกน "BYE"
หลังจากทำซ้ำหลายคอร์สฉันพยายามดูว่าฉันจะได้ขนาดเล็กแค่ไหนและตอนนี้มีอักขระได้ถึง 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