곱셈 언 델타


9

값 의 "곱하기 델타" 를 정의합시다 는 다음과 같습니다.[a0,aN,]

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

역 연산, 즉 "곱하기 곱하기" 는 위의 연산이 주어진 값이되도록 값을 반환합니다.

주어진 값 " multiplicative undelta "연산에 대한 일반적인 해결책 은 다음과 같습니다.[1,5,3,2]

[a0,a01a1,a15a2,a23a3,a32a4]

을 0이 아닌 다른 값 으로 설정하면 특정 솔루션을 얻을 수 있습니다. 예를 들어 을 설정 하면 다음과 같이됩니다.a0a0:=1

[1,1,5,15,30]

도전

이 과제의 임무는 위에서 정의 한대로 " 곱하기 undelta " 연산을 구현하는 것 입니다.

규칙

입력은 다음과 같습니다

  • 0이 아닌 값a0
  • 0이 아닌 " 곱하기 델타 "의 비어 있지 않은 목록 / 배열 / 벡터 / ...

출력은 첫 번째 요소가 이고 " 곱하기 델타 "가 입력 되는 값의 목록 / 배열 / 벡터 / ...입니다 .a0

참고 : 언어에서 음의 정수를 지원하지 않으면 0아닌 값positive로 대체 할 수 있습니다 .

테스트 사례

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]

첫 번째 항목이 a₀ 인 길이 1+ 델타 수의 단일 목록을 가져올 수 있습니까?
Adám

@ Adám : 기존 답변에 대한 내용이 변경 될 수 있기 때문에 거부합니다.
ბიმო

답변:


17

하스켈, 8 바이트

scanl(*)

온라인으로 사용해보십시오!


나는 누군가가 이것을 썼는지 확인하고 있었고, 아무도 그것을 쓰지 않았다고 생각했고 나는 "멋지다, 쓸 것이다"라고 말한 다음 페이지 하단에 당신의 대답을 보았습니다. 공감.
Windmill Cookies

9

APL (Dyalog), 3 바이트

×\∊

온라인으로 사용해보십시오!

왼쪽의 숫자와 오른쪽의 배열을 가져와야하는 경우 :

@ H.PWiz 덕분에 -2

7 5 3 바이트

×\,


2
⊣,⊢단지 수 있습니다,
H.PWiz

@ H.PWiz 감사합니다, 내 암묵은 매우 약합니다
Quintec

괄호가 필요하지 않습니다. ×\,함수로 평가합니다.
Dennis

@Dennis는 안타깝게도 작동하지 않는 것 같습니다
Quintec

일부 상황에서는 필요하지 않기 때문에 파렌을 세지 않아도됩니다. f←×\예를 들어 작동합니다. Btw, (-12 3 -17 1311)귀하의 영구 링크는이어야합니다 (¯12 3 ¯17 1311).
Dennis




3

apt, 3 바이트

å*V

시도 해봐


설명

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







1

배치, 69 바이트

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

입력을받습니다 0 STDIN 및 델타에서 명령 행 인수로.




1

05AB1E , 5 3 바이트

šηP

@BMO 덕분에 -2 바이트 .

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

š      # 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는 스왑이며 š목록의 시작 부분에 추가됩니다. 어느 쪽이든, -2 감사합니다
Kevin Cruijssen

1

Pyth, 6 바이트

*FR._s

여기서 테스트 해보세요!

또는 7 바이트 :

.u*NYEQ

여기에서 테스트하십시오!

첫 번째는 입력을 튜플로 사용하고 두 번째는 입력을 두 개의 개별 라인으로 사용합니다.

매핑하고 1 바이트를 절약하는 데 도움을 주신 @Sok에게 감사합니다.


1
당신은 두 번째 솔루션 맵을 구현하여 바이트를 저장할 수 있습니다 R로, *FR._s- 시연

@Sok Nice 캐치! 나는 그것이 효과가 M있다고 가정하고 설탕 분석 오류가 발생 F <pf2>했습니다. 주로 구문 분석이 어떻게 작동 했는지 기억하지 못했기 때문 입니다.
Steven H.

나는 정말 중첩 방법을 이해하지 않는, 정직 수 있습니다 M, F, L, 및 RO) : 하나 일 때까지 일을, 난 그냥 무리를 시도


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

규칙은 다음과 같습니다 Output is a list/array/vector/. 첫 번째는 괜찮습니다.
mazzy

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

, 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 (oK) , 9 바이트

{(*\)x,y}

온라인으로 사용해보십시오!

첫 번째 숫자를 두 번째 입력에 목록으로 결합한 다음 연속적인 곱셈 결과를 반환합니다.

테스트 사례

TiO 에서이 언어에 대한 입력을 올바르게 사용하는 방법을 잘 모르므로 아래 기능과 같이 입력 후 입력 한 다음 실행하십시오.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.