IF
Declaraciones de acortamiento
IF
las declaraciones son bastante caras, y reducirlas puede ahorrar muchos bytes.
Considere lo siguiente (adaptado de una respuesta de Erik the Outgolfer):
IF RND<.5THEN
x=x-1
a(i)=1
ELSE
y=y-1
a(i)=0
ENDIF
Lo primero que podemos hacer es guardar el ENDIF
mediante el uso de una IF
declaración de una sola línea :
IF RND<.5THEN x=x-1:a(i)=1ELSE y=y-1:a(i)=0
Esto funciona siempre que no intentes ponerlo en la misma línea que cualquier otra cosa. En particular, si tiene IF
declaraciones anidadas , solo la más interna puede tener una línea.
Pero en este caso, podemos eliminar IF
completamente el uso de las matemáticas. Considere lo que realmente queremos:
- Si
RND<.5
es verdadero ( -1
), queremos:
x
disminuir en 1
y
permanecer igual
a(i)
convertirse en 1
- De lo contrario, si
RND<.5
es falso ( 0
), queremos:
x
permanecer igual
y
disminuir en 1
a(i)
convertirse en 0
Ahora si salvamos el resultado de la condicional en una variable ( r=RND<.5
), podemos calcular los nuevos valores de x
, y
y a(i)
:
- Cuando
r
es -1
, x=x-1
; cuando r
es 0
, x=x+0
.
- Cuando
r
es -1
, y=y+0
; cuando r
es 0
, y=y-1
.
- Cuando
r
es -1
, a(i)=1
; cuando r
es 0
, a(i)=0
.
Entonces nuestro código final se ve así:
r=RND<.5
x=x+r
y=y-1-r
a(i)=-r
ahorrando la friolera de 20 bytes (40%) sobre la versión original.
El enfoque matemático se puede aplicar sorprendentemente a menudo, pero cuando hay una diferencia en la lógica entre los dos casos (por ejemplo, cuando necesita ingresar algo en un caso pero no en el otro), aún tendrá que usarlo IF
.