คำที่ถูกต้องจากลำดับกำลังสอง?


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Ạ

ลิงก์แบบ monadic ซึ่งยอมรับรายการลิสต์ * [[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

ลองออนไลน์!

อย่างไร?

เพราะความชัดเจนที่เรากำหนดd=Tnc (ตัวแปรเดียวกันtถูกใช้ซ้ำเพื่อเก็บผลลัพธ์นี้ในรหัส JS)

กรณีa0

สมการนั้นเป็นกำลังสองจริง ๆ :

Tn=an2+bn+can2+bnd=0

ด้วย' = 2 , จำแนกเป็น: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³%]_

คำตอบจาวาสคริปต์ของ Port of @Arnauldดังนั้นอย่าลืม upvote เขา!

จะเข้าในรูปแบบB[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

@Arnauld แต่น่าเสียดายที่ไม่ใช่ด้วยเหตุผลสามประการ: 1. Ųด้วยค่าลบอย่างใดจะให้ค่าตัวเองแทน0.. 2. Ųมีค่าทศนิยม (แม้จะมี.0) ให้0แทน1ว่าพวกเขาจะเป็นสี่เหลี่ยมหรือไม่ (นี่คือข้อผิดพลาดที่ฉันจะ รายงานต่อ Adnan) 3. แม้ว่าทั้งสองจะทำงานได้และ-4.0จะส่งผลให้0แทนที่-4.0และ4.0จะส่งผล1แทน0มันจะยังคงเป็น 2 ไบต์เนื่องจากเราต้องการสแควร์รูทและการเพิ่มขึ้นสามเท่าจะแยกจากกันซ้ำ: tÐdivs DŲitD; หรือในปัจจุบันDÄïŲitDเพื่อแก้ไขปัญหาที่กล่าวถึงอีกสองเรื่อง
Kevin Cruijssen

1
นอกจากนี้ผลของการŲปัจจัยเชิงลบจะไม่สอดคล้องกัน
Arnauld

@ Arnauld Wth .. มันแปลกจริง ๆ และเวอร์ชั่นดั้งเดิมก็ให้ผลที่ต่างออกไปเช่นเดียวกับผลลัพธ์แปลก ๆ .. : S ฉันได้รายงานข้อบกพร่องแล้วรวมถึงการทดสอบ TIO ของคุณไปยัง Adnan ในการแชท 05AB1E
Kevin Cruijssen


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.