คำแนะนำสำหรับทับทิม


13

ฉันจะย่อให้สั้นลงได้อย่างไร:

p=gets.to_i
a=gets
b=gets.to_i

หากอินพุตของฉันเป็นจำนวนเต็มตามด้วยสตริงตามด้วยจำนวนเต็ม?


4
ยินดีต้อนรับสู่ PPCG!
Martin Ender

สำหรับคนที่จะบอกว่านี่ไม่ใช่หัวข้อหากคุณต้องการโต้แย้งก็คืออ่านเมตาแล้วส่งข้อความถึงฉัน
Stan Strum

คำตอบ:


7

ใช้ ARGV ($ *) และการมอบหมายจำนวนมาก

(ข้อจำกัดความรับผิดชอบ: ฉันไม่รู้ทับทิม แต่ใช้งานได้กับ TIO )

p,a,b=$*
p=p.to_i
b=b.to_i

28 26 ไบต์แทน 30 (ขอบคุณ Snack สำหรับการชี้ให้เห็นเคล็ดลับ $ *)


ARGV ยังสามารถเข้าถึงได้ในรูปแบบ $ * ซึ่งช่วยประหยัดสองไบต์
Snack

4
@Snack Hehe ตอบคำถามเคล็ดลับการเล่นกอล์ฟ :)
AdmBorkBork

6

ใช้แลมบ์ดา

โดยทั่วไปคำตอบจะได้รับอนุญาตเป็นฟังก์ชั่นแลมบ์ดาที่อินพุต / เอาต์พุตของคุณเป็นพารามิเตอร์ / ค่าส่งคืนของแลมบ์ดาดังนั้นคุณสามารถทำสิ่งนี้ได้:

->p,a,b{...}

หากคุณกำหนดสิ่งนี้ให้กับตัวแปรfมันจะถูกเรียกว่าเป็น

f[p,a,b]

โดยทั่วไปถือว่าดีสำหรับประเภทของอินพุตเช่นกัน แต่เพื่อความปลอดภัยคุณสามารถพูดถึงมันในคำตอบของคุณ

เมตาโพสต์ที่เกี่ยวข้องเกี่ยวกับวิธีการอินพุต / เอาต์พุตที่ยอมรับได้


6

หากคุณต้องการโปรแกรมเต็มรูปแบบที่มี stdin / stdout io ด้วยเหตุผลบางอย่างที่สั้นที่สุดที่คุณสามารถทำได้คือใช้-nแฟล็กเพื่อย่อการโทรหนึ่งครั้งไปgets.to_iที่eval$_:

p=eval$_
a=gets
b=gets.to_i

การ-nตั้งค่าสถานะล้อมรอบรหัสของคุณด้วยwhile gets ... endดังนั้นโปรแกรมจะวนซ้ำหากมีการป้อนข้อมูลเข้ามากกว่าโปรแกรมของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.