IF
Pernyataan pemendekan
IF
pernyataan agak mahal, dan menurunkannya bisa menghemat banyak byte.
Pertimbangkan hal berikut (diadaptasi dari jawaban oleh Erik the Outgolfer):
IF RND<.5THEN
x=x-1
a(i)=1
ELSE
y=y-1
a(i)=0
ENDIF
Hal pertama yang dapat kita lakukan adalah menyimpan ENDIF
dengan menggunakan pernyataan satu baris IF
:
IF RND<.5THEN x=x-1:a(i)=1ELSE y=y-1:a(i)=0
Ini berfungsi selama Anda tidak mencoba untuk meletakkannya di baris yang sama dengan yang lainnya. Khususnya, jika Anda memiliki IF
pernyataan bersarang , hanya yang paling dalam yang dapat dibuat satu baris.
Tetapi dalam hal ini, kita bisa menghilangkan IF
matematika sepenuhnya menggunakan. Pertimbangkan apa yang sebenarnya kita inginkan:
- Jika
RND<.5
benar ( -1
), kami ingin:
x
berkurang 1
y
untuk tetap sama
a(i)
menjadi 1
- Kalau tidak, jika
RND<.5
salah ( 0
), kami ingin:
x
untuk tetap sama
y
berkurang 1
a(i)
menjadi 0
Sekarang jika kita menyimpan hasil dari kondisional dalam variabel ( r=RND<.5
), kita dapat menghitung nilai-nilai baru x
, y
dan a(i)
:
- Ketika
r
adalah -1
, x=x-1
; saat r
ini 0
, x=x+0
.
- Ketika
r
adalah -1
, y=y+0
; saat r
ini 0
, y=y-1
.
- Ketika
r
adalah -1
, a(i)=1
; saat r
ini 0
, a(i)=0
.
Jadi kode akhir kita terlihat seperti:
r=RND<.5
x=x+r
y=y-1-r
a(i)=-r
menghemat 20 byte (40%) kekalahan dari versi aslinya.
Pendekatan matematika sering dapat diterapkan secara mengejutkan, tetapi ketika ada perbedaan dalam logika antara kedua kasus (misalnya ketika Anda perlu memasukkan sesuatu dalam satu kasus tetapi tidak dalam yang lain), Anda masih harus menggunakan IF
.