Esta vez, su objetivo es encontrar el máximo de 3 enteros (de - (2 ^ 31) a 2 ^ 31 - 1 en el complemento binario de 2) sin utilizar ramificaciones o bucles.
Usted está únicamente autorizado a utilizar
Desigualdad / Igualdad (
==
,>
,>=
,<
,<=
,!=
) Estos cuentan como 2 fichas.Aritmética (
+
,-
,*
,/
)Operadores lógicos (
!
no,&&
y,||
o)Los operadores bit a bit (
~
no,&
y,|
o,^
xor,<<
,>>
,>>>
izquierda aritmética y lógica y desplazamientos a la derecha)Constantes 0 fichas
Asignación variable. 0 fichas
Ingrese 3 variables como a
, b
y c
. Salida del número máximo.
Se aplican las normas estándar de código de golf atómico. Si tienes alguna pregunta, déjala en los comentarios. Una ficha es cualquiera de las anteriores con las reglas especiales.
Respuestas:
Javascript 10 tokens
Editar utilizando <y * en lugar de violín de bits: como se señala en los comentarios, las operaciones de bits pueden fallar para la entrada cerca del límite del rango (más de 30 bits)
C 8 fichas
Lenguaje agnóstico de hecho, cualquier lenguaje similar a C servirá. Para ser exigente, en el estándar C no es portátil porque el desplazamiento a la derecha puede no extender el signo (pero en implementaciones comunes sí).
En C (y C ++, C # y Java, creo) podemos manejar fácilmente los problemas de desbordamiento utilizando valores temporales más grandes:
fuente
int
s su código no funciona para x = 2147483647, y = -2, z = 0. Su elección si desea cambiarlaJavascript
6 fichas
fuente
&&
y||
probablemente fue un descuido, que debería señalarse, en lugar de explotarse.&&
, 2<
y>
. El=
se utiliza como una tarea y cuenta como 0C: 10 fichas
Inspirado por la respuesta de @ openorclose, pero convertido a C y sin ramas utilizando multiplicación en lugar de operadores booleanos de corto circuito.
fuente
Javascript
14 fichas
fuente
Muchos idiomas (Python) (10 tokens)
https://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
Oh, alguien ya lo publicó :)
fuente
You are only allowed to have one function, the one that takes the 3 inputs and outputs.
Eso es exactamente lo que tiene esta respuesta. Las 2 impresiones son solo casos de pruebamax2(max2(x,y),z)
inicialmente :)C ++ 11: 15 tokens
Usar solo operadores aritméticos y bit a bit (ya que los operadores de igualdad y lógica booleana lo hacen demasiado fácil)
fuente
J (no compitiendo)
Me preguntaba cómo sería la solución en J. Este utiliza una
,
y#
sin embargo, por lo que no competirá.Esto competiría, pero es demasiado largo, con 9 tokens:
fuente
Tenemos los siguientes supuestos:
max (a; b) = (a + b + | ab |) / 2
max (a; b; c) = max (max (a; b); c)
abs (a) = (a + (a >> 31)) ^ (a >> 31)
podemos usar el pseudocódigo:
fuente
C # (segundo intento)
Lo tengo ... No hay funciones integradas ...
Pero, ¿está permitido usar otros tipos de datos integrados o simplemente int? Si lo permitiera, propondría:
fuente
javascript 8 tokens
aunque similar a la respuesta de @ openorclose, en realidad uso los operadores lógicos para la tarea en sí.
violín
fuente
R (10 fichas)
fuente
Brainfuck (No compite)
fuente
TIS-100, 8 operaciones
El proveedor (ARRIBA) solo hace MOV, por lo que no se muestra en el código Tal vez no funcione cuando está demasiado cerca del borde 999
fuente
VBA (6 fichas)
No estoy seguro si esto no es ramificado.
fuente
IIf
, Inline-If. En la mayoría de los idiomas, es, por ejemploa>=b ? a : b
,. Se está ramificando de hecho.JavaScript: 4 tokens (** basado en una interpretación amplia de "asignación")
¡Obviamente mi puntaje de 4 es extremadamente generoso / indulgente!
Para llegar a ese puntaje, asumí que "asignación" (con un valor de 0 tokens en la pregunta) incluye cosas como asignación aditiva, asignación sustractiva, asignación multiplicativa y asignación XOR-ing (
^=
)Si esas tareas realmente cuentan, la puntuación es 14 :)
fuente
d -= b
realidad es lo mismod = d - b
, yo diría que usas aritmética y que debes contar esto como un token.