Un entero positivo x es un número de triángulo cuadrado si hay dos enteros positivos diferentes, y y z , que son más pequeños que x, de modo que todas las sumas
x + y
x + z
y + z
Son cuadrados perfectos.
Por ejemplo, 30 es un número de triángulo cuadrado porque
30 + 6 = 6 2
30 + 19 = 7 2
6 + 19 = 5 2
Su tarea es escribir algún código que tome un entero positivo como entrada y determine si es o no un número de triángulo cuadrado. Debe generar uno de dos valores distintos, uno si la entrada es un número de triángulo cuadrado y el otro en caso contrario.
Este es el código de golf, por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Casos de prueba
Aquí están todos los números de triángulos cuadrados menores 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
Asistente de trigo
fuente
fuente
y < x
yz < x
o quey+z < x
?Respuestas:
Haskell , 62 bytes
Pruébalo en línea!
fuente
Jalea , 12 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 2 ,
938786 bytes-1 byte gracias a Dennis
Pruébalo en línea!
fuente
Brachylog , 19 bytes
Pruébalo en línea!
También 19 bytes:
~hṪ>₁ℕ₁ᵐ≜{⊇Ċ+}ᶠ~^₂ᵐ
Explicación
fuente
PowerShell , 150 bytes
Pruébalo en línea! o verificar algunos casos de prueba
Toma entrada
$x
. Establece unfilter
(aquí equivalente a una función) en dos entradas$a,$b
, que devuelve un valor booleano verdadero si la[math]::sqrt
de$a+$b
es-eq
ual a laFloor
de esa raíz cuadrada (es decir, es una raíz cuadrada entera).El resto es la carne del programa. Doblamos para el ciclo de arriba
1
a$x-1
. Cada iteración, se comprueba si$y
es-n
ote
qual a$_
(es decir, $ z), y si la función es cierto para todas las combinaciones de$x
,$y
y$_
. Si es así,$o
se incrementa en uno (lo que hace que no sea cero).Finalmente, al final, negamos el doble booleano
$o
, que se convierte0
enFalse
y no en ceroTrue
. Eso queda en la tubería y la salida es implícita.fuente
Haskell ,
7569 bytesPruébalo en línea!
Probablemente podría mejorarse si alguien conoce una forma más corta de probar si un número es cuadrado. Estoy bastante seguro de que el uso
sqrt
termina siendo más largo porquefloor
convierte el resultado en un tipo integral, por lo que debe colocarlofromIntegral
en algún lugar antes de poder compararlo con el original.EDITAR: ¡Gracias @Wheat Wizard por despegar 6 bytes!
fuente
JavaScript (ES7),
7571 bytesfuente
05AB1E , 18 bytes
Pruébalo en línea!
¡Gracias a Emigna por
-3-1 bytey una solución!fuente
€
como ambosn
yO
vectoriza. Esto tampoco funciona, ya que los 2 bytes finales devolverán verdadero para cualquier lista con al menos 1 valor, incluso si solo contiene valores falsos. Esto se puede arreglar (y acortar) usando en suZ
lugar.€O
y por eso el enfoque anterior hizo el trabajo con`º
)45
, que debería devolver falso.R , 79 bytes
Pruébalo en línea!
calcula todos los valores de
y,z
withy<-(z=s-x)[z>0&z<x]
, luego calcula todas sus sumas conouter(y,y,"+")
. Esto produce una matriz cuadrada donde las entradas fuera de la diagonal son potencialmente cuadrados, comoy==z
solo si están en la diagonal. Por lo tanto,diag(S)=0
establece las diagonales en cero, que no son cuadrados perfectos, y probamos para ver si elany
elemento deS
es%in%s
.fuente
SWI-Prolog , 88 bytes
Pruébalo en línea!
g(X)
es la regla que toma un número entero como parámetro y muestra si es un número de triángulo cuadrado (verdadero / falso).fuente
JavaScript (ES7), 72 bytes
Devoluciones
0
o1
.Manifestación
Mostrar fragmento de código
fuente
C, 113 bytes
Devuelve
0
si el número es triángulo cuadrado, de lo1
contrario.Pruébalo en línea!
fuente
return(int)sqrt(n)==sqrt(n)
se está analizandoreturn((int)sqrt(n))==sqrt(n)
en lugar de lo más obvioreturn(int)(sqrt(n)==sqrt(n))
. Si no, ¿puedes explicar quép
está haciendo?==
, por lo que la expresión se analiza como((int)sqrt(n))==sqrt(n)
adivinó.APL (Dyalog) , 49 bytes
Pruébalo en línea!
fuente
Jalea , 15 bytes
Pruébalo en línea!
¿Cómo?
fuente
Limpio ,
958886 bytesPruébalo en línea!
fuente
Ruby , 73 bytes
Pruébalo en línea!
fuente
Julia 0.6 , 61 bytes
Comience a leer desde la función
all
. El primer argumento es una función anónima que comprueba que la raíz cuadrada de un número es un número entero, esto se aplica a cada valor en el segundo argumento. El argumento único paraany
es unGenerator
con dos bucles for, que para cada iteración contiene la salida de laall
función.Gracias al Sr. Xcoder por -2 bytes.
Pruébalo en línea!
fuente
Pyt , 63 bytes
Prueba todas las combinaciones posibles de y, z de modo que 1≤z <y <x
Devuelve 1 si x es un número de triángulo cuadrado, 0 de lo contrario
Pruébalo en línea!
fuente
MATL ,
201918 bytesPruébalo en línea! Devuelve 1 para falsey, 0 para verdadero.
Casos de prueba hasta 500: ¡ Pruébelo en línea! (usando en
H
lugar deG
). El tiempo de ejecución es cuadrático en el tamaño de entrada, por lo que enumerar los casos de prueba de1
a sen
ejecutaO(n^3)
, razón por la cual se enumeran todos los casos de prueba hasta 1000 veces en TIO.La eliminación
q
genera una secuencia con la secuencia deseada como un subconjunto, pero sin la restricción de quey
yz
sea estrictamente menor quex
. Un ejemplo esx=18
,y=7
,z=18
.fuente
NARS APL, 340 bytes
prueba
fuente