Eine positive ganze Zahl x ist eine quadratische Dreieckzahl, wenn es zwei verschiedene positive ganze Zahlen gibt, y und z , die kleiner als x sind, so dass alle Summen
x + y
x + z
y + z
sind perfekte Quadrate.
Zum Beispiel ist 30 eine quadratische Dreieckszahl, weil
30 + 6 = 6 2
30 + 19 = 7 2
6 + 19 = 5 2
Ihre Aufgabe ist es, Code zu schreiben, der eine positive Ganzzahl als Eingabe verwendet und feststellt, ob es sich um eine quadratische Dreieckszahl handelt oder nicht. Sie sollten einen von zwei unterschiedlichen Werten ausgeben, einen, wenn die Eingabe eine quadratische Dreieckszahl ist, und einen anderen.
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
Hier sind alle quadratischen Dreieckszahlen unter 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
quelle
y < x
undz < x
oder dasy+z < x
?Antworten:
Haskell , 62 Bytes
Probieren Sie es online!
quelle
Gelee , 12 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2 ,
938786 Bytes-1 Byte dank Dennis
Probieren Sie es online!
quelle
Brachylog , 19 Bytes
Probieren Sie es online!
Auch 19 Bytes:
~hṪ>₁ℕ₁ᵐ≜{⊇Ċ+}ᶠ~^₂ᵐ
Erläuterung
quelle
PowerShell , 150 Byte
Probieren Sie es online! oder Überprüfen Sie einige Testfälle
Übernimmt die Eingabe
$x
. Richtetfilter
an zwei Eingängen eine (hier einer Funktion äquivalent) ein$a,$b
, die einen booleschen Wert true zurückgibt, wenn das[math]::sqrt
von mit der Quadratwurzel dieser Quadratwurzel identisch$a+$b
ist (dh es ist eine ganzzahlige Quadratwurzel).-eq
Floor
Der Rest ist das Fleisch des Programms. Wir verdoppeln für eine Schleife von
1
bis$x-1
. Jede Iteration, prüfen wir , ob$y
ist-n
ote
qual zu$_
(dh $ z), und ob die Funktion gilt für alle Kombinationen von$x
,$y
und$_
. Wenn dies der Fall ist,$o
wird es um eins inkrementiert (wodurch es nicht null wird).Schließlich verdoppeln wir am Ende die Boolesche Negation
$o
, die sich0
in eineFalse
Nicht-Null -Negation verwandeltTrue
. Das bleibt in der Pipeline und die Ausgabe ist implizit.quelle
Haskell ,
7569 BytesProbieren Sie es online!
Könnte wahrscheinlich verbessert werden, wenn jemand einen kürzeren Weg kennt, um zu testen, ob eine Zahl quadratisch ist. Ich bin mir ziemlich sicher, dass die Verwendung
sqrt
länger dauert, dafloor
das Ergebnis zu einem ganzzahligen Typ wird, den SiefromIntegral
irgendwo einfügen müssen, bevor Sie mit dem Original vergleichen können.EDIT: Danke @Wheat Wizard für das Abheben von 6 Bytes!
quelle
JavaScript (ES7),
7571 Bytesquelle
05AB1E , 18 Bytes
Probieren Sie es online!
Danke an Emigna für
-3-1 Byteund einen Fix!quelle
€
als beiden
undO
vektorisiert. Dies funktioniert auch nicht, da die letzten 2 Bytes für jede Liste mit mindestens 1 Wert true zurückgeben, auch wenn sie nur falsche Werte enthält. Dies kann durch Verwendung von behoben (und verkürzt) werdenZ
.€O
und deshalb der bisherige Ansatz funktioniert mit`º
)45
, dass false zurückgegeben werden soll.R , 79 Bytes
Probieren Sie es online!
berechnet alle Werte von
y,z
mity<-(z=s-x)[z>0&z<x]
und berechnet dann alle ihre Summen mitouter(y,y,"+")
. Dies ergibt eine quadratische Matrix, in der Einträge außerhalb der Diagonale potenzielle Quadrate sind, so alsy==z
ob sie sich auf der Diagonale befinden. Setzt daherdiag(S)=0
die Diagonalen auf Null, was keine perfekten Quadrate sind, und wir testen, ob dasany
Element vonS
ist%in%s
.quelle
SWI-Prolog , 88 Bytes
Probieren Sie es online!
g(X)
ist die Regel, die eine Ganzzahl als Parameter verwendet und ausgibt, ob es sich um eine quadratische Dreieckszahl handelt (wahr / falsch).quelle
JavaScript (ES7), 72 Byte
Rückgabe
0
oder1
.Demo
Code-Snippet anzeigen
quelle
C 113 Bytes
Gibt zurück,
0
ob die Zahl ein quadratisches Dreieck ist.1
andernfalls.Probieren Sie es online!
quelle
return(int)sqrt(n)==sqrt(n)
wird analysiert,return((int)sqrt(n))==sqrt(n)
im Gegensatz zum Offensichtlichenreturn(int)(sqrt(n)==sqrt(n))
? Wenn nicht, können Sie uns erklären, wasp
wir tun?==
, daher wird der Ausdruck so analysiert,((int)sqrt(n))==sqrt(n)
wie Sie es vermutet haben.APL (Dyalog) , 49 Bytes
Probieren Sie es online!
quelle
Gelee , 15 Bytes
Probieren Sie es online!
Wie?
quelle
Sauber ,
958886 BytesProbieren Sie es online!
quelle
Ruby , 73 Bytes
Probieren Sie es online!
quelle
Julia 0,6 , 61 Bytes
Beginnen Sie mit dem Lesen der Funktion
all
. Das erste Argument ist eine anonyme Funktion, die überprüft, ob die Quadratwurzel einer Zahl eine Ganzzahl ist. Dies wird auf jeden Wert im zweiten Argument angewendet. Das einzige Argument fürany
ist aGenerator
mit zwei for-Schleifen, die für jede Iteration die Ausgabe derall
Funktion enthalten.Vielen Dank an Herrn Xcoder für -2 Bytes.
Probieren Sie es online!
quelle
Pyt , 63 Bytes
Prüft alle möglichen Kombinationen von y, z so, dass 1 ≤ z <y <x ist
Gibt 1 zurück, wenn x eine quadratische Dreieckszahl ist, andernfalls 0
Probieren Sie es online!
quelle
MATL ,
201918 BytesProbieren Sie es online! Gibt 1 für Falsey, 0 für Truthy zurück.
Testfälle bis zu 500: Probieren Sie es online! (mit
H
anstelle vonG
). Runtime ist quadratisch in der Eingangsgröße, Aufzählen so die Testfälle von1
bisn
läuft inO(n^3)
, weshalb alle Testfälle wird Aufzählen bis zu 1000 mal heraus TIO.Durch das Entfernen
q
wird eine Sequenz mit der gewünschten Sequenz als Teilmenge generiert, jedoch ohne die Einschränkung, dassy
undz
streng kleiner alsx
. Ein Beispiel dafür istx=18
,y=7
,z=18
.quelle
APL NARS, 340 Byte
Prüfung
quelle