다항식 라플라스 변환

Dec 26 2020

이것은 느슨한 I / O 형식과 업데이트 된 규칙을 위해 수정하기 위해이 챌린지를 재 게시 한 것입니다.

\ 에서 정수 다항식을 취하는 프로그램을 작성해야합니다.$t\$이 다항식 의 라플라스 변환 을 입력 및 출력합니다 . 일부 정의 및 속성 :

  • 주어진 함수의 라플라스 변환 \$f(t)\$ 이다

$$\mathcal{L}\{f(t)\} = F(s) = \int_0^\infty f(t)e^{-st}dt$$

  • \ 의 라플라스 변환$f(t) = t^n, \, n = 0, 1, 2, ...\$ 이다

$$\mathcal{L}\{t^n\} = \frac{n!}{s^{n+1}}$$

  • 라플라스 변환은 덧셈에 분산됩니다.

$$\mathcal{L}\{f(t)+g(t)\} = \mathcal{L}\{f(t)\} + \mathcal{L}\{g(t)\}$$

  • 상수에 함수를 곱한 라플라스 변환은 상수에 변환을 곱한 것과 같습니다.

$$\mathcal{L}\{af(t)\} = a\mathcal{L}\{f(t)\}$$

  • 정수 다항식은 각 항에 정수 계수와 음이 아닌 순서가있는 다항식입니다.

실제 사례 :

$$\begin{align} \mathcal{L}\{3t^4+2t^2+t-4\} & = \mathcal{L}\{3t^4\}+\mathcal{L}\{2t^2\}+\mathcal{L}\{t\}-\mathcal{L}\{4\} \\ & = 3\mathcal{L}\{t^4\}+2\mathcal{L}\{t^2\}+\mathcal{L}\{t\}-4\mathcal{L}\{1\} \\ & = 3\left(\frac{4!}{s^5}\right)+2\left(\frac{2!}{s^3}\right)+\left(\frac{1!}{s^2}\right)-4\left(\frac{0!}{s}\right) \\ & = \frac{72}{s^5}+\frac{4}{s^3}+\frac{1}{s^2}-\frac{4}{s} \end{align}$$


다항식의 표준 표현으로 입력 할 수 있습니다. 몇 가지 예 ( \$3x^4+2x^2+x-4\$ 예)는 다음과 같습니다.

  • 계수 목록입니다. [-4, 1, 2, 0, 3]또는[3, 0, 2, 1, -4]
  • 계수와 거듭 제곱 쌍. [[3, 4], [2, 2], [1, 1], [-4, 0]]다양한 주문
  • 원하는 변수를 사용하는 문자열. 3x^4+2x^2+x-4

마찬가지로 출력이 음수 차수의 다항식이므로 ( \ 사용)과 같은 유사한 형식으로 출력 할 수 있습니다.$\mathcal{L}\{3x^4+2x^2+x-4\} = \frac{72}{s^5}+\frac4{s^3}+\frac1{s^2}-\frac4s\$) :

  • 계수 목록입니다. [72, 0, 4, 1, -4]또는[-4, 1, 4, 0, 72]
  • 계수와 거듭 제곱 쌍. [[72, -5], [4, -3], [1, -2], [-4, -1]]그리고 다양한 다른 순서 (또는 힘의 긍정적 인 버전)
  • 원하는 변수를 사용하는 문자열. 72s^-5+4s^-3+s^-2-4s^-1

확실하지 않은 대체 I / O 방법이있는 경우 아래에 의견을 말하여 문의하십시오.

이것은 코드 골프 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.

답변

7 xnor Dec 26 2020 at 08:42

Haskell , 25 바이트

zipWith(*)$scanl(*)1[1..]

온라인으로 시도하십시오!

매우 간단합니다 :를 [1,1,2,6,...]사용하여 계승 목록을 생성 scanl한 다음 zipWith(*)입력의 각 요소에 해당 값을 곱합니다.

32 바이트

foldr(\(i,x)r->x:map((i+1)*)r)[]

온라인으로 시도하십시오!

꽤 폴딩 기반 솔루션입니다. 입력을 (exponent, coefficient)쌍으로받습니다.

6 xash Dec 26 2020 at 06:50

전달 , 15 바이트

v"*<
0+1"
 1{*}

온라인으로 시도하십시오!

두 개의 왼쪽 열은 "1, 2, 3,…을 맨 위에 복사 합니다 *. 오른쪽 상단의 값에 모든 랩이 곱해 지므로 (추가 1 = 0으로 시작하여 시작) 1 !, 2 !, 3 !,… 하단에 복사됩니다 *. {입력을 읽고 계승을 곱한 다음 출력합니다 }.

5 GioD Dec 26 2020 at 12:34

젤리 , 4 바이트

J’!×

계수 목록으로 입력을받습니다.

설명

J’!×

J   | Returns an array of elements from 1 to length of input array
 ’  | Subtracts 1 from each
  ! | Factorial each
   ×| Multiply each item in the original array by the created array

온라인으로 시도하십시오!

5 Bubbler Dec 28 2020 at 13:02

APL (Dyalog Unicode) , 3 바이트

×∘!

온라인으로 시도하십시오!

자유 I / O를 극한까지 사용 : 다항식 \$ 3x^4 + 2x^2+x-4 \$두 개의 인수로 왼쪽의 계수와 오른쪽의 거듭 제곱은에서와 같이 내림차순으로 0 항을 포함합니다 3 0 2 1 ¯4 f 4 3 2 1 0. 다항식을 계수 벡터로 반환합니다.

4 ZaelinGoodman Dec 28 2020 at 22:48

PowerShell , 28 바이트

계수 목록으로 입력

$p++;$args|%{$p*$_;$p*=++$i}

