Gültiger Term aus quadratischer Folge?

10

Sie erhalten vier Zahlen. Die ersten drei sind , bzw. für die Sequenz:abc

Tn=an2+bn+c

Sie können diese vier Zahlen auf beliebige Weise eingeben. Die Ausgabe sollte eine von zwei unterschiedlichen Ausgaben sein, die in Ihrer Antwort erwähnt werden. Eine bedeutet, dass die vierte Zahl ein Term in der Sequenz ist (die obige Gleichung hat mindestens eine Lösung für die eine ganze Zahl ist, wenn , , und sind ersetzt die angegebenen Werte), der andere bedeutet das Gegenteil.nabcTn

Dies ist Code Golf, daher gewinnt die kürzeste Antwort in Bytes. Ihr Programm sollte für alle Eingaben von funktionieren, bei denen die Zahlen negativ oder positiv (oder 0), dezimal oder ganzzahlig sind. Um Probleme zu vermeiden, aber die Komplexität beizubehalten, enden Nicht-Ganzzahlen immer nur mit . Standardschlupflöcher nicht erlaubt.a,b,c,Tn.5

Testfälle

a   |b   |c   |T_n |Y/N
------------------------
1   |1   |1   |1   |Y     #n=0
2   |3   |5   |2   |N
0.5 |1   |-2  |-0.5|Y     #n=1
0.5 |1   |-2  |15.5|Y     #n=5
0.5 |1   |-2  |3   |N     
-3.5|2   |-6  |-934|Y     #n=-16
0   |1   |4   |7   |Y     #n=3
0   |3   |-1  |7   |N
0   |0   |0   |1   |N
0   |0   |6   |6   |Y     #n=<anything>
4   |8   |5   |2   |N
Artemis vertraut SE immer noch nicht
quelle

Antworten:

4

Gelee ,  11  10 Bytes

_/Ær1Ẹ?%1Ạ

Ein monadischer Link, der eine Liste von Listen * akzeptiert [[c, b, a], [T_n]]und ergibt, 0ob T_neine gültige Lösung vorliegt oder 1nicht.

* Zugegebenermaßen ein wenig Freiheit nehmen mit "Sie können diese vier Zahlen auf irgendeine Weise eingeben".

Probieren Sie es online aus! Oder sehen Sie sich eine Testsuite an .

Wie?

_/Ær1Ẹ?%1Ạ - Link: list of lists of integers, [[c, b, a], [T_n]]
 /         - reduce by:
_          -   subtraction                    [c-T_n, b, a]
      ?    - if...
     Ẹ     - ...condition: any?
  Ær       - ...then: roots of polynomial     i.e. roots of a²x+bx+(c-T_n)=0
    1      - ...else: literal 1
       %1  - modulo 1 (vectorises)            i.e. for each: keep any fractional part
           -                                       note: (a+bi)%1 yields nan which is truthy
         Ạ - all?                             i.e. all had fractional parts?
           -                                       note: all([]) yields 1

Wenn wir nicht unterschiedliche Ergebnisse liefern könnten, _/Ær1Ẹ?ḞƑƇwürde dies auch für 10 funktionieren (es ergibt sich, 1wenn alle Werte Lösungen sind, andernfalls eine Liste der unterschiedlichen Lösungen und daher immer eine leere Liste, wenn keine Lösungen vorhanden sind - dies würde auch die Standarddefinition Truthy vs Falsey erfüllen )

Jonathan Allan
quelle
2
Diese Eingabe ist vollkommen in Ordnung.
Artemis traut SE
6

JavaScript (ES7), 70 Byte

Gibt einen booleschen Wert zurück.

(a,b,c,t)=>(t-=c,(a*=2)?(x=(b*b+2*a*t)**.5-b)%a&&(x+b+b)%a:b?t%b:t)==0

Probieren Sie es online aus!

Wie?

Der Klarheit halber definieren wir . (Dieselbe Variable wird erneut verwendet, um dieses Ergebnis im JS-Code zu speichern.)d=Tnct

