Ваша задача - взять массив чисел и вещественное число и вернуть значение в этой точке массива. Массивы начинаются с и считаются через интервалы . Дело в том, что мы на самом деле собираемся интерполировать между элементами с учетом «индекса». Например:
Index: 1π 2π 3π 4π 5π 6π
Array: [ 1.1, 1.3, 6.9, 4.2, 1.3, 3.7 ]
Поскольку это , мы должны сделать обязательную тригонометрию, поэтому мы будем использовать косинусную интерполяцию по следующей формуле:
где:
- вход "индекс"
- - значение элемента непосредственно перед индексом
- - значение элемента сразу после «индекса»
- принимает угол в радианах
пример
Учитывая [1.3, 3.7, 6.9], 5.3:
Индекс 5.3 находится между и , поэтому для 1.3 будет использоваться, а для before
3.7 - after
. Подставив его в формулу, получим:
Который выходит на 3.165
Ноты
- Ввод и вывод могут быть в любом удобном формате
- Вы можете предположить, что введенное число больше и меньше
array length
* - Вы можете предположить, что входной массив будет иметь длину не менее 2 элементов.
- Ваш результат должен иметь как минимум две десятичные точки с точностью до 0,05 и поддерживать числа до 100 для этой точности / точности. (поплавки одинарной точности более чем достаточны для удовлетворения этого требования)
Счастливого гольфа!
Ответы:
R ,
5953 байтаПопробуйте онлайн!
Ничего слишком умного здесь - просто R-версия формулы в вопросе. Спасибо @MickyT за сохранение байта, @Giueseppe и косвенно @xnor за еще два, и спасибо @RobinRyder за сохранение еще 3.
источник
...*(cos(i%%pi)+1)/2
Python 3.8 (предварительная версия) ,
8574 байта-8 байт благодаря @xnor
-2 байт благодаря @Quintec
Это использует преимущества нового
:=
оператора присваивания предварительной версии Python 3.8 . Кроме этого, это действительно просто уравнение, написанное на Python.Применение:
Попробуйте онлайн!
источник
j
первое упомянутое место - часть силы выражений присваивания заключается в том, что они оценивают значение так же, как и присваивают его.(cos(i%pi)+1)/2
cos(i%pi/2)**2
p=
анонимных функций в порядкеЖеле , 17 байт
Полная программа, принимающая и массив, который печатает интерполированное значение.i
Попробуйте онлайн!
Как?
Интерполирует между всеми соседями, используя затем выбирает соответствующее значение.cos(imodπ)+12
источник
C # (интерактивный компилятор Visual C #) , 69 байт
Я победил Питона!Черт возьми, Питон победил меня.Я снова победил Питона!Попробуйте онлайн!
источник
Röda , 51 байт
Попробуйте онлайн!
источник
Stax , 17 байт
Запустите и отладьте его
Распаковано, разглажено и прокомментировано это выглядит так.
Запустите этот
источник
Japt ,
474638 байтПродолжение следует ... (игра в гольф)
Попробуйте онлайн!
источник
APL + WIN,
3937 байт2 байта сохранены благодаря Адаму
Попробуйте онлайн! Dyalog Classic
Объяснение:
источник
×.5×
→÷2÷
иm[2]
→2⊃m
Haskell , 65 байт
Попробуйте онлайн!
Примечание: массив представлен в виде списка.
Спасибо @xnor за половинный угол.
источник
Желе ,
232018 байтПопробуйте онлайн!
источник
Атташе , 54 байта
Попробуйте онлайн!
объяснение
источник
C (GCC)
9979 байтПотолок -20 байт
Попробуйте онлайн!
Телефонный код
обратите внимание, что
-lm
для связи с математическими библиотеками необходим флаг компилятора , так что +3 байта, если считать это.источник
05AB1E ,
22212019 байтовПопробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник
Рубин , 67 байт
Попробуйте онлайн!
источник