Término válido de secuencia cuadrática?


10

Te dan cuatro números. Los tres primeros son , , y , respectivamente, para la secuencia:abc

Tn=an2+bn+c

Puede ingresar estos cuatro números de cualquier manera. La salida debe ser una de las dos salidas distintas mencionadas en su respuesta, una significa que el cuarto número es un término en la secuencia (la ecuación anterior tiene al menos una solución para que es un entero cuando , , y son sustituido por los valores dados), el otro significa lo contrario.nabcTn

Este es el código de golf, por lo que gana la respuesta más corta en bytes. Su programa debería funcionar para cualquier entrada de donde los números sean negativos o positivos (o 0), decimales o enteros. Para evitar problemas pero mantener cierta complejidad, los no enteros siempre terminarán en . Orificios de bucle estándar no permitidos.a,b,c,Tn.5

Casos de prueba

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

Respuestas:


4

Jalea ,  11  10 bytes

_/Ær1Ẹ?%1Ạ

Un enlace monádico que acepta una lista de listas * [[c, b, a], [T_n]]y produce 0si T_nes una solución válida o 1no.

* Es cierto que se toma un poco de libertad con "Puede ingresar estos cuatro números de cualquier manera".

Pruébalo en línea! O ver un conjunto de pruebas .

¿Cómo?

_/Æ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

Si pudiéramos obtener resultados no distintos _/Ær1Ẹ?ḞƑƇ, también funcionaría para 10 (produce 1cuando todos los valores son soluciones; de lo contrario, una lista de las distintas soluciones y, por lo tanto, siempre una lista vacía cuando no hay soluciones; esto también cumpliría con la definición estándar de Verdad vs Falsey )


2
Esa entrada está perfectamente bien.
Artemis todavía no confía en SE

6

JavaScript (ES7), 70 bytes

Devuelve un valor booleano.

(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

Pruébalo en línea!

¿Cómo?

En aras de la claridad, definimos . (La misma variable se reutiliza para almacenar este resultado en el código JS).d=Tnct

Casoa0

La ecuación realmente es cuadrática:

Tn=an2+bn+can2+bnd=0

Con , el discriminante es:a=2a

Δ=b2+2ad

y las raíces son:

n0=bΔan1=b+Δa

La ecuación admite una raíz entera si es un entero y:Δ

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

Casoa=0,b0

La ecuación es lineal:

Tn=bn+cbn=dn=db

Admite una raíz entera si .d0(modb)

Casoa=0,b=0

La ecuación ya no depende de :n

Tn=cd=0


1

05AB1E , 35 bytes

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

Puerto de la respuesta de JavaScript de @Arnauld , ¡así que asegúrese de votarlo!

Toma la entrada en el formato .[t,c],a,b

Pruébalo en línea

Explicación:

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

¿ ŲGuardaría algunos bytes? (Probablemente no, ya que más tarde necesitamos calcular la raíz cuadrada de todos modos.)
Arnauld

@Arnauld Desafortunadamente, no por tres razones: 1. Ųcon valores negativos de alguna manera da el valor en sí mismo en lugar de 0.. 2. Ųcon valores decimales (incluso con .0) da en 0lugar de 1si son un cuadrado o no (este es un error que haré informar a Adnan). 3. Incluso si ambos hubieran funcionado y -4.0hubieran resultado en 0lugar de, -4.0y 4.0hubieran resultado en 1lugar de 0, seguirían siendo +2 bytes ya que necesitamos la raíz cuadrada y el triplicado serían duplicados separados: tÐdivs DŲitD; o actualmente DÄïŲitDpara solucionar los otros dos problemas mencionados.
Kevin Cruijssen

1
Además, los resultados de Ųlas entradas negativas son inconsistentes .
Arnauld

@Arnauld Wth ... eso es bastante extraño. Y la versión heredada incluso ofrece un resultado diferente, igual de extraño ... : S He informado de los errores, incluido su TIO de prueba a Adnan en el chat 05AB1E.
Kevin Cruijssen


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.