สามเหลี่ยมจตุรัส


23

จำนวนเต็มบวกxคือเลขสามเหลี่ยมจตุรัส iff มีเลขจำนวนเต็มบวกสองตัวคือyและzซึ่งเล็กกว่าxดังนั้นผลรวมทั้งหมด

x + y

x + z

y + z

เป็นสี่เหลี่ยมที่สมบูรณ์แบบ

ตัวอย่างเช่น 30 เป็นเลขสามเหลี่ยมจตุรัสเพราะ

30 + 6 = 6 2

30 + 19 = 7 2

6 + 19 = 5 2


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

นี่คือดังนั้นคำตอบจะได้คะแนนเป็นไบต์ด้วยจำนวนไบต์น้อยกว่าจะดีกว่า

Testcases

นี่คือหมายเลขสามเหลี่ยมสแควร์ทั้งหมดต่ำกว่า 1,000

30,44,47,48,60,66,69,70,78,86,90,92,94,95,96,98,108,113,116,118,120,122,124,125,126,132,138,142,147,150,152,154,156,157,158,159,160,165,170,176,180,182,185,186,188,190,192,194,195,196,197,198,200,207,212,214,216,218,221,222,224,227,230,232,234,236,237,238,239,240,246,248,253,258,260,264,266,267,268,270,273,274,275,276,278,280,281,282,283,284,285,286,290,296,298,302,303,306,308,310,312,314,317,318,320,322,323,324,326,328,329,330,331,332,333,334,335,336,338,340,344,347,350,351,352,356,357,360,362,364,368,370,371,372,374,376,377,378,380,382,384,385,386,387,388,389,390,392,394,396,402,405,408,410,413,414,415,418,420,422,423,424,426,429,430,432,434,435,436,438,440,442,443,444,445,446,447,448,449,452,456,458,462,464,466,467,468,470,472,476,477,479,480,482,484,485,488,490,491,492,494,496,497,498,500,501,502,503,504,505,506,507,508,509,510,512,515,516,518,522,523,524,527,528,530,533,536,538,540,542,543,546,548,549,550,551,552,554,557,558,560,562,563,564,566,568,569,570,571,572,573,574,575,576,578,579,582,585,588,590,592,593,594,598,600,602,603,604,605,606,608,610,612,613,614,615,616,618,620,621,623,624,626,627,628,630,632,633,634,636,638,639,640,641,642,643,644,645,646,650,652,656,657,658,659,660,662,666,667,668,670,672,674,677,678,680,682,683,686,687,689,690,692,694,695,696,698,700,701,702,704,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,722,723,726,728,730,734,737,739,740,742,744,745,746,750,752,755,756,758,760,762,764,765,767,768,770,772,773,774,776,778,779,780,782,783,784,785,786,788,789,790,791,792,793,794,795,796,797,798,800,802,803,804,805,810,812,814,816,817,818,819,820,822,825,826,827,828,829,830,832,833,834,836,837,838,840,842,846,847,848,849,850,851,852,854,855,856,858,860,861,862,863,864,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,882,884,888,890,891,893,896,897,898,902,903,904,905,908,912,913,914,915,916,918,920,923,924,926,927,928,929,931,932,933,935,936,938,940,941,942,944,946,947,948,950,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,970,972,974,976,978,980,981,984,986,987,988,992,993,995,996,998

OEIS A242445


6
นี่คือOEIS A242445
นาย Xcoder

@ Mr.Xcoder ขอบคุณ! ฉันน่าจะตรวจสอบ OEIS ก่อน ฉันจะเพิ่มสิ่งนั้นลงในร่างกายเพื่อให้สามารถค้นหาได้มากขึ้น
ข้าวสาลีตัวช่วยสร้าง

สำหรับวัตถุประสงค์ในการชี้แจง"... iff มีจำนวนเต็มบวกที่ต่างกันสองค่าคือ y และ z ซึ่งมีขนาดเล็กกว่า x ... " หมายความว่าy < xและz < xนั่นy+z < xหรือ
J. Sallé

2
@ J.Salléอดีต
Wheat Wizard

ที่นี่กรณีทดสอบที่มีอินพุทและเอาท์พุทขาด
RosLuP

คำตอบ:



7

เยลลี่ 12 ไบต์

R²_fṖŒcS€Æ²Ẹ

ลองออนไลน์!

มันทำงานอย่างไร

R²_fṖŒcS€Æ²Ẹ  Main link. Argument: x

