算術幾何学的なシーケンスですか?


11

arithmetico-幾何学的配列は、算術配列及び幾何学的配列の要素単位の積です。たとえば、1 -4 12 -32は、算術シーケンス1 2 3 4と幾何学的シーケンスの積です1 -2 4 -8。整数算術幾何学的シーケンスのn番目の項は、次のように表現できます。

an=rn(a0+nd)

一部の実数、非ゼロの実数、および整数。とは必ずしも整数ではないことに注意してください。dra0rd

たとえば、シーケンスに2 11 36 100 256 624 1472 3392は、、およびます。a0=2r=2d=3.5

入力

合理的な形式の入力としての整数の順序付きリスト。幾何学的シーケンスの一部の定義では許可され、定義されるため、入力が算術幾何学的シーケンスであるかどうかは、が0 であるかどうかに依存しません。たとえば、入力として発生しませんn2r=000=1r123 0 0 0 0

出力

算術幾何学的なシーケンスであるかどうか。真実/偽の値、または2つの異なる一貫した値を出力します。

テストケース

正しい:

1 -4 12 -32
0 0 0
-192 0 432 -1296 2916 -5832 10935 -19683
2 11 36 100 256 624 1472 3392
-4374 729 972 567 270 117 48 19
24601 1337 42
0 -2718
-1 -1 0 4 16
2 4 8 16 32 64
2 3 4 5 6 7
0 2 8 24

偽:

4 8 15 16 23 42
3 1 4 1
24601 42 1337
0 0 0 1
0 0 1 0 0
1 -1 0 4 16

1
参考\$までに、ようなものを書くには、インライン数学モードを使用できます。a0
FryAmTheEggman

2期の入力は実際に可能ですか?テストケースには何もありません。
xnor

@xnor自明あなたが設定することができまたはシーケンスが、その場合には固有のものではありませんので、出力は常にtruthyする必要がありますr=1d=0
ジュゼッペ・

1
テストケースを
提案

1
1 -1 0 4 16は、Trueケース1 -1 0 4 -16とのそれぞれと4つの連続した要素を共有するため、有用なFalseケースになり-1 -1 0 4 16ます。
アンデルスカセオルグ

回答:


2

Perl 6の184の 128 135バイト

{3>$_||->\x,\y,\z{?grep ->\r{min (x,{r&&r*$_+(y/r -x)*($×=r)}...*)Z==$_},x??map (y+*×sqrt(y²-x*z).narrow)/x,1,-1!!y&&z/y/2}(|.[^3])}

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

最初の3つの要素からとを計算し、結果のシーケンスが入力と一致するかどうかを確認します。残念なことに、浮動小数点数を使用している場合でも、ゼロで除算すると、Rakudoは例外をスローし、コストは最大9バイトです。rd

を使用してシーケンスを列挙します。an=ran1+rnd

ArnauldのJavaScriptの回答に触発されたいくつかの改善点。

説明

3>$_||  # Return true if there are less than three elements

->\x,\y,\z{ ... }(|.[^3])}  # Bind x,y,z to first three elements

# Candidates for r
x  # If x != 0
??map (y+*×sqrt(y²-x*z).narrow)/x,1,-1  # then solutions of quadratic equation
!!y&&z/y/2  # else solution of linear equation or 0 if y==0

?grep ->\r{ ... },  # Is there an r for which the following is true?

    ( ,                         ...*)  # Create infinite sequence
     x  # Start with x
       {                       }  # Compute next term
        r&&  # 0 if r==0
                (y/r -x)  # d
           r*$_  # r*a(n-1)
                          ($×=r)  # r^n
                +        *  # r*a(n-1)+d*r^n
                                     Z==$_  # Compare with each element of input
min  # All elements are equal?

2

JavaScript(ES7)、135 127バイト

a=>!([x,y,z]=a,1/z)|!a.some(n=>n)|[y/x+(d=(y*y-x*z)**.5/x),y/x-d,z/y/2].some(r=>a.every((v,n)=>(v-(x+n*y/r-n*x)*r**n)**2<1e-9))

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

どうやって?

2つの予備テストを使用して、いくつかの特殊なケースを取り除きます。メインの場合、 3つの異なる値(および対応する値rd<109

特別なケース1:3語未満

3つ未満の用語がある場合、一致するシーケンスを常に見つけることができます。したがって、真理値を強制します。

特殊なケース#2:ゼロのみ

0a0=0d=0r0

a0=0

a0=0

an=rn×n×d

与えるもの:

a1=r×da2=2r2×d

d0a10

r=a22a1

a00

an+1an

an+1=r.an+rn+1d

an+2

an+2=r.an+1+rn+2d=r(r.an+rn+1d)+rn+2d=r2an+2r.rn+1d=r2an+2r(an+1r.an)=r2an+2r.an+1

特に次のものがあります。

a2=r2a0+2r.a1

次の2次につながる:

r2a02r.a1+a2=0

ルーツは誰ですか:

r0=a1+a12a0a2a0r1=a1a12a0a2a0


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