Définition
Un "triangle entier" est un triangle avec des coordonnées entières. Par exemple, le triangle suivant est un triangle entier:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650.
Tâche
Le but de ce défi est de compter tous les triangles entiers (jusqu'à la congruence) avec un périmètre inférieur à n.
Entrée et sortie
L'argument sera donné sous forme d'entier et la sortie devrait être le nombre de triangles dont le périmètre est strictement inférieur à l'argument.
Exemples
Le plus petit triangle entier par périmètre est congru à
(0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414
Les prochains plus petits sont:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650,
(0, 0), (0, 2), (1, 1) with perimeter 2 + 2sqrt(2) ≈ 4.828,
(0, 0), (0, 2), (1, 0) with perimeter 3 + sqrt(5) ≈ 5.236, and
(0, 0), (1, 2), (2, 1) with perimeter sqrt(2) + 2sqrt(5) ≈ 5.886
Cas de test:
a(1) = 0
a(2) = 0
a(3) = 0
a(4) = 1
a(5) = 3
a(6) = 5
a(7) = 11
a(8) = 18
a(9) = 29
a(10) = 44
a(12) = 94
a(20) = 738
a(30) = 3756
a(40) = 11875
J'ai des coordonnées pour chacun des triangles de ce Gist .
Avertissements
Notez que deux triangles non congruents peuvent avoir le même périmètre:
(0, 0), (0, 3), (3, 0) and (0, 0), (0, 1), (3, 4) both have perimeter 6 + 3sqrt(2).
Gardez également à l’esprit que l’inégalité est stricte ; le triangle pythagoricien 3-4-5 doit être compté par un (13), pas un (12).
Notation
Voici le code-golf : le code le plus court gagne!
la source
Réponses:
Gelée ,
28272523 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Gelée ,
3833 octets-1 merci à Erik l'Outgolfer (inverser
SP¬+÷/E$
en utilisantSẠ>÷/E$
et utiliserÇÐf
plutôt queÇÐḟ
) -1 merci à Mr. Xcoder (pas besoin d'aplatir avant le tri)-2 merci à Mr. Xcoder (
S<¥Ðf³L
->S€<³S
)-1 voler un truc à une révision antérieure de la réponse de Dennis (
ṗ2’Œc
->p`⁺’
- cas plus redondants mais golfeur!)Un programme complet prenant un entier et imprimant le résultat.
Essayez-le en ligne!(trop lent pour terminer les cas de test 20+ en moins de 60 ans)
Comment?
la source
[(a+c)×(b+d)]
->(a+c)×(b+d)
,[c÷a,d÷b]
->[a÷c,b÷d]
,c÷a==d÷b
->a÷c==b÷d
," c÷a==d÷b
->" a÷c==b÷d
. Fonction .nan
.SP¬
et n'abuse pas réellement de la division par des résultats nuls (je suppose que cela pourrait être explicite avec un réel ou)¬+
par<
. (EDIT: vous n'avez pas besoin de remplacerP
parẠ
, car vous n'utilisez que des coordonnées non négatives.)7
retourne21
par exemple)JavaScript (ES7), 157 octets
Cas de test
Seules de petites valeurs peuvent être calculées avec la taille de pile par défaut de la plupart des moteurs JS.
Afficher l'extrait de code
Version non récursive, 165 octets
Cas de test
Cette version fonctionne également pour un (30) et un (40) , mais cela prendrait trop de temps pour l'extrait.
Afficher l'extrait de code
la source
Julia 0,6 , 135 octets
Itérer sur les points non d'origine possibles pour constituer le triangle, les représenter sous forme de nombres complexes, trier les longueurs carrées et les conserver dans un ensemble pour vérifier la congruence. Évite les points colinéaires en vérifiant que l'angle entre leurs nombres complexes n'est pas nul. Il renvoie ensuite la longueur de l'ensemble. Il est plus court d'utiliser directement les longueurs, mais vous obtenez la mauvaise réponse
a(40)
. La solution est trop lente pour être exécutée ena(40)
raison d'un avertissement de dépréciation, j'ai donc un lien vers une version plus rapide également.Essayez-le en ligne!
Version plus rapide et plus longue avec dépréciation évitée. Essayez-le en ligne! Utilise
sqrt.(g)
à la place de obsolète√g
pour la racine carrée élément par élément.la source
Nettoyer ,
227... 143 octetsEssayez-le en ligne!
Détecte les triangles congruents en comparant les trois valeurs qui s'additionnent pour faire le périmètre et les points colinéaires en vérifiant que les deux plus petites de ces valeurs ne s'additionnent pas à la troisième.
Voici une version qui utilise une approche plus rapide et plus gourmande en mémoire: essayez-la en ligne!
la source
Start = @ 12.0
Je n'obtiens aucune sortie, est-ce que je fais quelque chose de mal?