ทำให้IFข้อความสั้นลง
IF คำสั่งค่อนข้างแพงและการเล่นกอล์ฟลงสามารถบันทึกจำนวนมากไบต์
พิจารณาสิ่งต่อไปนี้ (ดัดแปลงมาจากคำตอบของ Erik the Outgolfer):
IF RND<.5THEN
x=x-1
a(i)=1
ELSE
y=y-1
a(i)=0
ENDIF
สิ่งแรกที่เราทำได้คือบันทึกENDIFโดยใช้IFคำสั่งแบบบรรทัดเดียว:
IF RND<.5THEN x=x-1:a(i)=1ELSE y=y-1:a(i)=0
ใช้งานได้ตราบใดที่คุณไม่พยายามวางไว้ในบรรทัดเดียวกันกับสิ่งอื่นใด โดยเฉพาะอย่างยิ่งหากคุณมีIFคำสั่งซ้อนกันเพียงหนึ่งในสุดเท่านั้นที่สามารถเป็นหนึ่งเดียว
แต่ในกรณีนี้เราสามารถกำจัดการIFใช้คณิตศาสตร์ได้ทั้งหมด พิจารณาสิ่งที่เราต้องการ:
- หาก
RND<.5เป็นจริง ( -1) เราต้องการ:
x เพื่อลดลง 1
y อยู่เหมือนกัน
a(i) กลายเป็น 1
- มิฉะนั้นถ้า
RND<.5เป็นเท็จ ( 0) เราต้องการ:
x อยู่เหมือนกัน
y เพื่อลดลง 1
a(i) เป็น 0
ตอนนี้ถ้าเราบันทึกผลของเงื่อนไขในตัวแปร ( r=RND<.5) เราสามารถคำนวณค่าใหม่ของx, yและa(i):
- เมื่อ
rเป็น-1, x=x-1; เมื่อrเป็น,0x=x+0
- เมื่อ
rเป็น-1, y=y+0; เมื่อrเป็น,0y=y-1
- เมื่อ
rเป็น-1, a(i)=1; เมื่อrเป็น,0a(i)=0
ดังนั้นรหัสสุดท้ายของเราดูเหมือนว่า:
r=RND<.5
x=x+r
y=y-1-r
a(i)=-r
ประหยัดพื้นที่เก็บมากถึง 20 ไบต์ (40%) จากเวอร์ชันดั้งเดิม
วิธีการทางคณิตศาสตร์ที่สามารถนำมาใช้น่าแปลกใจบ่อย แต่เมื่อมีความแตกต่างในตรรกะระหว่างสองกรณี (เช่นเมื่อคุณต้องการบางสิ่งบางอย่างในการป้อนข้อมูลกรณีหนึ่ง แต่ไม่ได้อยู่ในที่อื่น ๆ ) IFคุณจะยังคงต้องใช้