Sua tarefa é pegar uma matriz de números e um número real e retornar o valor nesse ponto da matriz. As matrizes começam em e são contadas em intervalos . O fato é que, na verdade, vamos interpolar entre elementos, dado o "índice". Como um exemplo:
Index: 1π 2π 3π 4π 5π 6π
Array: [ 1.1, 1.3, 6.9, 4.2, 1.3, 3.7 ]
Como é , temos que fazer a trigonometria obrigatória; portanto, usaremos a interpolação de cosseno usando a seguinte fórmula:
Onde:
- é a entrada "index"
- é o valor do elemento imediatamente antes do "índice"
- é o valor do elemento imediatamente após o "índice"
- toma seu ângulo em radianos
Exemplo
Dado [1.3, 3.7, 6.9], 5.3:
O Índice 5.3 está entre e , então 1.3 será usado before
e 3.7 será usado after
. Colocando na fórmula, obtemos:
Que sai para 3.165
Notas
- Entrada e saída podem estar em qualquer formato conveniente
- Você pode assumir que o número de entrada é maior que e menor que
array length
* - Você pode assumir que a matriz de entrada terá pelo menos 2 elementos.
- Seu resultado deve ter pelo menos duas casas decimais de precisão, ter uma precisão de 0,05 e suportar números de até 100 para essa precisão / exatidão. (flutuadores de precisão única são mais que suficientes para atender a esse requisito)
Golfe feliz!
Respostas:
R ,
5953 bytesExperimente online!
Nada muito inteligente aqui - apenas uma versão R da fórmula na pergunta. Agradecemos a @MickyT por salvar um byte e a @Giueseppe e indiretamente a @xnor por mais dois, e obrigado a @RobinRyder por salvar mais 3.
fonte
...*(cos(i%%pi)+1)/2
Python 3.8 (pré-lançamento) ,
8574 bytes-8 bytes graças a @xnor
-2 bytes graças a @Quintec
Isso tira proveito do novo
:=
operador de atribuição do Python 3.8 . Fora isso, essa é realmente apenas a equação escrita em Python.Uso:
Experimente online!
fonte
j
o primeiro local mencionado - parte do poder das expressões de atribuição é que elas avaliam o valor e o atribuem.(cos(i%pi)+1)/2
emcos(i%pi/2)**2
p=
funções anônimas já que estãoGeléia , 17 bytes
Um programa completo que aceita a matriz que imprime o valor interpolado.i
Experimente online!
Como?
Interpola entre todos os vizinhos usando e escolhe o valor relevante.cos(imodπ)+12
fonte
C # (compilador interativo do Visual C #) , 69 bytes
Eu venci o Python!Droga, Python me venceu.Eu venci o Python novamente!Experimente online!
fonte
Röda , 51 bytes
Experimente online!
fonte
Stax , 17 bytes
Execute e depure
Descompactado, não jogado e comentou que é assim.
Execute este
fonte
Japt ,
474638 bytesPara continuar ... (golfe)
Experimente online!
fonte
APL + WIN,
3937 bytes2 bytes salvos graças a Adám
Experimente online! Dyalog Classic
Explicação:
fonte
×.5×
→÷2÷
em[2]
→2⊃m
Haskell , 65 bytes
Experimente online!
Nota: a matriz é representada como uma lista.
Obrigado a @xnor pela dica de meio ângulo.
fonte
Geléia ,
232018 bytesExperimente online!
fonte
Anexo , 54 bytes
Experimente online!
Explicação
fonte
C (GCC)
9979 bytes-20 bytes ceilingcat
Experimente online!
Código de chamada
observe que ele precisava do sinalizador do compilador
-lm
para vincular às bibliotecas matemáticas, portanto, +3 bytes, se você contar isso.fonte
05AB1E ,
22212019 bytesExperimente online ou verifique mais alguns casos de teste .
Explicação:
fonte
Ruby , 67 bytes
Experimente online!
fonte