온라인으로 시도하십시오!

3 Razetime Dec 26 2020 at 12:56

APL (Dyalog Unicode) , 7 바이트

⊢×!∘⍳∘≢

온라인으로 시도하십시오!

사용 ⎕IO←0(0- 인덱싱)

계수 목록으로 입력합니다.

3 att Dec 26 2020 at 09:44

Wolfram 언어 (Mathematica) , 10 바이트

#2!#&@@@#&

온라인으로 시도하십시오!

0 계수를 포함한 계수 / 전력 쌍 목록을 전력별로 정렬하여 입력하고 해당 계수 목록을 출력합니다.


내장은 더 길다 : 23 바이트

LaplaceTransform[#,t,]&

온라인으로 시도하십시오!

에 대한 다항식을 입력하고에 대한 다항식을 t출력 Null합니다.

2 Neil Dec 26 2020 at 06:40

Retina , 30 바이트

L$`.+ $&$:&* +`\d+_ $.(*$(_$%'

온라인으로 시도하십시오! I / O는 줄 바꿈으로 구분 된 계수 목록입니다. 설명:

L$`.+ $&$:&*

각 계수에 대해 차수와 동일한 수의 밑줄을 추가하십시오.

+`\d+_
$.(*$(_$%'

밑줄이 남지 않을 때까지 각 계수에 다음 밑줄 수를 곱하여 프로세스에서 하나를 삭제합니다.

2 user Dec 26 2020 at 06:36

Scala 3, 52 48 바이트

p=>p.indices.scanLeft(1)(_*_.+(1))zip p map(_*_)

온라인으로 시도하십시오!

최저 차수부터 최고 차수까지 정수 목록으로 입력 및 출력합니다.

p.indices0에서 p.size - 1. 곱셈으로 왼쪽을 스캔하면 각 인덱스에서 계승이 제공되지만 첫 번째 요소가 0이므로 1을 더해야합니다 (따라서 _.+(1)). 그런 다음 모든 계승이 계수로 압축되고 함께 곱해집니다.

2 xnor Dec 26 2020 at 08:27

Python 2 , 39 바이트

p=i=1
while 1:print p*input();p*=i;i+=1

온라인으로 시도하십시오!

입력과 출력은 가장 작은 차수 (가장 가까운 0)부터 시작하여 라인 당 하나씩 계수입니다.

(coefficient, exponent)쌍을 이루는 것은 약간 더 길어집니다.

p=1
while 1:x,i=input();print p*x;p*=i+1

온라인으로 시도하십시오!

2 Sean Dec 26 2020 at 13:16

Raku , 15 바이트

*Z*1,|[\*] 1..*

온라인으로 시도하십시오!

[\*] 1..*로 시작하는 무한 계승 시퀀스입니다 1!. 추가 1(for 0!)를 전면에 붙여 넣은 다음 전체 Z*입력 시퀀스를 곱셈으로 압축합니다 ( ) *.

2 Shaggy Dec 26 2020 at 17:00

Japt -m , 3 바이트

*Vl

여기에서 시도

2 pajonk Dec 26 2020 at 16:59

R , 34 28 25 바이트

(x=scan())*gamma(seq(!x))

온라인으로 시도하십시오!

꽤 직설적 인.
R에는 짧은 이름의 계승 함수가 없지만 gamma. @Giuseppe의 trick
x사용하여 시퀀스를 생성합니다 .

2 Arnauld Dec 26 2020 at 06:15

JavaScript (ES6),  31  29 바이트

I / O : 가장 낮은 수준에서 가장 높은 수준까지 계수 목록입니다.

a=>a.map((v,i)=>v*=p=i?p*i:1)

온라인으로 시도하십시오!

댓글 작성

a =>              // a[] = polynomial coefficients
  a.map((v, i) => // for each coefficient v at position i in a[]:
    v *=          //   multiply v by:
      p =         //     the updated factorial p, which is:
        i ?       //       if i > 0:
          p * i   //         multiplied by i
        :         //       else:
          1       //         initialized to 1
  )               // end of map()
2 Noodle9 Dec 26 2020 at 08:11

SageMath , 27 23 바이트

ovs 덕분에 4 바이트 절약 !!!

lambda f:f.laplace(x,x)

온라인으로 시도하십시오!

\ 의 함수를 사용합니다.$x\$입력으로 라플라스 변환을 \ 의 함수로 반환합니다.$x\$.

1 Neil Dec 26 2020 at 23:46

목탄 , 12 바이트

IEA×ιΠ⊞Oυ∨κ¹

온라인으로 시도하십시오! 링크는 자세한 코드 버전입니다. I / O는 가장 낮은 수준에서 가장 높은 수준까지의 계수 목록입니다. 설명:

  A             Input array
 E              Map over elements
    ι           Current element
   ×            Multiplied by
     Π          Product of
        υ       Predefined empty list
      ⊞O        After pushing
         ∨      Logical Or of
          κ     Current index
           ¹    Literal 1
I               Cast to string
                Implicitly print
1 KevinCruijssen Jan 07 2021 at 14:57

05AB1E , 4 바이트

εN!*

온라인으로 시도하십시오.

또는 :

ā<!*

온라인으로 시도하십시오.

둘 다 계수 목록을 입력으로 사용합니다.

설명:

ε     # Map over each value of the (implicit) input-list
 N    #  Push the 0-based map-index
  !   #  Pop and take it's faculty
   *  #  Multiply it by the current value
      # (after the map, the resulting list is output implicitly)

ā     # Push a list in the range [1,length] based on the (implicit) input-list
 <    # Decrease each by 1 to make the range [0,length)
  !   # Take the faculty of each
   *  # And multiply it to the values at the same positions in the (implicit) input-list
      # (after which the result is output implicitly)