# 正方形の三角形

23

x + y

x + z

y + z

たとえば、30は正方形の三角形の番号です。

30 + 6 = 6 2

30 + 19 = 7 2

6 + 19 = 5 2

あなたの仕事は、入力として正の整数を取り、それが正三角形の数であるかどうかを決定するコードを書くことです。2つの異なる値の1つを出力する必要があります。1つは入力が正三角形の場合、もう1つはそうでない場合です。

これはため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。

## テストケース

``````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です。
Mr Xcoder

@ Mr.Xcoderありがとう！おそらく最初にOEISを確認する必要がありました。それをより検索しやすくするために本文に追加します。

J.サレ

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``

4

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

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

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いいえ、あなたはあなたのソリューションに独立して到着したと確信しています。
ニール

4

# 05AB1E、18バイト

``````Lns-IL¨Ãæ2ù€OÅ²O0›
``````

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

Emigna -3  -1バイトと修正をありがとう！

あなたは2必要はありません`€`の両方として`n`および`O`ベクトル化を。偽の値のみが含まれている場合でも、少なくとも1つの値を持つリストに対して最後の2バイトがtrueを返すため、これも機能しません。これは、`Z`代わりに使用することで修正（および短縮）できます。
エミグナ

@Emignaありがとう！（ところで、私は必要性をしました`€O`し、前のアプローチが理由です仕事やった``º`
ミスターXcoder

うまくいきませんでした。たとえば`45`、falseを返す必要があることを確認してください。
エミグナ

ええと、わかりました。とにかく、今すぐ更新。おかげで

@Sanchises修正済み。おかげで

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`withのすべての値を`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)` パラメータとして整数を取り、それが正三角形の数（true / false）かどうかを出力するルールです。

2

# JavaScript（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)`、あなたが推測のように。

2

# ゼリー、15バイト

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

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

### どうやって？

```ṖŒc;€ŒcS€Æ²ẠƊ€Ẹ|| 完全なプログラム。
||
Ṗ|| ポップされた範囲。収量[1、N）∩ℤ。
Œc|| ペア（2要素の組み合わせ）。
;€|| それぞれにNを追加します。
Ɗ€|| リストごとに、次のことを確認します。
Ạ|| ... すべて ...
S€|| ...それぞれの合計...
Œc|| ...ばらばらのペア
Æ²|| ...完全な正方形です。
Ẹ|| 上記を満たす値があるかどうかをテストします。
```

1

# ジュリア0.6、61バイト

-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を返します。

• -1バイトで、@ LuisMendoのおかげで推測が少ない
• 整数度のより巧妙なチェックによる-1バイト。

``````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
``````