Çarpımsal undelta


9

Şimdi değerlerin "çarpımsal deltalarını" tanımlayalım olarak:[a0,aN,]

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

Ters işlem - yani "çarpımsal undelta" - yukarıdaki işlem verilen değerlerle sonuçlanacak şekilde değerler döndürür.

Misal

Verilen değerler " çarpma undelta " işlemine genel bir çözüm :[1,5,3,2]

[a0,a01a1,a15a2,a23a3,a32a4]

sıfır dışında herhangi bir değere ayarlanarak, örneğin a_0: = 1 ayarlanarak belirli bir çözüm elde edilebilir :a0a0:=1

[1,1,5,15,30]

Meydan okuma

Bu meydan okuma için göreviniz yukarıda tanımlandığı gibi " çarpma undelta " işlemini uygulamaktır .

kurallar

Girişler:

  • sıfır olmayan bir değer a0
  • sıfır olmayan " çarpma deltalarının " boş olmayan bir listesi / dizisi / vektörü / ...

Çıktı, ilk öğenin a0 olacağı ve " çoğaltıcı deltaların " girdi olacağı şekilde değerlerin bir listesi / dizisi / vektör / ... değeridir .

Not: Dil negatif tamsayılar hiçbir destek sahipse yerini alabilir sıfırdan tarafından pozitifliği .

Test senaryoları

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]

İlk öğenin + olduğu tek bir uzunluk 1 + delta sayısı listesi alabilir miyiz?
Adám

@ Adám: Buna hayır diyeceğim çünkü mevcut cevaplar için bir şeyler değişecek.
ბიმო

Yanıtlar:


17

Haskell, 8 bayt

scanl(*)

Çevrimiçi deneyin!


Kimsenin bunu yazıp yazmadığını kontrol ediyordum ve hiç kimsenin yazmadığını düşündüm ve "harika, sonra yazacağım" dedim ve sonra cevabınızı sayfanın alt kısmında gördüm. upvoted.
Yel Değirmeni Kurabiye

9

APL (Dyalog), 3 bayt

×\∊

Çevrimiçi deneyin!

Soldaki numarayı ve sağdaki diziyi almam gerekirse:

@ H.PWiz sayesinde -2

7 5 3 bayt

×\,


2
⊣,⊢sadece olabilir,
H.PWiz

@ H.PWiz teşekkürler, tacitim son derece zayıf
Quintec

Ebeveynlere ihtiyacınız yok; ×\,bir işlevi değerlendirir.
Dennis

@Dennis Maalesef çalışmıyor
Quintec

Parensleri saymanıza gerek yoktur, çünkü bazı durumlarda onlara ihtiyaç yoktur. f←×\örneğin çalışır. Btw, (-12 3 -17 1311)kalıcı bağlantıda olmalıdır (¯12 3 ¯17 1311).
Dennis




3

Japt, 3 bayt

å*V

Dene


açıklama

        :Implicit input of array U and integer V
å       :Cumulatively reduce U
 *      :By multiplication
  V     :With an initial value of V







1

Toplu, 69 bayt

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

Girdisini alır a0 STDIN ve deltaları komut satırı bağımsız değişkenleri olarak kullanır.




1

05AB1E , 5 3 bayt

šηP

@BMO sayesinde -2 bayt .

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

š      # 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
Hayır, sdiğer girişi almak için oradaydı. :) stakas ve šlistenin başında prepending edilir. Her iki durumda da -2 için teşekkürler
Kevin Cruijssen

1

Pyth, 6 bayt

*FR._s

Bunu burada test edin!

Alternatif olarak 7 bayt:

.u*NYEQ

Burada test edin!

Birincisi girişi bir demet olarak alır, ikincisi girişi iki ayrı satır olarak alır.

Haritalamada ve 1 bayt tasarruf etmede bana yardımcı olduğu için @Sok'a teşekkürler.


1
Sen ikinci çözeltide haritayı uygulayarak bir bayt kaydedebilirsiniz Rolarak, *FR._s- gösteri
Sok

@Sok Güzel yakala! Mİşe yarayacağını varsaymaya çalıştım , sonra şeker ayrıştırma hatası aldım - çoğunlukla için ayrışmanın nasıl F <pf2>çalıştığını hatırlamadığım için .
Steven

Ben gerçekten iç içe anlamıyorum, dürüst olacağım M, F, L, ve Ro): Bir çalıştı kadar çalışma, sadece bir demet çalıştı
Sok

1

Python 2 , 40 bayt

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

Çevrimiçi deneyin!

Şaşırtıcı bir şekilde, Python 3'e geçiş ve orada jeneratör kullanımı, özyinelemeli çözümden sadece 1 bayt tasarruf sağlar.


1

PowerShell , 29 bayt

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

Çevrimiçi deneyin!

Bu sadece değerlerin çıktısının iyi olduğunu varsayar.

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

Bu iyi değilse, bu aslında listeyi oluşturur ve ardından aynı şekilde yazdırılan toString öğesine iter.

param($a,$b)$c=,$a;$b|%{$c+=$_*$c[-1]};$c #41 bytes

Kurallar şunlardır: Output is a list/array/vector/. Birincisi iyi.
mazzy

1

MathGolf , 6 5 bayt

\{\o*

Çevrimiçi deneyin!

Bu 5 bayt ( \{\o*) olabilir düşünüyorum ama \giriş ile uğraşırken talimat biraz kapalı görünüyor. Bu, en son sürümde düzeltildi.

Açıklama:

\       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

`` Örtülü girdi ile '' kullanımını yeniden tasarladım. Yine de yığındaki öğeleri aynı şekilde işler, ancak şimdi girişten iki öğeyi yalnızca bir yerine yığına açar. Bu meydan okuma için yararlı olabileceğini düşünüyorum.
maxb


0

Kömür , 12 bayt

IE⁺⟦N⟧AΠ⊞Oυι

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

    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 (oK) , 9 bayt

{(*\)x,y}

Çevrimiçi deneyin!

İlk sayıyı ikinci girdiye liste olarak ekler ve art arda çarpma sonuçlarını döndürür

Test Durumları

Girişinizi aşağıdaki gibi işlevden sonra girin ve çalıştırın, çünkü TiO'da bu dil için girişi düzgün bir şekilde nasıl kullanacağımdan emin değilim

{(*\)x,y}[1;1 5 3 2]

0

dc , 13 bayt

p[*pz1<A]dsAx

Çevrimiçi deneyin!

p[*pz1<A]dsAx
p               # Print the first element
  *p            # Multiply top elements on the stack
 [  z1<A]dsAx   # until only one element is left
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.