R             Range; yield [1, 2, ..., x].
 ²            Square; yield [1², 2², ..., x²].
  _           Subtract; yield [1²-x, 2²-x, ..., x²-x].
    Ṗ         Pop; yield [1, 2, ..., x-1].
   f          Filter; keep those values of n²-x that lie between 1 and x-1.
              This list contains all integers n such that n+x is a perfect square.
              We'll try to find suitable values for y and z from this list.
     Œc       Yield all 2-combinations [y, z] of these integers.
       S€     Take the sum of each pair.
         Ʋ   Test each resulting integer for squareness.
           Ẹ  Any; check is the resulting array contains a 1.


7

Brachylogขนาด 19 ไบต์

~hṪ>₁ℕ₁ᵐ≜¬{⊇Ċ+¬~^₂}

ลองออนไลน์!

ยัง 19 ไบต์: ~hṪ>₁ℕ₁ᵐ≜{⊇Ċ+}ᶠ~^₂ᵐ

คำอธิบาย

~hṪ                    Ṫ = [Input, A, B]
  Ṫ>₁                  Ṫ is strictly decreasing (i.e. Input > A > B)
  Ṫ  ℕ₁ᵐ               All members of Ṫ are in [1, +∞)
  Ṫ     ≜              Assign values to A and B that fit those constraints
  Ṫ      ¬{       }    It is impossible for Ṫ…
           ⊇Ċ            …that one of its 2-elements subset…
            Ċ+           …does not sum…
              ¬~^₂       …to a square

4

PowerShell 150 ไบต์

param($x)filter f($a,$b){($c=[math]::Sqrt($a+$b))-eq[math]::Floor($c)}1..($i=$x-1)|%{$y=$_;1..$i|%{$o+=+($y-ne$_)*(f $x $y)*(f $x $_)*(f $y $_)}};!!$o

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบบางอย่าง

$xจะเข้า สร้าง a filter(เทียบเท่าฟังก์ชัน) ที่อินพุตสองตัว$a,$bซึ่งส่งกลับค่าบูลีนจริงถ้า if [math]::sqrtของa $a+$bเป็น-equal ไปยังFloorของรากที่สองนั้น (กล่าวคือเป็นรากที่สองจำนวนเต็ม)

ส่วนที่เหลือเป็นเนื้อของโปรแกรม เราสองครั้งสำหรับวงเพิ่มขึ้นจากการ1 $x-1แต่ละซ้ำเราตรวจสอบว่า$yเป็น-nOT equal ไป$_(เช่น $ z) และไม่ว่าฟังก์ชั่นนี้เป็นจริงสำหรับการรวมทั้งหมดของ$x, และ$y $_ถ้าเป็น$oจะเพิ่มขึ้นทีละหนึ่ง (ซึ่งทำให้ไม่ใช่ศูนย์)

สุดท้ายในตอนท้ายเราดับเบิลบูลีน-ลบล้าง$oซึ่งจะเปลี่ยน0เข้าและไม่ใช่ศูนย์เข้าFalse Trueที่เหลืออยู่บนไปป์ไลน์และเอาท์พุทเป็นนัย


4

Haskell , 75 69 ไบต์

f x=or[all(`elem`map(^2)[1..x])[x+y,x+z,y+z]|y<-[1..x-1],z<-[1..y-1]]

ลองออนไลน์!

อาจมีการปรับปรุงให้ดีขึ้นถ้ามีคนรู้วิธีทดสอบที่สั้นกว่าถ้าจำนวนนั้นเป็นรูปสี่เหลี่ยมจัตุรัส ฉันค่อนข้างมั่นใจว่าการใช้งานsqrtจบลงได้อีกต่อไปเพราะfloorเปลี่ยนผลลัพธ์เป็นประเภทอินทิกรัลดังนั้นคุณต้องใส่fromIntegralที่ไหนสักแห่งก่อนที่คุณจะสามารถเปรียบเทียบกับต้นฉบับได้

แก้ไข: ขอบคุณ @Wheat Wizard สำหรับการปิดขนาด 6 ไบต์!


4

JavaScript (ES7), 75 71 ไบต์

f=
n=>(g=i=>i?--j?[n+i,i+j,j+n].some(e=>e**.5%1)?g(i):1:g(j=i-1):0)(j=n-1)
<input type=number min=1 oninput=o.textContent=f(+this.value)><pre id=o>


ดูเหมือนว่าคุณนินจาฉัน 2 นาที :) คำตอบของเราอยู่ใกล้มากดังนั้นฉันจะลบของฉันได้ไหม
Arnauld

@Arnauld ไม่ฉันแน่ใจว่าคุณมาถึงทางออกของคุณอย่างอิสระ
Neil

4

05AB1E , 18 ไบต์

Lns-IL¨Ãæ2ù€OŲO0›

ลองออนไลน์!

ขอบคุณEmignaสำหรับ -3  -1 ไบต์และแก้ไข !


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

