정사각형 삼각형


23

양의 정수 x 는 두 개의 다른 양의 정수 yz 가있는 경우 모든 합 이 x 보다 작은 양의 정수 y 인 경우

x + y

x + z

y + z

완벽한 사각형입니다.

예를 들어 30은 정삼각형 숫자이므로

30 + 6 = 6 2

30 + 19 = 7 2

6 + 19 = 5 2


당신의 임무는 입력으로 양의 정수를 취하고 그것이 정사각형 삼각형인지 아닌지를 결정하는 코드를 작성하는 것입니다. 입력 값이 사각형 삼각형 숫자 인 경우 다른 값, 그렇지 않은 경우 다른 값 두 개를 출력해야합니다.

이것은 이므로 바이트 수가 적을수록 답이 바이트로 표시됩니다.

테스트 케이스

1000 미만의 모든 정사각형 삼각형 숫자는 다음과 같습니다.

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

@ Mr.Xcoder 감사합니다! OEIS를 먼저 확인했을 것입니다. 본문에 더 추가하여 검색 할 수 있도록하겠습니다.
밀 마법사

명확히하기 위해, "..., 두 개의 서로 다른 양의 정수, y 및 z IFF에 존재하는 x보다 작되는" 것을 의미 y < x하고 z < x또는 그 y+z < x?
J. Sallé

2
@ J.Sallé 전자
밀 마법사

여기에 입력 및 출력 테스트 케이스가 없습니다
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받습니다. 설립 filter두 개의 입력에 (함수에 여기에 해당) $a,$bIFF에 부울 사실을 반환 [math]::sqrt의가 $a+$b있다 -eq받는 연간 Floor그 제곱근의 (즉, 그것은 정수 제곱근이다).

나머지는 프로그램의 고기입니다. 에서 1까지 루프를 두 번 반복합니다 $x-1. 반복 할 때마다, 우리는 여부를 확인 $y이다 -n해주 eQUAL에 $_(즉, $ z는), 그리고 기능의 모든 조합에 대한 사실 여부 $x, $y그리고 $_. 그렇다면 $o1 씩 증가합니다 (0이 아님).

마지막으로, 우리는 double-Boolean-negate $o를로 0변환 False하고 0이 아닌 값을로 변환 True합니다. 그것은 파이프 라인에 남아 있으며 출력은 암시 적입니다.


4

하스켈 , 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하기 때문에 더 오래 사용하는 것이 확실 합니다.floorfromIntegral

편집 : 6 바이트를 벗어난 @ @ 마법사에게 감사드립니다!


4

자바 스크립트 (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 바이트 및 수정 !


당신은이 필요하지 않은 '모두로이야 nO벡터화. 또한 거짓 값만 포함하더라도 최소 2 개의 값이 1 개 이상인 목록에 대해서는 마지막 2 바이트가 true를 반환하므로 작동하지 않습니다. Z대신 에 사용하여 수정 (및 단축) 할 수 있습니다 .
Emigna

@Emigna 감사합니다! (BTW 내가 필요 €O했고 이것이 바로 이전의 접근 방식 이 작동 했던 이유 입니다 )
Mr. Xcoder

그래도 작동하지 않았습니다. 예를 들어 45false를 반환하는지 확인하십시오 .
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,zwith의 모든 값 y<-(z=s-x)[z>0&z<x]을 계산 한 다음로 모든 합을 계산합니다 outer(y,y,"+"). 이것은 대각선 이외의 항목이 대각선에있는 것처럼 정사각형 행렬을 생성합니다 y==z. 따라서 diag(S)=0대각선을 0으로 설정합니다. 이는 정사각형이 아니며 any요소가 Sis 인지 확인합니다 %in%s.


3

SWI- 프롤로그 , 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) 정수를 매개 변수로 사용하고 정삼각형 숫자인지 여부를 출력하는 규칙입니다 (true / false).


2

자바 스크립트 (ES7), 72 바이트

반환 0또는 1.

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 바이트

함수에서 읽기 시작하십시오 all. 첫 번째 인수는 숫자의 제곱근이 정수인지 확인하는 익명 함수이며 두 번째 인수의 각 값에 적용됩니다. 에 대한 단일 인수 anyGenerator두 개의 for 루프이며, 각 반복마다 all함수 의 출력이 포함 됩니다.

-2 바이트를위한 Mr Xcoder에게 감사합니다.

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Ș↔+↔łŕ⁻Đłŕŕŕ

1≤z <y <x가되도록 y, z의 모든 가능한 조합을 테스트합니다.

x가 정사각형 삼각형이면 1을, 그렇지 않으면 0을 반환

온라인으로 사용해보십시오!


1

MATL , 20 19 18 바이트

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

온라인으로 사용해보십시오! 거짓이면 1을, 참이면 0을 반환합니다.

최대 500 개의 테스트 케이스 : 온라인으로 사용해보십시오! ( H대신 사용 G). 런타임은 입력 크기가 2 차이므로 테스트 케이스를에서 1n실행 하는 것을 열거하므로 O(n^3)TIO에서 모든 테스트 케이스를 최대 1000 배까지 열거합니다.

  • @LuisMendo 덕분에 -1 바이트 및 추측 적은
  • 정수를보다 영리하게 검사하여 -1 바이트.

제거 q하면 원하는 시퀀스를 하위 집합으로 사용하지만 제약 조건이 y없고 z보다 작은 시퀀스를 생성합니다 x. 예는 x=18, y=7, z=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.