IFDeclaraciones 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 ENDIFmediante el uso de una IFdeclaració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 IFdeclaraciones anidadas , solo la más interna puede tener una línea.
Pero en este caso, podemos eliminar IFcompletamente el uso de las matemáticas. Considere lo que realmente queremos:
- Si
RND<.5es verdadero ( -1), queremos:
x disminuir en 1
y permanecer igual
a(i) convertirse en 1
- De lo contrario, si
RND<.5es 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, yy a(i):
- Cuando
res -1, x=x-1; cuando res 0, x=x+0.
- Cuando
res -1, y=y+0; cuando res 0, y=y-1.
- Cuando
res -1, a(i)=1; cuando res 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.