นี่เป็นตัวเลขสามเหลี่ยมที่ถูกตัดทอนหรือไม่?


20

ลำดับ OEIS ที่เกี่ยวข้อง: A008867

หมายเลขสามเหลี่ยมที่ถูกตัดทอน

คุณสมบัติทั่วไปของตัวเลขสามเหลี่ยมคือพวกเขาสามารถจัดเรียงในรูปสามเหลี่ยม ตัวอย่างเช่นใช้ 21 และจัดเป็นสามเหลี่ยมของos:

     โอ 
    อู
   OOO
  oooo
 ooooo
oooooo

ลองกำหนด "การตัดปลาย:" การตัดสามเหลี่ยมขนาดเดียวกันจากแต่ละมุม วิธีหนึ่งในการตัดทอน 21 มีดังนี้:

     . 
    . .
   OOO
  oooo
 . ooo
. . oo .

(รูปสามเหลี่ยม.ถูกตัดจากต้นฉบับ)

oเหลืออีก12 วินาทีดังนั้น 12 จึงเป็นเลขสามเหลี่ยมที่ถูกตัดทอน

งาน

งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่น (หรือเทียบเท่า) ที่ใช้จำนวนเต็มและส่งกลับ (หรือใช้วิธีการส่งออกมาตรฐานใด ๆ ) ไม่ว่าจะเป็นตัวเลขเป็นจำนวนสามเหลี่ยมตัดทอน

กฎระเบียบ

  • ไม่มีช่องโหว่มาตรฐาน
  • อินพุตเป็นจำนวนเต็มที่ไม่เป็นลบ
  • การตัดไม่สามารถมีความยาวด้านเกินกว่าครึ่งหนึ่งของสามเหลี่ยมเดิม (เช่นการตัดไม่สามารถซ้อนทับกันได้)
  • การตัดสามารถมีความยาวด้านเป็นศูนย์ได้

กรณีทดสอบ

Truthy:

0
1
3
6
7
10
12
15
18
19

Falsy:

2
4
5
8
9
11
13
14
16
17
20

กรณีทดสอบสำหรับจำนวนเต็มทั้งหมดถึง 50: TIO Link

นี่คือดังนั้นการส่งที่มีจำนวนไบต์สั้นที่สุดในแต่ละภาษาจะชนะ!

code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

1
เราจะส่งออกผลลัพธ์ที่เป็นความจริงและเป็นเท็จหรือสองค่าที่สอดคล้องกันตกลงไหม
ข้าวสาลีตัวช่วยสร้าง

@WheatWizard ยอมรับค่าที่สอดคล้องกันสองค่า
JungHwan Min

อย่างไรก็ตามการตัดส่วนใหญ่ทับซ้อนกันผลลัพธ์ที่ได้จะเท่ากับสามเหลี่ยมที่เล็กกว่าและมีการตัดทอนน้อยกว่า (หากการตัดทอนมีความยาวด้าน 0)
Asone Tuhid

คำตอบ:



7

Haskell , 46 ไบต์

f n=or[mod(gcd(p^n)(4*n-1)-5)12<3|p<-[1..4*n]]

ลองออนไลน์!

หลังจากโยนทฤษฎีจำนวนไปที่ปัญหา (ขอบคุณ @ flawr) ฉันพบลักษณะนี้:

nคือตัวเลขสามเหลี่ยมที่ถูกตัดทอนถ้าในการแยกตัวประกอบเฉพาะของ4n-1ไพรม์ของฟอร์ม5 mod 12หรือ7 mod 12จะปรากฏเป็นจำนวนครั้ง

ตัวอย่างเช่นนี่หมายความว่า4n-1อาจไม่สามารถหารด้วย 5 ได้เว้นแต่จะหารด้วย5 2 = 25 ต่อไปและจำนวนทั้งหมด5ปัจจัยจะเท่ากัน

Haskell ไม่มีการแยกตัวประกอบ แต่เราสามารถโพล่งออกมาได้ หากเราทำงานกับ factorizations สู่อำนาจเฉพาะช่วงเช่น12 = 3 * 4เราสามารถใช้คำสั่งที่เทียบเท่าได้:

nเป็นจำนวนสามเหลี่ยมตัดทอนว่าถ้าตัวประกอบของ4n-1เข้าสู่อำนาจที่สำคัญมีแง่ของรูปแบบไม่มี5 สมัย 12หรือ7 สมัย 12

เราสามารถดึงพลังของนายกพีปรากฏในkgcd(p^k)kเป็น จากนั้นเราจะตรวจสอบว่าผลการวิจัยไม่ได้เป็น 5 หรือ 7 โมดูโล mod(r-5)12>212 โปรดทราบว่าrเป็นคี่ นอกจากนี้เรายังตรวจสอบคอมโพสิตเป็นpโดยไม่มีวิธีที่จะบอกพวกเขาจากช่วงเวลา แต่เช็คจะผ่านตราบใดที่ปัจจัยของมันทำ

