Dodatnia liczba całkowita x jest kwadratowym numerem trójkąta iff istnieją dwie różne dodatnie liczby całkowite, y i z , które są mniejsze niż x, tak że wszystkie sumy
x + y
x + z
y + z
są idealne kwadraty.
Na przykład 30 to kwadratowy numer trójkąta, ponieważ
30 + 6 = 6 2
30 + 19 = 7 2
6 + 19 = 5 2
Twoim zadaniem jest napisanie kodu, który przyjmuje dodatnią liczbę całkowitą jako dane wejściowe i określa, czy jest to kwadratowy numer trójkąta. Powinieneś wypisać jedną z dwóch różnych wartości, jedną, jeśli wejście jest kwadratowym numerem trójkąta, a drugą w przeciwnym razie.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
Oto wszystkie liczby kwadratowych trójkątów poniżej 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
code-golf
number
decision-problem
Kreator pszenicy
źródło
źródło
y < x
iz < x
tamtoy+z < x
?Odpowiedzi:
Haskell , 62 bajty
Wypróbuj online!
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Jak to działa
źródło
Python 2 ,
938786 bajtów-1 bajt dzięki Dennisowi
Wypróbuj online!
źródło
Brachylog , 19 bajtów
Wypróbuj online!
Również 19 bajtów:
~hṪ>₁ℕ₁ᵐ≜{⊇Ċ+}ᶠ~^₂ᵐ
Wyjaśnienie
źródło
PowerShell , 150 bajtów
Wypróbuj online! lub Zweryfikuj niektóre przypadki testowe
Pobiera dane wejściowe
$x
. Ustanawiafilter
(tutaj odpowiednik funkcji) na dwóch wejściach$a,$b
, która zwraca wartość logiczną prawda IFF[math]::sqrt
o$a+$b
to-eq
seksualnego doFloor
tego pierwiastka (to znaczy, że jest to liczba całkowita pierwiastek kwadratowy).Reszta to mięso programu. Podwoimy liczbę pętli od
1
do$x-1
. W każdej iteracji sprawdzamy, czy$y
jest-n
ote
Qual do$_
(tj. $ Z) i czy funkcja jest prawdziwa dla wszystkich kombinacji$x
,$y
i$_
. Jeśli to jest,$o
jest zwiększany o jeden (co powoduje, że jest niezerowy).Na koniec podwoimy Boolean-negate
$o
, który zamienia się0
wFalse
i niezerowy wTrue
. Pozostaje to w potoku, a dane wyjściowe są niejawne.źródło
Haskell ,
7569 bajtówWypróbuj online!
Prawdopodobnie można to poprawić, jeśli ktoś zna krótszy sposób sprawdzenia, czy liczba jest kwadratowa. Jestem pewien, że używanie
sqrt
kończy się dłużej, ponieważfloor
zamienia wynik w typ integralny, więc musisz go umieścićfromIntegral
gdzieś zanim będziesz mógł porównać z oryginałem.EDYCJA: Dzięki @Wheat Wizard za zdjęcie 6 bajtów!
źródło
JavaScript (ES7),
7571 bajtówźródło
05AB1E , 18 bajtów
Wypróbuj online!
Dzięki Emigna za
-3-1 bajtówi poprawkę!źródło
€
jako obun
iO
wektoryzacji. To również nie działa, ponieważ ostatnie 2 bajty zwrócą wartość true dla dowolnej listy o co najmniej 1 wartości, nawet jeśli zawierają tylko wartości fałszywe. Można to naprawić (i skrócić), używającZ
zamiast tego.€O
i dlatego poprzedni podejście nie działa z`º
)45
, czy to powinno zwrócić false.R , 79 bajtów
Wypróbuj online!
oblicza wszystkie wartości
y,z
zy<-(z=s-x)[z>0&z<x]
, a następnie oblicza wszystkie ich sumy zouter(y,y,"+")
. Daje to macierz kwadratową, w której wejścia poza przekątną są potencjalnie kwadratami, taky==z
jakby były na przekątnej. Dlategodiag(S)=0
ustawia przekątne na zero, które nie są idealnymi kwadratami, i sprawdzamy, czyany
elementS
jest%in%s
.źródło
SWI-Prolog , 88 bajtów
Wypróbuj online!
g(X)
jest regułą, która przyjmuje liczbę całkowitą jako parametr i wyświetla, czy jest to kwadratowy numer trójkąta (prawda / fałsz).źródło
JavaScript (ES7), 72 bajty
Zwraca
0
lub1
.Próbny
Pokaż fragment kodu
źródło
C, 113 bajtów
Zwraca,
0
jeśli liczba jest kwadratowym trójkątem, w1
przeciwnym razie.Wypróbuj online!
źródło
return(int)sqrt(n)==sqrt(n)
jest analizowanyreturn((int)sqrt(n))==sqrt(n)
w przeciwieństwie do bardziej oczywistychreturn(int)(sqrt(n)==sqrt(n))
? Jeśli nie, możesz wyjaśnić, cop
się dzieje?==
, więc wyrażenie jest analizowane tak,((int)sqrt(n))==sqrt(n)
jak zgadłeś.APL (Dyalog) , 49 bajtów
Wypróbuj online!
źródło
Galaretka , 15 bajtów
Wypróbuj online!
W jaki sposób?
źródło
Czysty ,
958886 bajtówWypróbuj online!
źródło
Rubinowy , 73 bajty
Wypróbuj online!
źródło
Julia 0.6 , 61 bajtów
Rozpocznij czytanie z funkcji
all
. Pierwszy argument jest anonimową funkcją sprawdzającą, czy pierwiastek kwadratowy z liczby jest liczbą całkowitą, jest to stosowane do każdej wartości w drugim argumencie. Pojedynczym argumentemany
jest aGenerator
z dwoma pętlami for, które dla każdej iteracji zawierają dane wyjścioweall
funkcji.Dzięki Mr Xcoder za -2 bajty.
Wypróbuj online!
źródło
Pyt , 63 bajty
Testuje wszystkie możliwe kombinacje y, z tak, że 1 ≤ z <y <x
Zwraca 1, jeśli x jest kwadratowym numerem trójkąta, w przeciwnym razie 0
Wypróbuj online!
źródło
MATL ,
201918 bajtówWypróbuj online! Zwraca 1 za falsey, 0 za prawda.
Testy do 500: wypróbuj online! (używając
H
zamiastG
). Środowisko wykonawcze jest kwadratowe pod względem wielkości wejściowej, dlatego wyliczanie zestawów testowych od1
do jestn
uruchamianeO(n^3)
, dlatego też wyliczanie wszystkich zestawów testowych do 1000 razy w TIO.Usuwanie
q
generuje sekwencję o pożądanej sekwencji jako podklasa, ale bez ograniczeń, żey
iz
ściśle mniejszy odx
. Przykładem jestx=18
,y=7
,z=18
.źródło
APL NARS, 340 bajtów
test
źródło