@Emigna ขอบคุณ! (BTW ฉันไม่จำเป็น€Oและที่ว่าทำไมวิธีการก่อนหน้านี้ได้ทำงานด้วย)
นาย Xcoder

มันไม่ทำงาน ตรวจสอบตัวอย่าง45ว่าควรส่งคืนค่าเท็จ
Emigna

อืมมมโอเค อย่างไรก็ตามปรับปรุงตอนนี้ ขอบคุณ
Mr. Xcoder

@Sanchises คงที่ ขอบคุณ
Mr. Xcoder

3

R , 79 ไบต์

function(x){s=(1:x)^2
S=outer(y<-(z=s-x)[z>0&z<x],y,"+")
diag(S)=0
any(S%in%s)}

ลองออนไลน์!

คำนวณค่าทั้งหมดของy,zด้วยแล้วคำนวณผลรวมของพวกเขาทั้งหมดที่มีy<-(z=s-x)[z>0&z<x] outer(y,y,"+")สิ่งนี้ให้ผลเป็นเมทริกซ์จตุรัสที่รายการนอกแนวทแยงอาจเป็นสี่เหลี่ยมเช่นy==zเดียวกับที่อยู่ในแนวทแยง ดังนั้นdiag(S)=0ชุดเส้นทแยงมุมไปที่ศูนย์ที่ไม่ได้สมบูรณ์แบบสี่เหลี่ยมและเราทดสอบเพื่อดูว่าanyองค์ประกอบของการมีS%in%s


3

SWI-Prolog , 88 ไบต์

s(A,B,C):-between(A,B,C),C<B,between(1,B,X),B+C=:=X*X.
g(X):-s(1,X,Y),s(Y,X,Z),s(Y,Z,Y).

ลองออนไลน์!

s(A, B, C) :-
    between(A, B, C), % Find an integer C between A and B (inclusive),
    C < B,            % which is less than B.
    between(1, B, X), % Find an integer X between 1 and B (inclusive),
    B+C =:= X*X.      % of which (B+C) is the square.
g(X) :-
    s(1, X, Y), % Find Y: 1 <= Y < X, and X+Y is a perfect square
    s(Y, X, Z), % Find Z: Y <= Z < X, and X+Z is a perfect square
    s(Y, Z, Y). % Make sure that Z > Y and Y+Z is a perfect square

g(X) เป็นกฎที่ใช้จำนวนเต็มเป็นพารามิเตอร์และเอาท์พุทไม่ว่าจะเป็นหมายเลขสามเหลี่ยมจตุรัส (จริง / เท็จ)


2

JavaScript (ES7), 72 ไบต์

ผลตอบแทนหรือ01

x=>(g=y=>z?y>z?![x+y,x+z,y+z].some(n=>n**.5%1)|g(y-1):g(x-1,z--):0)(z=x)

การสาธิต


2

C, 113 ไบต์

p(n){return(int)sqrt(n)==sqrt(n);}f(x,y,z,r){for(r=y=0;++y<x;)for(z=y;++z<x;p(x+y)&p(x+z)&p(z+y)&&++r);return!r;}

ผลตอบแทน0ถ้าจำนวนเป็นรูปสามเหลี่ยมสี่เหลี่ยม1มิฉะนั้น

ลองออนไลน์!


ฉันคาดเดาว่าreturn(int)sqrt(n)==sqrt(n)จะถูกแยกวิเคราะห์return((int)sqrt(n))==sqrt(n)เมื่อเทียบกับที่ชัดเจนมากขึ้นreturn(int)(sqrt(n)==sqrt(n))? หากคุณไม่สามารถอธิบายสิ่งที่pกำลังทำอยู่
MD XF

@MDXF การส่งประเภทมีลำดับความสำคัญสูงกว่า==ดังนั้นจึงแยกการแสดงออกเช่น((int)sqrt(n))==sqrt(n)เดียวกับที่คุณเดา
Steadybox


2

เยลลี่ 15 ไบต์

ṖŒc;€ŒcS€Æ²ẠƊ€Ẹ

ลองออนไลน์!

อย่างไร?

ṖŒc; €ŒcS€Æ²ẠƊ€Ẹ || โปรแกรมเต็มรูปแบบ
                ||
Ṗ || ช่วงที่ตอก ผลตอบแทน [1, N) ∩ℤ
 Œc || คู่ (การรวมสององค์ประกอบ)
   ; € || ผนวก N กับแต่ละรายการ
            Ɗ€ || สำหรับแต่ละรายการตรวจสอบว่า:
           Ạ || ... ทั้งหมด ...
       S € | | ... ผลรวมของแต่ละคน ...
     Œc || ... ไม่เข้าคู่กัน
         Ʋ || ... เป็นสี่เหลี่ยมที่สมบูรณ์แบบ
              Ẹ || ทดสอบว่ามีค่าใด ๆ ที่ตรงตามข้างต้นหรือไม่    