สุดท้ายกวน>2ไป<3และการเปลี่ยนTrue/ Falseในการส่งออกจะช่วยประหยัดไบต์โดยให้เราใช้แทนorand


ลักษณะที่เกี่ยวข้องคือตัวหารของ4n-1 ที่ถ่ายโมดูโล 12 มีทั้งหมด 1 และ 11 มากกว่า 5 และ 7

53 ไบต์

f n=sum[abs(mod k 12-6)-3|k<-[1..4*n],mod(4*n)k==1]<0

ลองออนไลน์!


คำอธิบายที่ดีจริงๆ!
สะเทินน้ำสะเทินบก

6

Python 2 , 52 ไบต์

f=lambda n,b=1:b>n+1or(8*n-2+3*b*b)**.5%1>0<f(n,b+1)

ลองออนไลน์!

เอาท์พุทTrue/ Falseพลิก ใช้ลักษณะนี้:

nเป็นจำนวนสามเหลี่ยมตัดทอนว่าถ้า8N-2มีรูปแบบ2 -3b 2สำหรับจำนวนเต็มบางA, B

เราตรวจสอบว่าส่วนใด8*n-2+3*b*bเป็นตารางที่สมบูรณ์สำหรับการใด ๆbจากการ1 n+1เราหลีกเลี่ยงb=0เพราะมันทำให้เกิดข้อผิดพลาดสำหรับสแควร์รูทของค่าลบเมื่อใดn==0แต่สิ่งนี้ไม่สามารถทำร้ายได้เพราะมีเพียงคี่bสามารถทำงานได้

ทำไม่ซ้ำ:

Python 2 , 53 ไบต์

lambda n:0in[(8*n-2+3*b*b)**.5%1for b in range(~n,0)]

ลองออนไลน์!


โซลูชันแบบเรียกซ้ำและไม่เรียกซ้ำมักจะแข่งขันกันในงูใหญ่หรือไม่?
boboquack

@boboquack มักจะชนะการแก้ปัญหาโดย recursive rangeกี่ไบต์มากกว่า ที่นี่ใกล้เพราะ b>n+1เป็นกรณีฐานยาวและ0inสั้น
xnor

5

R , 45 43 ไบต์

-2 ไบต์ขอบคุณVlo

(n=scan())%in%outer(T<-cumsum(0:n),3*T,"-")

ลองออนไลน์!

ฉันค่อนข้างแน่ใจว่าเราแค่ต้องตรวจสอบnตัวเลขสามเหลี่ยมแรกสำหรับสิ่งนี้ แรงเดรัจฉานตรวจสอบว่าnอยู่ในความแตกต่างแบบคู่ของตัวเลขสามเหลี่ยมและสามเหลี่ยม


scan() n<-scan();n%in%outer(T<-cumsum(0:n),3*T,"-")
Vlo

@Vlo facepalmฉันมีนิสัยชอบใช้งานฟังก์ชั่นอยู่ทุกหนทุกแห่ง ...
Giuseppe

และฉันเพิ่งติดนิสัยการใช้ <- การมอบหมายแทน (n = scan ()) ... tsk tsk
Vlo

5

เยลลี่ 10 ไบต์

0r+\ð_÷3f⁸

ลิงก์ monadic ยอมรับจำนวนเต็มและส่งคืนค่าความจริง (รายการที่ไม่ใช่ค่าว่าง) หรือค่าเท็จ (รายการว่าง)

ลองออนไลน์! (ส่วนท้ายดำเนินการเป็นตัวแทนหลามเพื่อแสดง[0]ผลตามที่เป็น)
... หรือดูชุดทดสอบ (ทำงานสำหรับ 0 ถึง 20 รวม)

อย่างไร?

ให้ N เป็นรูปสามเหลี่ยม N ตัวแรกลบ N ออกจากกันหารผลลัพธ์ด้วย 3 และเก็บผลลัพธ์ใด ๆ ที่เป็นหนึ่งในตัวเลขสามเหลี่ยม N ตัวแรก

0r+\ð_÷3f⁸ - Link: integer, N             e.g. 7
0r         - zero inclusive range N            [    0, 1, 2,   3,    4, 5,   6,   7]
  +\       - cumulative reduce with addition   [    0, 1, 3,   6,   10,15,  21,  28]
    ð      - start a new dyadic link with that, t, on the left and N on the right
     _     - t subtract N (vectorises)         [   -7,-6,-3,  -1,    3, 8,  14,  21]
      ÷3   - divivde by three (vectorises)     [-2.33,-2,-1.33,-0.33,1,2.67,4.67, 7]
         ⁸ - chain's left argument, t          [    0, 1, 3,   6,   10,15,  21,  28]
        f  - filter keep                       [                     1             ]
                                               - a non-empty list, so truthy

