根を回転させる


11

整数係数と根が虚数と実数直線上にあり、if aが根である場合、そうであるような非ゼロの多項式が与えられた場合-a、根が90度回転した別の多項式を返します。

詳細

多項式は、たとえば係数のリストとして、任意の合理的な形式で指定できます。a根である場合に限り根となる対称条件は-a、回転した多項式にも実整数係数を強制します。

以下では、多項式は降順の単項式の係数のリストとして与えられます。(つまり、定数が最後になります)多項式にx^2-1は根があり{1,-1}ます。それらを回転さ90°せるには、i(虚数単位)を掛けることを意味するため、出力多項式にはが必要{i,-i}ですx^2 + 1

Input / Output
[1 0 10 0 -127 0 -460 0 576]  [1 0 -10 0 -127 0 460 0 576]
[1 0 -4 0] [1 0 4 0]
[1] [1]

私は多項式の次数だけでなく、多項式にかかる場合があります
ロハンJhunjhunwala

はい、私はそれが受け入れられると思います。
flawr

すべての例では、monic多項式を使用しています。入力多項式がモニックになると仮定できますか?出力多項式モニックでなければなりませんか?
デニス

いいえ、1以外の主要な係数を持つこともでき、出力も整数倍まで定義されます。
-flawr

形式は係数のリストである必要はないようです。合理的なフォーマットはどこまで行きますか?私のフォーマットは、不確定の文字列表現することができx、私の提出缶文字列置換するように、x(i*x)?多項式を評価する関数を書式設定して、関数でそれを構成することができますx -> i*xか?
-xnor

回答:


12

Mathematica、10バイト

xの関数を取り、ixで置換する純粋な関数。

#/.x->I*x&

7バイトのみの代替案ですが、カウントされるかどうかは不明です。純関数を取り込んでxの関数を返す純関数。

#[I*x]&

5
また、組み込み機能も必要ありませんでした!
ニール

純粋関数多項式は「合理的な形式」であると確信しています(ここにあるような)。#変数として使用&し、末尾に
ジョンファンミン

私ができる場合、私はこれを2回upvoteだろう
グレッグマーティン

2番目の答えに関する私の唯一の懸念は、入力(純粋な関数)と出力(xの関数)の不一致でした。
イアンミラー

6

ゼリー、5バイト

Jı*Ċ×

オンラインでお試しください!

使い方

最初の要素をで乗算し1、3番目の要素を-1で乗算します。

Jı*Ċ×  argument: z
J      [1,2,...,len(z)]
 ı     i (the imaginary unit)
  *    to the power of (each element)
   Ċ   imaginary part
    ×  multiply by input (vectorize)

アルゴリズムの証明

多項式をとしますf(x)

if xがルートであることが保証されているため、is も-xそうでfなければならないので、奇数でなければなりません0。つまり、奇数のべき乗の係数はでなければなりません。

さて、根を回転させるの90°は本質的にf(ix)です。

係数を展開して比較すると、アルゴリズムが証明されます。


だから、2、4、6、8などに触れる必要はありませんか?
ローハンジュンジュンワラ

2
とにかくそれらはゼロです。
-flawr

あなたのトリックı*Ċはとてもいいです、あなたはそれを説明する必要があります:)
レオ

それは基本的に簡単な実装です@Leo ...しかし
漏れ修道女

代わりに、偶数のべき乗のすべての係数を0にすることができるため、ここのロジックは完全に正しくありません。
ØrjanJohansen

5

JavaScript(ES6)、25バイト

a=>a.map((e,i)=>i%4?-e:e)

元の多項式にはx = ±a、aが実数線または虚数線上にある形式の解があります。a = 0(その場合xは多項式の因子である)場合を除き、これは、それx² - a²が多項式の因子であることを意味します(つまり、代替項は常にゼロです)。根を回転させると、係数はに変わりますx² + a²。すべての因子が同時に変化するので、すべての-a²項の合計である多項式の3番目の項は符号を変更し、項のペアの積の合計である5番目の項-a²は同じ符号を保持するなど。他のすべての用語を交互に。




1

SILOS71 66バイト

readIO
b=i
lbla
readIO
d=c
d&2
i=i*(1-d)
printInt i
b-1
c+1
if b a

オンラインでお試しください!

@Leaky Nunが5バイトを節約するためにここで何をしたのか、私には見当もつかない。

ちょっと考えてみましたが、Cの2番目のビットは私たちが望むように交互になります。したがって、@ Leaky Nunはこれを利用して必要なビットを節約しました。



0

TI-Basic、20バイト

seq(real(i^X/i)Ans(X),X,1,dim(Ans

に保存されている場合はprgmA、次を使用して実行します。

{1, 0, 3, 0, 1}:prgmA

seq(ただ、複素数をサポートしない1つのコマンドである必要がありました。:)

*:誇張


0

Casio-Basic、8バイト

n|x=𝑖x

Ian MillerのMathematicaアプローチを使用した名前のない関数。Math2キーボードの虚数𝑖を使用する必要があり(2バイトとしてカウント、文字コード769)、多項式はの方程式として入力する必要がありxます。

コード用に7バイトn、パラメーターとして指定する1バイト。

説明:方程式を取りn、その後、単にのすべてのインスタンスを置き換えるx𝑖x



0

スタックス、5 バイト

Æ[]▐↨

オンラインで実行してデバッグします!

ジェリーのポートの答え。

ASCII表現を使用して説明します。

mih|1*
m         Map each element with rest of program, print mapped results on individual lines
 i        Current 0-based loop index
  h       Floor(i/2)
   |1     (-1)^(i/2)
     *    Multiply with current element

先行ゼロがある可能性がある場合は、最初にゼロをトリミングする必要があり、別のバイトのコストで実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.