1

Julia 0.6 , 61 bytes

allเริ่มอ่านจากฟังก์ชั่น อาร์กิวเมนต์แรกคือฟังก์ชันที่ไม่ระบุชื่อตรวจสอบว่าสแควร์รูทของตัวเลขเป็นจำนวนเต็มซึ่งจะใช้กับแต่ละค่าในอาร์กิวเมนต์ที่สอง อาร์กิวเมนต์เดียวที่anyเป็น a Generatorด้วยสองสำหรับลูปซึ่งสำหรับการวนซ้ำแต่ละครั้งจะมีเอาต์พุตของallฟังก์ชัน

ขอบคุณ Mr Xcoder สำหรับ -2 ไบต์

x->any(all(x->√x%1==0,[x+y,x+z,y+z])for y=1:x-1for z=1:y-1)

ลองออนไลน์!


1

Pyt , 63 ไบต์

0←Đ⁻Đ`⁻Đ3ȘĐ3Ș+√ĐƖ=4ȘĐ3ȘĐ3Ș+√ĐƖ=4ȘĐ3ȘĐ3Ș+√ĐƖ=4Ș6Ș**4Ș↔+↔łŕ⁻Đłŕŕŕ

ทดสอบการรวมกันที่เป็นไปได้ทั้งหมดของ y, z เช่นนั้น1≤z <y <x

ส่งคืน 1 ถ้า x เป็นตัวเลขสามเหลี่ยมจตุรัส, 0 มิฉะนั้น

ลองออนไลน์!


1

MATL , 20 19 18 ไบต์

q:2XN!tG+wsvX^1\aA

ลองออนไลน์! ส่งคืน 1 สำหรับความเท็จ 0 สำหรับความจริง

ทดสอบมากถึง 500: ลองออนไลน์! (ใช้HแทนG) รันไทม์มีกำลังสองในขนาดอินพุตดังนั้นการแจกแจงการทดสอบจาก1ถึงการnทำงานO(n^3)ซึ่งเป็นสาเหตุที่การแจกแจงการทดสอบทั้งหมดถึง 1,000 เท่าของ TIO

  • -1 ไบต์และการคาดเดาน้อยลงด้วย @LuisMendo
  • -1 ไบต์โดยการตรวจสอบจำนวนเต็มอย่างชาญฉลาดยิ่งขึ้น

ถอดqสร้างลำดับที่มีลำดับที่ต้องการเป็นส่วนหนึ่ง แต่ไม่ จำกัด ที่yและจะเคร่งครัดมีขนาดเล็กกว่าz xตัวอย่างคือx=18, ,y=7z=18

q:    % Push 1...n-1
2XN   % Generate all permuations of choosing 2 numbers from the above.
!     % Transpose to take advantage of column-wise operators later on.
 G+   % Add n to these combinations, to have all combos of x+y and x+z
t  ws % Duplicate the combinations, swap to the top of the stack and sum to get y+z.
v     % Concatenate vertically. The array now contains columns of [x+y;x+z;y+z].
X^    % Element-wise square root of each element
1\    % Get remainder after division by 1.
a     % Check if any have remainders, columnwise. If so, it is not a square triangle.
A     % Check whether all combinations are not square triangle.

@LuisMendo ขอบคุณ น่าเสียดายที่ฉันหวังว่าจะได้คำตอบสำหรับการคาดเดาของฉัน แต่ฉันก็ไม่สามารถถามได้ที่ Math.SE โดยไม่แสดงความพยายามเพื่อพิสูจน์ ...
Sanchises


-1

APL NARS, 340 ไบต์

r←h n;i;j;k
   r←¯1⋄→0×⍳(n≤0)∨n≥9E9
   l←(-n)+2*⍨(⌈√n)..⌊√¯1+2×n
   l←(l>0)/l
   r←1⋄i←0⋄k←⍴l
A: →C×⍳k≤i+←1⋄j←i+1
B: →A×⍳j>k⋄→0×⍳0=1∣√(i⊃l)+j⊃l⋄j+←1⋄→B
C: r←0

ทดสอบ

      :for i :in ⍳100⋄k←h i⋄:if 1=k⋄⍞←' ',i⋄:endif⋄:endfor⋄⎕←' '
  30  44  47  48  60  66  69  70  78  86  90  92  94  95  96  98 
      (¯5..5),¨h¨¯5..5
 ¯5 ¯1  ¯4 ¯1  ¯3 ¯1  ¯2 ¯1  ¯1 ¯1  0 ¯1  1 0  2 0  3 0  4 0  5 0 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.