二次シーケンスからの有効な用語?


10

4つの番号が与えられます。最初の3つはaそれぞれシーケンスのbb、およびcです。

Tn=an2+bn+c

これら4つの数値は、どのような方法でも入力できます。出力は、2つの別個の出力の一つは、あなたの答えに第四の数は、配列中の用語である(上記の式はのための少なくとも1つの解決策があること一つの手段言及されるべきであるnとき整数であり、BC及びT nはは指定された値に置き換えられます)、もう一方は反対です。abcTn

これはコードゴルフなので、バイト単位での最も短い答えが勝ちます。プログラムは、数値が負または正(または0)、10進数または整数である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そうでない場合。

*確かに、「これら4つの数値をどのように入力してもかまいません」ということで、少し自由を取っています。

オンラインでお試しください!またはテストスイートをご覧ください。

どうやって?

_/Æ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すべての値がソリューションである場合に得られます。それ以外の場合は、個別のソリューションのリストであり、ソリューションがない場合は常に空のリストです。これは、標準のTruthy vs Falsey定義にも適合します。 )


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

オンラインでお試しください!

どうやって?

明確にするために、d=Tcと定義します。(この結果をJSコードに格納するために同じ変数tが再利用されます。)

ケースa0

方程式は本当に2次式です。

T=a2+b+ca2+bd=0

" = 2 、A、判別式は次のとおりです。a=2a

Δ=b2+2ad

そしてそのルーツは:

0=bΔa1=b+Δa

ならば、方程式は整数根を認めますΔ

bΔ0モッドa または b+Δ0モッドa

a=0b0

方程式は線形です:

T=b+cb=d=db

d0モッドb

a=0b=0

T=cd=0


1

05AB1E、35 バイト

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

@ArnauldのJavaScript回答のポートです。そのため、必ず彼に賛成票を投じてください。

[tc]ab

オンラインでお試しください

説明:

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

@Arnauld残念ながらいない3つの理由:1。Ų負の値で何とかするのではなく、値そのものを与える0。2. Ų小数点値(偶数として.0)を与える0代わりに1、彼らはこれがバグです(正方形やないですかこれは私がしますアドナンへの報告)。3.両方が働いているだろうし、場合でも-4.0につながる0の代わり-4.04.0してしまう1代わりに0、我々は平方根を必要とするので、それはまだ2バイトになると、三重の重複を分離することになりますtÐdiDŲitD; または現在DÄïŲitD言及されている他の2つの問題を修正します。
Kevin Cruijssen

1
さらに、Ų負の入力に対する結果には一貫性がありません
アーノールド



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.