İkinci dereceden diziden geçerli terim mi?


10

Size dört numara verilir. İlk üçü sekans için sırasıyla , ve :birbc

Tn=birn2+bn+c

Bu dört sayının girişini herhangi bir şekilde alabilirsiniz. Çıktı, cevabınızda belirtilen iki ayrı çıktıdan biri olmalıdır, biri dördüncü sayının dizideki bir terim olduğu anlamına gelir (yukarıdaki denklemin için en az bir çözümü vardır, a , b , c ve T n verilen değerler yerine ikame edilir), diğeri bunun tersi anlamına gelir.nbirbcTn

Bu kod golf, yani bayt en kısa cevap kazanır. Programınız , sayıların negatif veya pozitif (veya 0), ondalık veya tamsayı olduğu herhangi bir,b,c,Tn girdisi için çalışmalıdır . Sorunlardan kaçınmak, ancak bazı karmaşıklıkları korumak için, tamsayılar her zaman sadece .5 biter . Standart halka deliklerine izin verilmedi.

Test senaryoları

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

Yanıtlar:


4

Jöle ,  11  10 bayt

_/Ær1Ẹ?%1Ạ

* Listelerin bir listesini kabul eden monadic Bağlantı [[c, b, a], [T_n]]ve verimleri 0eğer T_ngeçerli bir çözümdür ya 1değilse.

* Kuşkusuz "Bu dört sayıyı herhangi bir şekilde girebilirsiniz" ile biraz özgürleşiyor.

Çevrimiçi deneyin! Veya bir test takımına bakın .

Nasıl?

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

Farklı sonuçlar verebilseydik _/Ær1Ẹ?ḞƑƇ, 10 için de işe yarayacaktır ( 1tüm değerler çözüm olduğunda ortaya çıkar, aksi takdirde farklı çözümlerin bir listesi ve dolayısıyla çözüm olmadığında her zaman boş bir liste - bu aynı zamanda standart Truthy vs Falsey tanımını da karşılar. )


2
Bu giriş gayet iyi.
Artemis hala SE'nin

6

JavaScript (ES7), 70 bayt

Bir Boolean değeri döndürür.

(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

Çevrimiçi deneyin!

Nasıl?

d=Tn-ct

bir0

Denklem gerçekten ikinci dereceden:

Tn=birn2+bn+cbirn2+bn-d=0

bir'=2bir

Δ=b2+2bir'd

ve kökler:

n0=-b-Δbir'n1=-b+Δbir'

Δ

-b-Δ0(şıkbir') veya -b+Δ0(şıkbir')

bir=0,b0

Denklem doğrusaldır:

Tn=bn+cbn=dn=db

ise bir tamsayı kökü kabul ederd0(şıkb)

bir=0,b=0

n

Tn=cd=0


1

05AB1E , 35 bayt

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

Port of @Arnauld'un JavaScript yanıtı , bu yüzden onu oyladığınızdan emin olun!

[t,c],bir,b

Çevrimiçi deneyin

Açıklama:

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

ŲBiraz bayt tasarruf eder misiniz ? (Muhtemelen daha sonra karekökü hesaplamamız gerektiğinden değil.)
Arnauld

@Arnauld Maalesef üç nedenden dolayı: 1. Ųnegatif değerlerle nasılsa yerine Değerin kendisini verir 0.. 2. Ųondalık değerler (hatta ile birlikte .0) verir 0yerine 1bu bir hata olduğunu (kare da olmasak da hangi I will Adnan'a rapor). Her iki çalışmış olurdu ve 3. bile -4.0yol açacak 0yerine -4.0ve 4.0yol açacak 1yerine 0biz kare köküne ihtiyacımız da üç katlı çiftleri ayrılacak olacağından, hala 2 byte olacaktır: tÐdivs DŲitD; veya şu anda DÄïŲitDbahsedilen diğer iki sorunu düzeltmek için.
Kevin Cruijssen

1
Ayrıca, Ųnegatif girdilerin sonuçları tutarsızdır .
Arnauld

@Arnauld Wth .. bu gerçekten çok garip. Ve eski versiyon da garip bir sonuç gibi farklı bir sonuç veriyor .. : S 05AB1E sohbetinde Adnan'a test TIO'nuz dahil olmak üzere hataları bildirdim.
Kevin Cruijssen


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.