Дійсний термін із квадратичної послідовності?


10

Вам даються чотири цифри. Перші три є , і відповідно для послідовності:abc

Tn=an2+bn+c

Ви можете будь-яким чином ввести ці чотири числа. Вихід повинен бути одним з двох різних результатів, згаданих у вашій відповіді, один означає, що четверте число - це член у послідовності (вищевказане рівняння має принаймні одне рішення для яке є цілим числом, коли , , і є заміщені заданими значеннями), інше означає протилежне.nabcTn

Це кодовий гольф, тому найкоротша відповідь у байтах виграє. Ваша програма повинна працювати для будь-якого введення де числа від'ємні чи додатні (або 0), десяткових чи цілих чисел. Щоб уникнути проблем, але зберегти певну складність, нецілі числа завжди закінчуються . Стандартні отвори-петлі заборонені.a,b,c,Tn.5

Тестові справи

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

Відповіді:


4

Желе ,  11  10 байт

_/Ær1Ẹ?%1Ạ

Монадична посилання, яка приймає список списків * [[c, b, a], [T_n]]і дає вихід, 0якщо T_nце правильне рішення чи 1ні.

* зізнається, взявши трохи свободи з "Ви можете будь-яким чином ввести ці чотири числа".

Спробуйте в Інтернеті! Або подивіться тестовий набір .

Як?

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

Якби ми могли дати неоднозначні результати, то _/Ær1Ẹ?ḞƑƇце також працювало б для 10 (це дає 1тоді, коли всі значення є рішеннями, інакше список виразних рішень і, отже, завжди порожній список, коли немає рішень - це також відповідало б стандартному визначенню Труті проти Фальсі )


2
Цей вклад ідеально добре.
Артеміда досі не вірить SE

6

JavaScript (ES7), 70 байт

Повертає булеве значення.

(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

Спробуйте в Інтернеті!

Як?

Для наочності визначаємо . (Ця ж змінна повторно використовується для зберігання цього результату в JS-коді.)d=Tnct

Випадокa0

Рівняння дійсно є квадратичним:

Tn=an2+bn+can2+bnd=0

З , дискримінант:a=2a

Δ=b2+2ad

а коріння:

n0=bΔan1=b+Δa

Рівняння допускає цілий корінь, якщоΔ є цілим числом і будь-яке:

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

Випадокa=0,b0

Рівняння лінійне:

Tn=bn+cbn=dn=db

Він допускає цілочисельний корінь, якщо .d0(modb)

Випадокa=0,b=0

Рівняння більше не залежить від :n

Tn=cd=0


1

05AB1E , 35 байт

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

Порт @Arnauld «s JavaScript відповіді , тому переконайтеся , що upvote його!

Приймає вхід у форматі .[t,c],a,b

Спробуйте в Інтернеті

Пояснення:

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

Врятували б Ųкілька байт? (Мабуть, не тому, що нам пізніше все одно потрібно обчислити квадратний корінь.)
Арнольд,

@Arnauld На жаль, не з трьох причин: 1. Ųпри негативних значеннях якимось чином дає значення саме замість 0.. 2. Ųз десятковими значеннями (навіть з .0) дає 0замість того, 1чи вони квадратні чи ні (це помилка, яку я буду доповісти Аднану). 3. Навіть якщо обидва працював би і -4.0привів би 0замість того , щоб -4.0і 4.0призведе 1замість 0, він все одно буде +2 байта , так як нам потрібен квадратний корінь і трьох екземпляри будуть розділені дублікати: tÐdiпроти DŲitD; або наразі DÄïŲitDдля виправлення двох інших згаданих проблем.
Kevin Cruijssen

1
Крім того, результати Ųнегативних вхідних даних невідповідні .
Арнольд

@Arnauld Wth .. це справді досить дивно. І застаріла версія навіть дає інший, як і дивний результат .. : S Я повідомив про помилки, включаючи ваш тестовий TIO Аднану в чаті 05AB1E.
Kevin Cruijssen


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.