ฉันจะย่อให้สั้นลงได้อย่างไร:
p=gets.to_i
a=gets
b=gets.to_i
หากอินพุตของฉันเป็นจำนวนเต็มตามด้วยสตริงตามด้วยจำนวนเต็ม?
ฉันจะย่อให้สั้นลงได้อย่างไร:
p=gets.to_i
a=gets
b=gets.to_i
หากอินพุตของฉันเป็นจำนวนเต็มตามด้วยสตริงตามด้วยจำนวนเต็ม?
คำตอบ:
(ข้อจำกัดความรับผิดชอบ: ฉันไม่รู้ทับทิม แต่ใช้งานได้กับ TIO )
p,a,b=$*
p=p.to_i
b=b.to_i
28 26 ไบต์แทน 30 (ขอบคุณ Snack สำหรับการชี้ให้เห็นเคล็ดลับ $ *)
โดยทั่วไปคำตอบจะได้รับอนุญาตเป็นฟังก์ชั่นแลมบ์ดาที่อินพุต / เอาต์พุตของคุณเป็นพารามิเตอร์ / ค่าส่งคืนของแลมบ์ดาดังนั้นคุณสามารถทำสิ่งนี้ได้:
->p,a,b{...}
หากคุณกำหนดสิ่งนี้ให้กับตัวแปรfมันจะถูกเรียกว่าเป็น
f[p,a,b]
โดยทั่วไปถือว่าดีสำหรับประเภทของอินพุตเช่นกัน แต่เพื่อความปลอดภัยคุณสามารถพูดถึงมันในคำตอบของคุณ
เมตาโพสต์ที่เกี่ยวข้องเกี่ยวกับวิธีการอินพุต / เอาต์พุตที่ยอมรับได้
หากคุณต้องการโปรแกรมเต็มรูปแบบที่มี stdin / stdout io ด้วยเหตุผลบางอย่างที่สั้นที่สุดที่คุณสามารถทำได้คือใช้-nแฟล็กเพื่อย่อการโทรหนึ่งครั้งไปgets.to_iที่eval$_:
p=eval$_
a=gets
b=gets.to_i
การ-nตั้งค่าสถานะล้อมรอบรหัสของคุณด้วยwhile gets ... endดังนั้นโปรแกรมจะวนซ้ำหากมีการป้อนข้อมูลเข้ามากกว่าโปรแกรมของคุณ