Um número inteiro positivo x é um número de triângulo quadrado se houver dois números inteiros positivos diferentes, y e z , menores que x, de modo que todas as somas
x + y
x + z
y + z
são quadrados perfeitos.
Por exemplo 30 é um número de triângulo quadrado porque
30 + 6 = 6 2
30 + 19 = 7 2
6 + 19 = 5 2
Sua tarefa é escrever um código que use um número inteiro positivo como entrada e determine se é ou não um número de triângulo quadrado. Você deve gerar um de dois valores distintos, um se a entrada for um número de triângulo quadrado e o outro caso contrário.
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
Aqui estão todos os números de triângulos quadrados abaixo de 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
Assistente de Trigo
fonte
fonte
y < x
ez < x
ou aquiloy+z < x
?Respostas:
Haskell , 62 bytes
Experimente online!
fonte
Gelatina , 12 bytes
Experimente online!
Como funciona
fonte
Python 2 ,
938786 bytes-1 byte graças a Dennis
Experimente online!
fonte
Braquilog , 19 bytes
Experimente online!
Também 19 bytes:
~hṪ>₁ℕ₁ᵐ≜{⊇Ċ+}ᶠ~^₂ᵐ
Explicação
fonte
PowerShell , 150 bytes
Experimente online! ou Verifique alguns casos de teste
Recebe entrada
$x
. Estabelece umfilter
(aqui equivalente a uma função) em duas entradas$a,$b
, que retorna um verdadeiro booleana sse o[math]::sqrt
de$a+$b
é-eq
ual àFloor
de que raiz quadrada (ou seja, é uma raiz quadrada inteiro).O resto é a carne do programa. Dobramos o loop for de
1
até$x-1
. A cada iteração, verificamos se qual$y
é-n
ote
qual$_
(ou seja, $ z) e se a função é verdadeira para todas as combinações de$x
,$y
e$_
. Se for,$o
é incrementado por um (o que o torna diferente de zero).Finalmente, no final, negamos o valor booleano
$o
, que se transforma0
emFalse
e não em zeroTrue
. Isso é deixado no pipeline e a produção está implícita.fonte
Haskell ,
7569 bytesExperimente online!
Provavelmente poderia ser melhorado se alguém souber uma maneira mais curta de testar se um número é quadrado. Tenho certeza de que o uso
sqrt
acaba sendo mais longo, porquefloor
transforma o resultado em um tipo integral, para que você precise colocarfromIntegral
em algum lugar antes de poder comparar com o original.EDIT: Obrigado @Wheat Wizard para tirar 6 bytes!
fonte
JavaScript (ES7),
7571 bytesfonte
05AB1E , 18 bytes
Experimente online!
Graças a Emigna por
-3-1 bytee uma correção!fonte
€
como ambosn
eO
vetoriza. Isso também não funciona, pois os 2 bytes finais retornarão true para qualquer lista com pelo menos 1 valor, mesmo que contenha apenas valores falsos. Isso pode ser corrigido (e reduzido) usando-oZ
.€O
e é por isso que a abordagem anterior fez um trabalho com`º
)45
, que retorne false.R , 79 bytes
Experimente online!
calcula todos os valores de
y,z
comy<-(z=s-x)[z>0&z<x]
e calcula todas as suas somas comouter(y,y,"+")
. Isso gera uma matriz quadrada em que as entradas fora da diagonal são potencialmente quadrados, comoy==z
se estivessem na diagonal. Portanto,diag(S)=0
define as diagonais como zero, que não são quadrados perfeitos, e testamos para ver se oany
elemento deS
é%in%s
.fonte
SWI-Prolog , 88 bytes
Experimente online!
g(X)
é a regra que usa um número inteiro como parâmetro e gera se é um número de triângulo quadrado (verdadeiro / falso).fonte
JavaScript (ES7), 72 bytes
Retorna
0
ou1
.Demo
Mostrar snippet de código
fonte
C, 113 bytes
Retorna
0
se o número for triângulo quadrado,1
caso contrário.Experimente online!
fonte
return(int)sqrt(n)==sqrt(n)
está sendo analisadoreturn((int)sqrt(n))==sqrt(n)
em oposição ao mais óbvioreturn(int)(sqrt(n)==sqrt(n))
? Se não, você pode explicar o quep
está fazendo?==
, portanto, a expressão é analisada((int)sqrt(n))==sqrt(n)
como você adivinhou.APL (Dyalog) , 49 bytes
Experimente online!
fonte
Gelatina , 15 bytes
Experimente online!
Quão?
fonte
Limpo ,
958886 bytesExperimente online!
fonte
Ruby , 73 bytes
Experimente online!
fonte
Julia 0,6 , 61 bytes
Comece a ler a partir da função
all
. O primeiro argumento é uma função anônima que verifica se a raiz quadrada de um número é um número inteiro; isso é aplicado a cada valor no segundo argumento. O argumento único paraany
é aGenerator
com dois para loops, que para cada iteração contém a saída daall
função.Obrigado ao Sr. Xcoder por -2 bytes.
Experimente online!
fonte
Pyt , 63 bytes
Testa todas as combinações possíveis de y, z, de modo que 1≤z <y <x
Retorna 1 se x for um número de triângulo quadrado, 0 caso contrário
Experimente online!
fonte
MATL ,
201918 bytesExperimente online! Retorna 1 para falsey, 0 para verdade.
Testes até 500: Experimente online! (usando em
H
vez deG
). O tempo de execução é quadrático no tamanho da entrada, portanto, enumera os casos de teste de1
paran
é executadoO(n^3)
, e é por isso que enumerar todos os casos de teste com até 1000 vezes no TIO.Removendo
q
gera uma sequência com a sequência desejada como um subconjunto, mas sem a limitação de quey
ez
ser estritamente menor do quex
. Um exemplo éx=18
,y=7
,z=18
.fonte
NARS APL, 340 bytes
teste
fonte