Lista dada de enteros {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}
. Para aquellos interesados, estos números se utilizan en el cálculo de los días laborables.
Día de la semana = (m[n] + d + y + y>>2 + y/400 - y/100) % 7;
, donde m[n]
- expresión que estoy buscando, d
- día del mes, y
- year - (month <= 2)
.
Construya una expresión que conste de operadores aritméticos, lógicos y bit a bit, que generarán un número n
entero positivo m
para que sea m % 7
igual al n-ésimo número en la lista.
No se permiten ramas, operadores ternarios, búsquedas de tablas y punteros.
Puntuación:
1 - para | & ^ ~ >> <<
operadores
1.1 - para + - < > <= >= == != ! && ||
operadores
1.2 - para *
operadores
1.4 - para / %
operadores
Responda con la puntuación más baja gana.
Personalmente he encontrado:
(41*n)>>4+((n+61)>>4)<<2
con puntaje 6.4. Pensé que esto sería difícil de encontrar, así que proporcioné una expresión propia para comenzar.
fuente
table lookups
Redacción interesante supongo ...Respuestas:
2
2.2Me encanta la aritmética de precisión arbitraria.
O, si no te gusta el maleficio,
Prueba:
fuente
4*n
y ahorrar 0,2 puntos escribiéndola comon<<2
?7
. Mi mejor candidato para la división de piso entero seconst/n
encuentra con una contradicción conn=4
yn=8
.const%n
que podría satisfacer todo excepto n = 1,2 y 3.2,0
o (puntaje 2.2):
Todo encontrado con fuerza bruta :-)
fuente
for
bucle, probando todos los valores p, q para la fórmula(p >> i) ^ q
, luego fui a tomar un café y 10 minutos después llegué a leer los resultados.35,3
Sospecho que este puede ser el método menos eficiente para crear la lista:
Acabo de calcular la regresión polinómica. Estoy tentado de ver qué otro método terrible podría intentarse.
Cabe destacar que podría ahorrar 3,3 puntos si el resultado fuera redondeado. En este punto, no creo que eso importe.
fuente
3.2
Solución basada en cero:
Una solución basada:
Inicialmente pensé que la
%7
operación también se contabilizaría y, al%
ser una operación costosa aquí, traté de resolverla sin ella.Llegué a un resultado de 3.2 como este:
Me interesarían las optimizaciones utilizando este enfoque (sin
%
). Gracias.fuente
(0426415305230 >> (i*3)) & 7
? Puede ver los dígitos de salida en orden inverso.Pitón (3)
Como hay bastantes de estas preguntas en estos días, decidí hacer un programa para resolverlas automáticamente en 3 (o 2) tokens. Aquí está el resultado de este desafío:
Prueba de que esto funciona:
fuente
&
.