Prawidłowy termin z sekwencji kwadratowej?


10

Otrzymujesz cztery liczby. Pierwsze trzy to odpowiednio a , b i c dla sekwencji:

T.n=zan2)+bn+do

Możesz wprowadzić te cztery liczby w jakikolwiek sposób. Wynik powinien być jednym z dwóch różnych wyników wymienionych w odpowiedzi, jeden oznacza, że ​​czwarta liczba jest terminem w sekwencji (powyższe równanie ma co najmniej jedno rozwiązanie dla n które jest liczbą całkowitą, gdy za , b , do i T.n są podstawione za podane wartości), druga oznacza odwrotnie.

To jest kod golfowy, więc wygrywa najkrótsza odpowiedź w bajtach. Twój program powinien działać na każdym wejściu za,b,do,T.n gdzie liczby są ujemne lub dodatnie (lub 0), dziesiętne lub całkowite. Aby uniknąć problemów, ale zachować pewną złożoność, liczby całkowite zawsze kończą się na .5 . Standardowe otwory na pętle są niedozwolone.

Przypadki testowe

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

Odpowiedzi:


4

Galaretka ,  11  10 bajtów

_/Ær1Ẹ?%1Ạ

Monadyczny link, który akceptuje listę list * [[c, b, a], [T_n]]i daje, 0jeśli T_njest poprawnym rozwiązaniem, a 1jeśli nie.

* Przyznaję trochę wolności z „Możesz wprowadzić te cztery liczby w jakikolwiek sposób”.

Wypróbuj online! Lub zobacz zestaw testowy .

W jaki sposób?

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

Gdybyśmy mogli uzyskać niejednoznaczne wyniki, _/Ær1Ẹ?ḞƑƇdziałalibyśmy także dla 10 (daje1 gdy wszystkie wartości są rozwiązaniami, w przeciwnym razie lista odrębnych rozwiązań, a zatem zawsze pusta lista, gdy nie ma rozwiązań - spełniałby również standardową definicję Truthy vs Falsey )


2
To wejście jest w porządku.
Artemis nadal nie ufa SE

6

JavaScript (ES7), 70 bajtów

Zwraca wartość logiczną.

(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

Wypróbuj online!

W jaki sposób?

re=T.n-dot

za0

Równanie jest naprawdę kwadratowe:

T.n=zan2)+bn+dozan2)+bn-re=0

za=2)za

Δ=b2)+2)zare

a korzenie to:

n0=-b-Δzan1=-b+Δza

Δ

-b-Δ0(modza) lub -b+Δ0(modza)

za=0,b0

Równanie jest liniowe:

T.n=bn+dobn=ren=reb

re0(modb) .

za=0,b=0

n

T.n=dore=0


1

05AB1E , 35 bajtów

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

Port @Arnauld odpowiedzi JavaScript na , więc upewnij się, aby go upvote!

Pobiera dane wejściowe w formacie [t,do],za,b.

Wypróbuj online

Wyjaśnienie:

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

Czy Ųzaoszczędzisz trochę bajtów? (Prawdopodobnie nie, ponieważ później i tak musimy obliczyć pierwiastek kwadratowy.)
Arnauld

@Arnauld Niestety nie z trzech powodów: 1. Ųz wartościami ujemnymi jakoś daje samą wartość zamiast 0.. 2. Ųz wartościami dziesiętnymi (nawet z .0) daje 0zamiast tego, 1czy są kwadratem czy nie (jest to błąd, który zrobię zgłoś się do Adnana). 3. Nawet jeśli oba działałyby i -4.0skutkowałyby 0zamiast -4.0i 4.0powodowałyby 1zamiast 0, nadal byłyby to +2 bajty, ponieważ potrzebujemy pierwiastka kwadratowego, a trzy egzemplarz byłby oddzielonymi duplikatami: tÐdivs DŲitD; lub obecnie, DÄïŲitDaby naprawić pozostałe dwa wymienione problemy.
Kevin Cruijssen

1
Poza tym wyniki Ųujemnych danych wejściowych są niespójne .
Arnauld

@Arnauld Wth .. to naprawdę dziwne. A starsza wersja daje nawet inny, tak samo dziwny wynik .. : S Zgłoszałem błędy, w tym twoje testowe TIO do Adnana na czacie 05AB1E.
Kevin Cruijssen


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.