4

Pyt , 10 ไบต์

Đř△Đ3*ɐ-Ƒ∈

ลองออนไลน์!

คำอธิบาย:

        Implicit input
Đ       Duplicate input
ř       Push [1,2,...,input]
△       For each element k in the array, get the kth triangle number
Đ       Duplicate the top of the stack
3*      Multiply by 3
ɐ       ɐ - All possible:
 -                       subtractions between elements of the two arrays  
Ƒ       Flatten the nested array
∈       Is the input in the array

คุณเอาชนะฉันด้วย +1 GG
FantaC

@tfbninja ฉันหวังว่าฉันจะได้คำอธิบายที่ดีกว่าสำหรับสิ่งที่ɐ-ไม่
mudkip201

1
เพิ่มคุณสามารถย้อนกลับถ้าคุณต้องการ
FantaC

3

Haskell , 48 ไบต์

f a|u<-[0..a]=or[x^2+x-3*(y^2+y)==2*a|x<-u,y<-u]

ลองออนไลน์!


a==1ดูเหมือนว่าการตรวจสอบของคุณจะสามารถมองเห็น
xnor

@ xnor ฉันเห็นว่าทำไม ตอนนี้ได้รับการแก้ไขแล้ว
ข้าวสาลีตัวช่วยสร้าง

3

J , 22 ไบต์

e.[:,@(-/3*])2![:i.2+]

ลองออนไลน์!

วิธีการที่ตรงไปตรงมาและค่อนข้างกอล์ฟไม่ดี

คำอธิบาย

e.[:,@(-/3*])2![:i.2+]
             2![:i.2+]  Range of triangular numbers up to N
      (-/3*])           All possible subtractions of 3T from T 
                        where T is triangular up to the Nth triangular number
    ,@                  Flattened into a single list
e.                      Is N in the list?

e.2,@(!-/3*!)[:i.2+]
FrownyFrog

e.2,@(!-/3*!)1+i.,]อาจ
FrownyFrog

3

MATLขนาด 12 ไบต์

tQ:qYst!3*-m

ผลลัพธ์1สำหรับความจริง0สำหรับความเท็จ

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไรกับตัวอย่าง

พิจารณาการป้อนข้อมูล 6

t      % Implicit input. Duplicate
       % STACK: 6, 6
Q:q    % Increase, range, decrease element-wise. Gives [0 1 ... n]
       % STACK: 6, [0 1 ... 6]
Ys     % Cumulative sum
       % STACK: 6, [0 1 3 6 10 15]
t!     % Duplicate, transpose
       % STACK: 6, [0 1 3 6 10 15], [0;
                                     1;
                                     3;
                                     6;
                                     10;
                                     15]
3*     % Times 3, element-wise
       % STACK: 6, [0 1 3 6 10 15 21 28 36 45 55], [0;
                                                    3;
                                                    9;
                                                    18;
                                                    30;
                                                    45]
-      % Subtract, element-wise with broadcast
       % STACK: 6, [  0   1   3   6  10  15  21;
                     -3  -2   0   3   7  12  18;
                     -9  -8  -6  -3   1   6  12;
                    -18 -17 -15 -12  -8  -3   3;
                    -30 -29 -27 -24 -20 -15  -9;
                    -45 -44 -42 -39 -35 -30 -24;
                     -63 -62 -60 -57 -53 -48 -42]
m      % Ismember. Implicit display
       % STACK: 1



1

05AB1E , 11 ไบต์

ÅT3*+8*>ŲZ

ลองออนไลน์!

คำอธิบาย

ÅT            # get a list of triangle numbers upto input
  3*          # multiply each by 3
    +         # add input to each
     8*       # multiply each by 8
       >      # increment each
        Ų    # check each for squareness
          Z   # max

นี่ขึ้นอยู่กับความจริงที่ว่าตัวเลขTเป็นสามเหลี่ยมถ้า8T+1เป็นสี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบแปลก
เราเริ่มต้นในรายการสามเหลี่ยมที่เราสามารถตัดทอนคำนวณสามเหลี่ยมที่มีขนาดใหญ่กว่าที่เป็นไปได้ตามพวกเขาและตรวจสอบว่าอันที่จริงเป็นสามเหลี่ยม


1

Japt , 16 ไบต์

ò å+ d@Zd_-3*X¶U

ลองมัน | ตรวจสอบกรณีทดสอบทั้งหมด


คำอธิบาย

                     :Implicit input of integer U
ò                    :Range [0,U]
  å+                 :Cumulative reduction by addition
     d@              :Does any X in array Z return true when passed through this function?
       Zd_           :  Does any element in Z return true when passe through this function?
          -3*X       :    Subtract 3*X
              ¶U     :    Check for equality with U

ทางเลือก

ò å+ £Zm-3*XÃdøU

ลองมัน


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