Мультипликативный унделта

9

Определим «мультипликативные дельты» значений[a0,aN,] в виде:

[a1/a0,,ai+1/ai,,aN/aN1]

Обратная операция, а именно «мультипликативная унделта», возвращает значения, так что приведенная выше операция приводит к заданным значениям.

пример

Заданные значения [1,5,3,2]Общее решение операции « мультипликативная унделта »:

[a0,a01a1,a15a2,a23a3,a32a4]

Конкретное решение может быть получено путем установки a0 к любому значению, отличному от нуля, например, путем установки a0:=1 мы бы получили:

[1,1,5,15,30]

Вызов

Ваша задача для этой задачи состоит в том, чтобы реализовать операцию « мультипликативная дельта », как определено выше.

правила

Входы:

  • ненулевое значение a0
  • непустой список / массив / вектор / ... ненулевых " мультипликативных дельт "

Выходными данными является список / массив / вектор / ... значений, так что первый элемент a0и для которых " мультипликативные дельты " являются входными данными.

Примечание. Если ваш язык не поддерживает отрицательные целые числа, вы можете заменить ненулевое на положительное .

Контрольные примеры

2 [21] -> [2,42]
1 [1,5,3,2] -> [1,1,5,15,30]
-1 [1,5,3,2] -> [-1,-1,-5,-15,-30]
7 [1,-5,3,2] -> [7,7,-35,-105,-210]
2 [-12,3,-17,1311] -> [2,-24,-72,1224,1604664]
-12 [7,-1,-12,4] -> [-12,-84,84,-1008,-4032]
1 [2,2,2,2,2,2,2,2] -> [1,2,4,8,16,32,64,128,256]
ბიმო
источник
Можем ли мы взять один список длиной 1 + количество дельт, где первый элемент - это ₀?
Адам
@ Adám: Я собираюсь сказать нет, потому что это изменит вещи для существующих ответов.
მოიმო

Ответы:

17

Haskell, 8 байт

scanl(*)

Попробуйте онлайн!

Ними
источник
Я проверял, написал ли кто-нибудь это, и я думал, что никто не написал это, и я сказал: «Круто, тогда я напишу», а затем увидел ваш ответ внизу страницы. upvoted.
Печенье ветряной мельницы
9

APL (Дьялог), 3 байта

×\∊

Попробуйте онлайн!

Если мне нужно взять число слева и массив справа:

-2 благодаря @ H.PWiz

7 5 3 байта

×\,

Quintec
источник
2
⊣,⊢может быть просто,
H.PWiz
@ H.PWiz спасибо, мой молчаливый очень слабый
Quintec
Вам не нужны парены; ×\,оценивает функцию.
Деннис
@ Денис, похоже, не работает, к сожалению
Quintec
Вам не нужно считать парены, потому что они не нужны в некоторых ситуациях. f←×\работает, например. Кстати, (-12 3 -17 1311)ваша постоянная ссылка должна быть (¯12 3 ¯17 1311).
Деннис
8

R 15 байт

cumprod(scan())

Попробуйте онлайн!

Полная программа. Функция длиннее (если нам не разрешили «склеить» входы вместе, так что встроенного cumprodбыло бы достаточно в качестве полного ответа):

R , 28 байт

function(i,x)cumprod(c(i,x))

Попробуйте онлайн!

Кирилл Л.
источник
3

Japt, 3 байта

å*V

Попробуй это


объяснение

        :Implicit input of array U and integer V
å       :Cumulatively reduce U
 *      :By multiplication
  V     :With an initial value of V
мохнатый
источник
2

Wolfram Language (Mathematica) , 14 байтов

FoldList@Times

Попробуйте онлайн!

FoldList[Times, a0, {x1, x2, ..., xn}]производит желаемый результат. FoldList[Times]это карри форма, которая производит чистую функцию, все еще ожидая своих a0и {x1, x2, ..., xn}.

Миша лавров
источник
1

Пакетный, 69 байт

@set/pa=
@echo %a%
@for %%d in (%*) do @set/aa*=%%d&call echo %%a%%

Принимает вклад a0 на STDIN и дельты в качестве аргументов командной строки.

Нил
источник
1

05AB1E , 5 3 байта

šηP

-2 байта благодаря @BMO .

Попробуйте онлайн или проверьте все контрольные примеры .

Объяснение:

