Su tarea es tomar una matriz de números y un número real y devolver el valor en ese punto de la matriz. Las matrices comienzan en y se cuentan en intervalos . La cuestión es que en realidad vamos a interpolar entre elementos dados el "índice". Como ejemplo:
Index: 1π 2π 3π 4π 5π 6π
Array: [ 1.1, 1.3, 6.9, 4.2, 1.3, 3.7 ]
Debido a que es , tenemos que hacer la trigonometría obligatoria, por lo que utilizaremos la interpolación de coseno utilizando la siguiente fórmula:
dónde:
- es el "índice" de entrada
- es el valor del elemento inmediatamente anterior al "índice"
- es el valor del elemento inmediatamente después del "índice"
- toma su ángulo en radianes
Ejemplo
Dado [1.3, 3.7, 6.9], 5.3:
El índice 5.3 está entre y , por lo que 1.3 se usará para y 3.7 se usará para . Poniéndolo en la fórmula, obtenemos:before
after
Que sale a 3.165
Notas
- La entrada y salida pueden estar en cualquier formato conveniente
- Puede suponer que el número de entrada es mayor que y menor que *
array length
- Puede suponer que la matriz de entrada tendrá al menos 2 elementos de longitud.
- Su resultado debe tener al menos dos puntos decimales de precisión, ser exacto dentro de 0.05 y admitir números hasta 100 para esta precisión / exactitud. (los flotadores de precisión simple son más que suficientes para cumplir con este requisito)
¡Feliz golf!
Respuestas:
R ,
5953 bytesPruébalo en línea!
Aquí no hay nada demasiado inteligente: solo una versión R de la fórmula en la pregunta. Gracias a @MickyT por guardar un byte, y a @Giueseppe e indirectamente a @xnor por otros dos, y a @RobinRyder por guardar otros 3.
fuente
...*(cos(i%%pi)+1)/2
Python 3.8 (prelanzamiento) ,
8574 bytes-8 bytes gracias a @xnor
-2 bytes gracias a @Quintec
Esto aprovecha el nuevo
:=
operador de asignación de la versión preliminar de Python 3.8 . Aparte de eso, esta es realmente la ecuación escrita en Python.Uso:
Pruébalo en línea!
fuente
j
el primer lugar que se menciona : parte del poder de las expresiones de asignación es que evalúan el valor y lo asignan.(cos(i%pi)+1)/2
acos(i%pi/2)**2
p=
ya que las funciones anónimas están bienJalea , 17 bytes
Un programa completo que aceptayo la matriz que imprime el valor interpolado.
Pruébalo en línea!
¿Cómo?
Interpola entre todos los vecinos usandocos( imodificaciónπ) + 12 luego selecciona el valor relevante.
fuente
C # (compilador interactivo de Visual C #) , 69 bytes
¡Le gané a Python!Maldita sea, Python me ganó.¡Le gané a Python otra vez!Pruébalo en línea!
fuente
Röda , 51 bytes
Pruébalo en línea!
fuente
Stax , 17 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf, y comentó que se ve así.
Ejecute este
fuente
Japt ,
474638 bytesContinuará ... (golf)
Pruébalo en línea!
fuente
APL + WIN,
3937 bytes2 bytes guardados gracias a Adám
¡Pruébalo en línea! Dyalog Classic
Explicación:
fuente
×.5×
→÷2÷
ym[2]
→2⊃m
Haskell , 65 bytes
Pruébalo en línea!
Nota: la matriz se representa como una lista.
Gracias a @xnor por la punta de medio ángulo.
fuente
Jalea ,
232018 bytesPruébalo en línea!
fuente
Adjunto , 54 bytes
Pruébalo en línea!
Explicación
fuente
C (GCC)
9979 bytes-Cat de techo de 20 bytes
Pruébalo en línea!
Código de llamada
tenga en cuenta que necesitaba el indicador del compilador
-lm
para vincularse con las bibliotecas matemáticas, por lo que +3 bytes si cuenta eso.fuente
05AB1E ,
22212019 bytesPruébelo en línea o verifique algunos casos de prueba más .
Explicación:
fuente
Ruby , 67 bytes
Pruébalo en línea!
fuente