Cualquiera que esté moderadamente en la optimización de código de bajo nivel conoce los peligros de la ramificación, ya sea que se implemente como sentencias if, bucles o sentencias selectivas, la posibilidad de una predicción errónea de la rama es una pérdida de tiempo terrible.
Los problemas simples se pueden resolver mucho mejor con la aritmética simple, así que hagámoslo.
Para los siguientes problemas, todas las variables son enteros sin signo de 32 bits y el único código permitido son declaraciones simples que involucran solo a los siguientes operadores:
+ addition
- subtraction
* multiplication
/ integer division, rounds down, division by 0 not allowed
% modulo
& binary and
| binary or
^ binary exclusive or
>> bitshift right
<< bitshift left
Logic operators, return 1 if the expression is true and 0 if it is false.
== equal
!= not equal
< less than
<= less than or equal
> greater than
>= greater than or equal
Set operator
=
Cada línea debe constar de un identificador de variable seguido de un operador de conjunto, seguido de una expresión.
Una expresión puede no contener operadores de conjuntos adicionales, pero puede contener identificadores variables, números literales y paréntesis.
El puntaje de golf solo contará el número de operadores.
Ejemplo:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
Tiene una puntuación de 5 operadores.
Una solución puede incluir tantas variables como el autor considere oportunas.
Las variables que no se han establecido tienen valor 0
.
Se permite el extracto y refinado, todos los números negativos de flujo inferior, por lo que 3 - 5
es 4294967294
, incluso como parte de una declaración más grande.
Tarea 1: Máx.
Dos valores, A
y B
, existen en el ámbito, hacen que la RESULT
variable contenga el mayor de esos valores cuando finaliza el programa.
Tarea 2: mediana
Tres valores, A
, B
y C
, existen en el ámbito de aplicación, hacen que la RESULT
variable de contener la mediana de estos valores cuando finaliza la del programa.
Tarea 3: raíz cuadrada
Un valor, A
existe en el ámbito, hace que la RESULT
variable contenga la raíz cuadrada de A
, redondeado hacia abajo, cuando el programa termina.
Está bien publicar una respuesta a solo una o dos de las preguntas, para algunos de ustedes solo encontrar soluciones válidas será un desafío.
0xFFFF_FFFF_FFFF_FFFF ^ x
y 0 - x
. ¿Cómo podría haberlo olvidado?
!
es también bastante trivial: x == 0
.
Boole[a-b]
?
-
pero~
podría ser agradable (incluso si no sé para qué).