Istilah yang valid dari urutan kuadratik?


10

Anda diberi empat angka. Tiga yang pertama masing-masing adalah , , dan , untuk urutan:Sebuahcbc

Tn=Sebuahn2+bn+c

Anda dapat mengambil input dari keempat angka ini dengan cara apa pun. Output harus merupakan salah satu dari dua output berbeda yang disebutkan dalam jawaban Anda, satu berarti bahwa angka keempat adalah istilah dalam urutan (persamaan di atas memiliki setidaknya satu solusi untuk yang merupakan bilangan bulat ketika , , dan adalah diganti dengan nilai yang diberikan), yang lain berarti sebaliknya.nSebuahbcTn

Ini kode golf, jadi jawaban tersingkat dalam byte menang. Program Anda harus bekerja untuk setiap input dari mana angkanya negatif atau positif (atau 0), desimal atau bilangan bulat. Untuk menghindari masalah tetapi tetap memiliki beberapa kompleksitas, non-integer akan selalu berakhiran . Lubang loop standar tidak diizinkan.Sebuah,b,c,Tn.5

Uji kasus

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

Jawaban:


4

Jelly ,  11  10 byte

_/Ær1Ẹ?%1Ạ

Tautan monadik yang menerima daftar daftar * [[c, b, a], [T_n]]dan menghasilkan 0jika T_nmerupakan solusi yang valid atau 1jika tidak.

* diakui mengambil sedikit kebebasan dengan "Anda dapat mengambil input dari keempat angka ini dengan cara apa pun".

Cobalah online! Atau lihat test-suite .

Bagaimana?

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

Jika kita dapat menghasilkan hasil yang tidak berbeda maka _/Ær1Ẹ?ḞƑƇakan bekerja untuk 10 (itu menghasilkan 1ketika semua nilai adalah solusi, jika tidak, daftar solusi yang berbeda dan karenanya selalu daftar kosong ketika tidak ada solusi - ini juga akan memenuhi definisi standar Truthy vs Falsey )


2
Masukan itu baik-baik saja.
Artemis masih tidak percaya pada

6

JavaScript (ES7), 70 byte

Mengembalikan nilai Boolean.

(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

Cobalah online!

Bagaimana?

Demi kejelasan, kami mendefinisikan d=Tn-c . (Variabel t sama digunakan kembali untuk menyimpan hasil ini dalam kode JS.)

Kasing Sebuah0

Persamaannya benar-benar kuadratik:

Tn=Sebuahn2+bn+cSebuahn2+bn-d=0

Sebuah=2Sebuah

Δ=b2+2Sebuahd

dan akarnya adalah:

n0=-b-ΔSebuahn1=-b+ΔSebuah

Δ

-b-Δ0(modSebuah) atau -b+Δ0(modSebuah)

Sebuah=0,b0

Persamaannya linear:

Tn=bn+cbn=dn=db

d0(modb)

Sebuah=0,b=0

n

Tn=cd=0


1

05AB1E , 35 byte

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

Port dari jawaban JavaScript @Arnauld , jadi pastikan untuk menghapusnya!

[t,c],Sebuah,b

Cobalah online

Penjelasan:

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

Akan Ųmenghemat beberapa byte? (Mungkin tidak karena kita nantinya harus menghitung akar kuadrat.)
Arnauld

@Arnauld Sayangnya bukan karena tiga alasan: 1. Ųdengan nilai negatif entah bagaimana memberikan nilai itu sendiri, bukan 0.. 2. Ųdengan nilai desimal (bahkan dengan .0) memberikan 0bukannya 1apakah mereka kuadrat atau tidak (ini adalah bug yang saya akan melapor ke Adnan). 3. Bahkan jika keduanya akan bekerja dan -4.0akan menghasilkan 0bukannya -4.0dan 4.0akan menghasilkan 1bukannya 0, itu masih akan menjadi +2 byte karena kita membutuhkan root-kuadrat dan rangkap tiga akan dipisahkan duplikat: tÐdivs DŲitD; atau saat ini DÄïŲitDuntuk memperbaiki dua masalah lain yang disebutkan.
Kevin Cruijssen

1
Selain itu, hasil Ųpada input negatif tidak konsisten .
Arnauld

@Arnauld Wth .. itu memang sangat aneh. Dan versi lawas bahkan memberikan hasil yang berbeda, sama anehnya .. : S Saya telah melaporkan bug, termasuk TIO tes Anda ke Adnan di obrolan 05AB1E.
Kevin Cruijssen


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.