š      # Prepend the (implicit) input-integer at the start of the (implicit) input-list
       #  i.e. -12 and [7,-1,-12,4] → ["-12",7,-1,-12,4]
 η     # Prefixes of this new list
       #  i.e. ["-12",7,-1,-12,4]
       #   → [["-12"],["-12",7],["-12",7,-1],["-12",7,-1,-12],["-12",7,-1,-12,4]]
  P    # Take the product of each inner list (and output implicitly)
       #  i.e. [["-12"],["-12",7],["-12",7,-1],["-12",7,-1,-12],["-12",7,-1,-12,4]]
       #   → [-12,-84,84,-1008,-4032]
Кевин Круйссен
источник
1
Нет, sчтобы получить другой вход. :) s- это swap, и он šстоит в начале списка. В любом случае, спасибо за -2
Кевин Круйссен
1

Pyth, 6 байт

*FR._s

Проверьте это здесь!

В качестве альтернативы 7 байтов:

.u*NYEQ

Проверьте это здесь!

Первый принимает входные данные как кортеж, второй принимает входные данные как две отдельные строки.

Спасибо @Sok за помощь в создании карт и сохранении 1 байта.

Стивен Х.
источник
1
Вы можете сохранить байт, реализовав карту во втором растворе , как R, как *FR._s- демонстрация
Sok
@ Сок Хороший улов! Я пытался Mпредположить, что это сработает, затем получил ошибку разбора сахара - в основном потому, что я не помню, как F <pf2>работал анализ для .
Стивен Х.
Я буду честен, я не очень понимаю , как вложенные M, F, Lи Rработа, я просто попытался кучу , пока один не работал: о)
Sok
1

Python 2 , 40 байт

f=lambda a,b:[a]+(b and f(a*b[0],b[1:]))

Попробуйте онлайн!

Удивительно, но переход на Python 3 и использование там генераторов экономит всего 1 байт по сравнению с рекурсивным решением.

Стивен Х.
источник
1

PowerShell , 29 байт

param($a,$b)$a;$b|%{($a*=$_)}

Попробуйте онлайн!

Это предполагает, что просто вывод значений в порядке.

> .\scratch.ps1 1 (1,5,3,2)
1
1
5
15
30

Если это не хорошо, это фактически создает список, а затем помещает его в toString, который печатает таким же образом.

param($a,$b)$c=,$a;$b|%{$c+=$_*$c[-1]};$c #41 bytes
Veskah
источник
Правила являются: Output is a list/array/vector/. Итак, первое в порядке.
Мази
1

MathGolf , 6 5 байт

\{\o*

Попробуйте онлайн!

Я думаю, что это может быть 5 байт ( \{\o*), но\ инструкции, кажется, немного не так, когда дело касается ввода Это теперь исправлено в последней версии.

Объяснение:

\       Swap arguments, pushing both to stack
 {      Foreach loop over second argument
  \o    Output counter with newline
    *   Multiply counter by current element
        Implicitly output the last element
Джо Кинг
источник
Я переработал обработку `` с неявным вводом. Он по-прежнему обрабатывает элементы в стеке таким же образом, но теперь он помещает два элемента из входных данных в стек вместо одного. Я думаю, что это может быть полезно для этого вызова.
maxb
0

Python 2 , 47 байт

lambda n,A:reduce(lambda a,c:a+[a[-1]*c],A,[n])

Попробуйте онлайн!

Час Браун
источник
Вам может быть интересно, что решение python в Python 3 короче с использованием генераторов
Quintec
0

Древесный уголь , 12 байт

IE⁺⟦N⟧AΠ⊞Oυι

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

    N           Input a₀
   ⟦ ⟧          Wrap in a list
      A         Input deltas as a list
  ⁺              Concatenate lists
 E              Map over elements
           ι    Current element
          υ     Predefined empty list variable
        ⊞O      Push and return updated list
       Π        Product
I               Cast to string
                Implicitly print each value on its own line
Нил
источник
0

K (ок) , 9 байт

{(*\)x,y}

Попробуйте онлайн!

Присоединяет первое число ко второму входу в виде списка, а затем возвращает последовательные результаты умножения

Тестовые случаи

Введите свой ввод после функции, как показано ниже, а затем запустите, так как я не уверен, как правильно использовать ввод для этого языка в TiO

{(*\)x,y}[1;1 5 3 2]
Thaufeki
источник