Un entier positif x est un triangle carré ssi il y a deux entiers positifs différents, y et z , qui sont plus petits que x tels que toutes les sommes
x + y
x + z
y + z
sont des carrés parfaits.
Par exemple, 30 est un nombre de triangle carré car
30 + 6 = 6 2
30 + 19 = 7 2
6 + 19 = 5 2
Votre tâche consiste à écrire du code qui prend en entrée un entier positif et détermine s'il s'agit ou non d'un nombre triangulaire carré. Vous devez sortir l'une des deux valeurs distinctes, une si l'entrée est un nombre de triangle carré et l'autre sinon.
Il s'agit de code-golf donc les réponses seront notées en octets avec moins d'octets mieux.
Cas de test
Voici tous les nombres de triangles carrés inférieurs à 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
Assistant de blé
la source
la source
y < x
etz < x
ou celay+z < x
?Réponses:
Haskell , 62 octets
Essayez-le en ligne!
la source
Gelée , 12 octets
Essayez-le en ligne!
Comment ça marche
la source
Python 2 ,
938786 octets-1 octet grâce à Dennis
Essayez-le en ligne!
la source
Brachylog , 19 octets
Essayez-le en ligne!
Aussi 19 octets:
~hṪ>₁ℕ₁ᵐ≜{⊇Ċ+}ᶠ~^₂ᵐ
Explication
la source
PowerShell , 150 octets
Essayez-le en ligne! ou vérifier certains cas de test
Prend des informations
$x
. Établit unfilter
(ici équivalent à une fonction) sur deux entrées$a,$b
, qui renvoie un vrai booléen si le[math]::sqrt
de$a+$b
est-eq
ual auFloor
de cette racine carrée (c'est-à-dire, c'est une racine carrée entière).Le reste est la viande du programme. Nous doublons la boucle de
1
à$x-1
. Chaque itération, nous vérifions si$y
est-n
ote
qual à$_
(c. -à- $ z), et si la fonction est vrai pour toutes les combinaisons de$x
,$y
et$_
. Si c'est,$o
est incrémenté de un (ce qui le rend non nul).Enfin, à la fin, nous double-booléen-négation
$o
, qui se transforme0
enFalse
et non nul enTrue
. Cela reste sur le pipeline et la sortie est implicite.la source
Haskell ,
7569 octetsEssayez-le en ligne!
Pourrait probablement être amélioré si quelqu'un connaît un moyen plus court de tester si un nombre est carré. Je suis sûr que l'utilisation
sqrt
finit par être plus longue, car ellefloor
transforme le résultat en un type intégral, vous devez donc mettrefromIntegral
quelque part avant de pouvoir le comparer à l'original.EDIT: Merci @Wheat Wizard pour avoir décollé 6 octets!
la source
JavaScript (ES7),
7571 octetsla source
05AB1E , 18 octets
Essayez-le en ligne!
Merci à Emigna pour
-3-1 octetet un correctif!la source
€
comme des deuxn
etO
vectorise. Cela ne fonctionne pas non plus car les 2 derniers octets renverront true pour toute liste avec au moins 1 valeur, même si elle ne contient que de fausses valeurs. Cela peut être corrigé (et raccourci) en utilisant à laZ
place.€O
et c'est pourquoi l'approche précédente a fait le travail avec`º
)45
, cela devrait retourner faux.R , 79 octets
Essayez-le en ligne!
calcule toutes les valeurs de
y,z
avecy<-(z=s-x)[z>0&z<x]
, puis calcule toutes leurs sommes avecouter(y,y,"+")
. Cela donne une matrice carrée où les entrées hors diagonale sont potentiellement des carrés, commey==z
seulement si elles sont sur la diagonale. Par conséquent,diag(S)=0
met les diagonales à zéro, qui ne sont pas des carrés parfaits, et nous testons pour voir si l'any
élément deS
est%in%s
.la source
SWI-Prolog , 88 octets
Essayez-le en ligne!
g(X)
est la règle qui prend un entier comme paramètre et affiche s'il s'agit d'un triangle carré (vrai / faux).la source
JavaScript (ES7), 72 octets
Renvoie
0
ou1
.Démo
Afficher l'extrait de code
la source
C, 113 octets
Renvoie
0
si le nombre est un triangle carré,1
sinon.Essayez-le en ligne!
la source
return(int)sqrt(n)==sqrt(n)
est analyséereturn((int)sqrt(n))==sqrt(n)
par opposition à la plus évidentereturn(int)(sqrt(n)==sqrt(n))
? Si non, pouvez-vous expliquer ce quip
se passe?==
, donc l'expression est analysée((int)sqrt(n))==sqrt(n)
comme vous l'avez deviné.APL (Dyalog) , 49 octets
Essayez-le en ligne!
la source
Gelée , 15 octets
Essayez-le en ligne!
Comment?
la source
Propre ,
958886 octetsEssayez-le en ligne!
la source
Rubis , 73 octets
Essayez-le en ligne!
la source
Julia 0.6 , 61 octets
Commencez à lire à partir de la fonction
all
. Le premier argument est une fonction anonyme vérifiant que la racine carrée d'un nombre est un entier, ceci est appliqué à chaque valeur du deuxième argument. Le seul argument deany
est unGenerator
avec deux boucles for, qui pour chaque itération contient la sortie de laall
fonction.Merci à M. Xcoder pour -2 octets.
Essayez-le en ligne!
la source
Pyt , 63 octets
Teste toutes les combinaisons possibles de y, z telles que 1≤z <y <x
Renvoie 1 si x est un triangle carré, 0 sinon
Essayez-le en ligne!
la source
MATL ,
201918 octetsEssayez-le en ligne! Renvoie 1 pour falsey, 0 pour véridique.
Testcases jusqu'à 500: essayez-le en ligne! (en utilisant
H
au lieu deG
). Le temps d'exécution est quadratique dans la taille d'entrée, donc l'énumération des cas de test de1
àn
s'exécuteO(n^3)
, c'est pourquoi l'énumération de tous les cas de test jusqu'à 1000 fois sur TIO.La suppression
q
génère une séquence avec la séquence souhaitée en tant que sous-ensemble, mais sans la contrainte quiy
etz
être strictement inférieure àx
. Un exemple estx=18
,y=7
,z=18
.la source
APL NARS, 340 octets
tester
la source