Ist es eine arithmetisch-geometrische Folge?

11

Eine arithmetisch-geometrische Folge ist das elementweise Produkt einer arithmetischen Folge und einer geometrischen Folge. Zum Beispiel 1 -4 12 -32ist das Produkt der arithmetischen Folge 1 2 3 4und der geometrischen Folge 1 -2 4 -8. Der n-te Term einer ganzzahligen arithmetisch-geometrischen Folge kann ausgedrückt werden als

an=rn(a0+nd)

für eine reelle Zahl , ein ungleich Null reelles und eine ganze Zahl . Beachten Sie, dass und nicht unbedingt ganze Zahlen sind.dra0rd

Zum Beispiel kann die Sequenz 2 11 36 100 256 624 1472 3392hat , und .a0=2r=2d=3.5

Eingang

Eine geordnete Liste von Ganzzahlen als Eingabe in einem beliebigen vernünftigen Format. Da einige Definitionen der geometrischen Folge erlauben und , hängt es nicht davon ab, ob eine 0 sein darf , ob eine Eingabe eine arithmetisch-geometrische Folge ist. Beispielsweise tritt sie nicht als Eingabe auf.n2r=000=1r123 0 0 0 0

Ausgabe

Ob es sich um eine arithmetisch-geometrische Folge handelt. Geben Sie einen Wahrheits- / Falschwert oder zwei verschiedene konsistente Werte aus.

Testfälle

Wahr:

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

Falsch:

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
lirtosiast
quelle
1
Zu Ihrer Information können Sie den Inline-Mathematikmodus verwenden \$, um Dinge wie zu schreiben . a0
FryAmTheEggman
Sind zwei Termineingaben tatsächlich möglich? Es gibt keine in den Testfällen.
xnor
@xnor Trivial können Sie oder so dass die Sequenzen in diesem Fall nicht eindeutig sind, aber die Ausgabe sollte immer wahr seind = 0r=1d=0
Giuseppe
1
Testfall vorschlagen 0 2 8 24, 0 0 1, 0 0 0 1
tsh
1
1 -1 0 4 16wäre ein nützlicher False-Fall, da er vier aufeinanderfolgende Elemente mit jedem der True-Fälle 1 -1 0 4 -16und teilt -1 -1 0 4 16.
Anders Kaseorg

Antworten:

2

Perl 6 , 184 128 135 Bytes

{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])}

Probieren Sie es online aus!

Berechnet und aus den ersten drei Elementen und prüft, ob die resultierende Sequenz mit der Eingabe übereinstimmt. Leider löst Rakudo beim Teilen durch Null eine Ausnahme aus, selbst wenn Gleitkommazahlen verwendet werden, die ~ 9 Bytes kosten.rd

Zählt die Sequenz mit .an=ran1+rnd

Einige Verbesserungen sind von Arnauld's JavaScript-Antwort inspiriert.

Erläuterung

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?
nwellnhof
quelle
2

JavaScript (ES7), 135 bis 127 Byte

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))

Probieren Sie es online aus!

Wie?

Wir verwenden zwei vorläufige Tests, um einige Sonderfälle loszuwerden. Für den Hauptfall versuchen wir drei verschiedene mögliche Werte von (und die entsprechenden Werte von , die leicht abgeleitet werden können) und testen, ob alle Terme der Eingabesequenz mit den erratenen übereinstimmen. Aufgrund möglicher Rundungsfehler testen wir tatsächlich, ob alle quadratischen Differenzen .rd<109

Sonderfall Nr. 1: weniger als 3 Begriffe

Wenn weniger als 3 Begriffe vorhanden sind, ist es immer möglich, eine passende Sequenz zu finden. Also erzwingen wir einen wahrheitsgemäßen Wert.

Sonderfall Nr. 2: nur Nullen

Wenn alle Terme gleich , können wir , und jedes . Also erzwingen wir einen wahrheitsgemäßen Wert.0a0=0d=0r0

mita0=0

Wenn , kann die Sequenz vereinfacht werden zu:a0=0

an=rn×n×d

Welches gibt:

a1=r×da2=2r2×d

Wir wissen, dass nicht gleich (sonst wären wir im Sonderfall # 2). Wir haben also und:d0a10

r=a22a1

mita00

Wir haben die folgende Beziehung zwischen und :an+1an

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

Für haben wir: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

Wir haben insbesondere:

a2=r2a0+2r.a1

Dies führt zu folgendem Quadrat:

r2a02r.a1+a2=0

Wessen Wurzeln sind:

r0=a1+a12a0a2a0r1=a1a12a0a2a0

Arnauld
quelle