ฉันจะย่อให้สั้นลงได้อย่างไร:
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
ดังนั้นโปรแกรมจะวนซ้ำหากมีการป้อนข้อมูลเข้ามากกว่าโปรแกรมของคุณ