Falla0

Die Gleichung ist wirklich quadratisch:

Tn=an2+bn+can2+bnd=0

Mit ist die Diskriminante:a=2a

Δ=b2+2ad

und die Wurzeln sind:

n0=bΔan1=b+Δa

Die Gleichung lässt eine Ganzzahlwurzel zu, wenn eine Ganzzahl ist und entweder:Δ

bΔ0(moda) or b+Δ0(moda)

Falla=0,b0

Die Gleichung ist linear:

Tn=bn+cbn=dn=db

Es lässt eine ganzzahlige Wurzel zu, wenn .d0(modb)

Falla=0,b=0

Die Gleichung hängt nicht mehr von :n

Tn=cd=0

Arnauld
quelle
1

05AB1E , 35 Bytes

Æ©²Āi²4P³n+tÐdi(‚³-IJ·Ä%P}뮳Āi³%]_

Port of @Arnauld 's JavaScript-Antwort , also stellen Sie sicher, dass Sie ihn positiv bewerten!

Übernimmt die Eingabe im Format .[t,c],a,b

Probieren Sie es online aus

Erläuterung:

Æ                         # Reduce the (implicit) input-list by subtraction (`t-c`)
 ©                        # Store this value in the register (without popping)
  ²Āi                     # If the second input `a` is not 0:
     ²4P                  #  Calculate `(t-c)*a*4`
        ³n+               #  Add the third input `b` squared to it: `(t-c)*a*4+b*b`
           t              #  Take the square-root of that
                          #  (NOTE: 05AB1E and JS behave differently for square-roots of
                          #   negative integers; JS produces NaN, whereas 05AB1E leaves the
                          #   integer unchanged, which is why we have the `di...}` here)
            Ð             #  Triplicate this square
             di           #  If the square is non-negative (>= 0):
               (‚         #   Pair it with its negative
                 ³-       #   Subtract the third input `b` from each
                   Ä      #   Take the absolute value of both
                    ²·Ä%  #   Modulo the absolute value of `a` doubled
                          #   (NOTE: 05AB1E and JS behave differently for negative modulos,
                          #    which is why we have the two `Ä` here)
                        P #   Then multiply both by taking the product
              }           #  And close the inner if-statement
    ë                     # Else (`a` is 0):
     ®                    #  Push the `t-c` from the register
      ³Āi                 #  If the third input `b` is not 0:
         ³%               #   Take modulo `b`
    ]                     # Close both if-else statements
     _                    # And check if the result is 0
                          # (which is output implicitly)
Kevin Cruijssen
quelle
Würde ein Ųpaar Bytes sparen? (Wahrscheinlich nicht, da wir später sowieso die Quadratwurzel berechnen müssen.)
Arnauld
@Arnauld Leider nicht aus drei Gründen: 1. Ųmit negativen Werten gibt irgendwie den Wert selbst statt 0.. 2. Ųmit Dezimalwerten (auch mit .0) gibt 0statt 1ob sie ein Quadrat sind oder nicht (dies ist ein Fehler, den ich werde Bericht an Adnan). 3. Auch wenn beide und funktioniert hätte -4.0führen würde 0statt -4.0und 4.0führen würde 1statt 0, wäre es immer noch zwei Bytes sein , da wir die Quadratwurzel und die dreifach benötigen würde Duplikate werden getrennt: tÐdivs DŲitD; oder derzeit DÄïŲitD, um die beiden anderen genannten Probleme zu beheben.
Kevin Cruijssen
1
Außerdem sind die Ergebnisse Ųbei negativen Eingaben inkonsistent .
Arnauld
@Arnauld Wth .. das ist in der Tat ziemlich komisch. Und die Legacy-Version liefert sogar ein anderes, ebenso seltsames Ergebnis .. : S Ich habe die Fehler gemeldet, einschließlich Ihres Test-TIO an Adnan im 05AB1E-Chat.
Kevin Cruijssen