Calcule el n
módulo 12
para un entero de 32 bits sin signo.
Las normas:
- Debe funcionar para todos
n
entre 0 y 23. Otros números opcionales. - Solo debe usar cualquiera de los operadores
+-*
,~&^|
o<<
,>>
como se define comúnmente en unidades de 32 bits. - Puede usar un número arbitrario de uniones constantes.
- No puede utilizar ningún tipo de punteros, incluidas las matrices, ni ninguna
if
declaración, incluidas las cosas que se compilan con declaraciones if como operadores ternarios u operadores "mayores que".
La puntuación:
- Los operadores
+ -
y los operadores bit a bit~ & ^ | << >>
(NOT, AND, XOR, OR, bit shift ) dan una puntuación de1
,*
da una puntuación de2
. - La puntuación total más baja gana.
math
number-theory
atomic-code-golf
nbubis
fuente
fuente
+-*
son sumar, restar, multiplicar;~&^|
son bit a bit NOT, AND, XOR, OR; y<< >>
son bithiftsfor i in x:y:z, .dostuff
?n % 12
para una multiplicación y un cambio como en el deleite de los hackers, por lo que esto es trivial, soloRespuestas:
4 4
(El lenguaje es irrelevante)
¡Cortejar! Tengo que 4.
11-n
asegurará que todos los bits de orden superior estén establecidos si y solo si n> = 12.48&(11-n)
== si n> 11 entonces 48 más 0(48&(11-n))>>2
== si n> 11 entonces 12 más 0n-((48&(11-n))>>2)
es la respuestafuente
n - (((11 - n) & 0xC0000000) >> 28)
. Bien hecho, no creo que se pueda hacer en menos de cuatro.4 4
Una solución con una tabla de búsqueda (se ve hacia arriba
i ^ (i % 12)
):4 4
Aquí hay otra solución con 4 operaciones:
Se supone que el operando de conteo de los cambios de bits se toma implícitamente en el mod 32,
x >> -1
es decir, es el mismo quex >> 31
.5 5
Otro enfoque, usando una tabla de búsqueda:
fuente
bash - 1
p.ej
fuente
stdin
ystdout
corrientes? Claro, internamente, son punteros, pero también podríamos descalificar a Java porque usa laInteger
clase internamente para muchas cosas.C, little-endian - 2
Probablemente sea una trampa, pero creo que satisface las reglas ...
fuente
= 0
lugar de& 0x0
, lo que debería contar como 2 operaciones adicionales. Pero +1 para la creatividad :)PHP - puntaje 0
Me pregunto cómo es posible que nadie haya venido con esto antes que yo.
fuente
C, puntaje 5
Funciona hasta 23, no garantizado por encima de eso.
((n+4)>>2)&4
devuelve 4 para n> = 12. Agrégalo a n y obtendrás la respuesta correcta en los 4 bits menos significativos, luego trunca los otros bits.fuente
cualquier idioma: 5
no va a ganar, pero participa porque es divertido y quizás porque es más fácil de entender que otros
esto es equivalente a
esto es equivalente porque cuando sumas 20 a 12, obtienes 32, por lo que el quinto bit se convierte en 1. Esto es solo cuando n> 1 ya que 32 es el número más pequeño donde el quinto bit se convierte en 1.
También tenga en cuenta que es fácilmente expandible para un rango más alto, como puede hacer
alcanzar un rango hasta 35
fuente
Python 2.x - 4
Es
=
un operador?En ese caso el puntaje es 6.
Por cierto, la solución de @steveverrill también se puede usar directamente en Python.
Funciona para el rango 0 .. 23
Entonces, ¿qué está pasando? Multiplique por 357913942 y divida por 2 ^ 32 (o desplazamiento a la derecha 32)
fuente
C - 6
fuente
Cobra - 2 (o 3)
Esto podría estar doblando las reglas un poco, pero pregunté y se me permitió usar esto.
También funciona para cualquier número.
fuente
Kona - 5
Puede no ser válido porque no estoy seguro de si el operador de piso está permitido, pero tengo dos
*
y un menos:Lo que debería funcionar para cualquier número entero.
fuente