Disons que vous avez un effet positif entier N . Construisez d'abord un polygone régulier , qui a N sommets, avec la distance entre les sommets voisins étant 1. Ensuite, connectez les lignes de chaque sommet à tous les autres sommets. Enfin, calculez la longueur de toutes les lignes résumées ensemble.
Exemple
Étant donné l'entrée N = 6 , construisez un hexagone avec des lignes reliant chaque sommet aux autres sommets.
Comme vous pouvez le voir, il y a un total de 6 lignes de bordure (longueur = 1), 3 lignes qui ont le double de la longueur de bordure (longueur = 2) et 6 autres lignes que nous, en utilisant le théorème de Pythagore, pouvons calculer la longueur pour , lequel est
Si nous additionnons les longueurs des lignes, nous obtenons (6 * 1) + (3 * 2) + (6 * 1,732) = 22,392 .
Information additionnelle
Comme les structures avec 2 sommets ou moins ne sont pas considérées comme des polygones, affichez 0 (ou NaN
, puisque la distance entre un seul sommet n'a pas beaucoup de sens) pour N = 1, car un seul sommet ne peut pas être connecté à d'autres sommets, et 1 pour N = 2, car deux sommets sont reliés par une seule ligne.
Contribution
Un entier N, dans n'importe quel format raisonnable.
Production
La longueur de toutes les lignes résumées ensemble, précise à au moins 3 décimales, soit sous forme de retour de fonction, soit directement imprimée dans stdout
.
Règles
- Les failles standard sont interdites.
- C'est le code-golf , donc le code le plus court en octets, dans n'importe quelle langue, gagne.
Bonne chance!
Cas de test
(Input) -> (Output)
1 -> 0 or NaN
2 -> 1
3 -> 3
5 -> 13.091
6 -> 22.392
1
? Mon entrée actuelle retourneraitnan
plutôt que zéro par exemple, et nécessiterait juste un boîtier spécial pour cela.nan
va aussi, car la distance entre un seul sommet n'a pas beaucoup de sens de toute façon.n=1
je pense.N
, car les sorties deviennent plus grandes et les flottants moins précis.Réponses:
Python 3
(avec sympy ),61 60 58 5448 octets-6 (peut-être même -10 si nous n'avons pas besoin de gérer
n=1
) grâce à xnor (simplification trigonométrique supplémentaire et golf supplémentaire pour gérer le cas de bord de 1 et enregistrer les parenthèses en déplaçant unefloat
distribution (désormais inutile) ).J'espèrebattable sans bibliothèquestierces? Oui!!maispermet de faire avancer les choses ...Essayez-le en ligne!
Cela utilise une formule pour la somme des longueurs si un polygone est inscrit à l'intérieur d'un cercle unité,
n*cot(pi/2/n)/2
et ajuste le résultat à un pour la longueur du côté étant un en divisant par le péché de cette longueur de cordonsin(pi/n)
.La première formule s'acquiert en considérant les
n-1
longueurs de cordons de toutes les diagonales émanant d'un coin qui sont de longueurssin(pi/n)
(encore),,sin(2*pi/n)
...,sin((n-1)pi/n)
. La somme de ceci estcot(pi/2/n)
qu'il y a desn
coins donc nous multiplions parn
, mais ensuite nous avons compté deux fois tous les cordons, donc nous divisons par deux.Le résultat
n*cot(pi/2/n)/2/sin(pi/n)
a ensuite été simplifié par xnor ton/2/(1-cos(pi/n))
(holding forn>1
)... cela (tant que la précision est acceptable) ne nécessite plus
sympy
sur le intégrémath
module intégré (math.pi=3.141592653589793
).la source
n/2/(1-cos(pi/n))
.0.25
pourn=1
- mais le boîtier spécial peut également être plus court ...)1/4
le résultat pourn=1
. Il peut être corrigé avec1%n*
. En outre, les parens peuvent être enregistrés en déplaçant l'float
intérieur versfloat(1-cos(pi/n))
. Je ne connais pas beaucoup sympy, mais peut-être y a-t-il un moyen arithmétique de forcer un flotteur.float
mouvement). sympy génère une expression - par exemple, sin=6
aucun cast ne donne une expression avec une représentation3.0/(-sqrt(3)/2 + 1)
- il peut y avoir un moyen plus court mais je ne le sais pas encore.Python , 34 octets
Essayez-le en ligne!
Utilise la formule
n/2/(1-cos(pi/n))
simplifiée de Jonathan Allan . Neil a économisé 10 octets en notant que Python peut calculer les racines de l'unité en tant que puissances fractionnaires de1j
.Python sans importations n'a pas de fonctions trigonométriques intégrées,,
pi
oue
. Pour fairen=1
donner0
plutôt que0.25
, on préfère1%n*
.Une version plus longue utilisant uniquement des pouvoirs de nombre naturel:
Essayez-le en ligne!
la source
lambda n:1%n*n/(1-(1j**(2/n)).real)/2
abs()
passe cependant.MATL ,
1615 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test .
Cela utilise un commit qui a introduit la fonction FFT (Fast Fourier Transform), et qui est antérieur au défi de 8 jours.
Explication
Le code utilise cette astuce (adaptée à MATL) pour générer les racines de l'unité. Ceux-ci donnent les positions des sommets sous forme de nombres complexes, sauf que la distance entre les sommets consécutifs n'est pas normalisée à 1. Pour résoudre ce problème, après avoir calculé toutes les distances par paires, le programme les divise par la distance entre les sommets consécutifs.
la source
Sauterelle, 25 primitives (11 composants, 14 fils)
J'ai lu un meta post sur les programmes dans GH et LabVIEW, et je suis des instructions similaires pour mesurer un langage visuel.
Imprimez
<null>
pour N =0, 1, 2
, carPolygon Primitive
vous ne pouvez pas générer un polygone avec 2 bords ou moins et vous obtiendrez une liste de lignes vide.Composants de gauche à droite:
Side count
curseur: entréePolygon Primitive
dessine un polygone en fonction du rayon, nous devons mettre la forme à l'échellela source
Mathematica, 26 octets
utilise la formule de @Jonathan Allan
Essayez-le en ligne!
-1 octet junghwan min
la source
N@Cot[Pi/2/#]/2Csc[Pi/#]#&
depuis1/sin(x) = csc(x)
.5Csc[x=Pi/#]Cot[x/2]#&
Haskell , 27 octets
Essayez-le en ligne!
Je viens de plonger dans Haskell, donc cela s'avère être un bon golf pour débutant (c'est-à-dire copier la formule à partir d'autres réponses).
J'ai également essayé de mettre
$
quelque part, mais le compilateur continue de me crier dessus, c'est donc le meilleur que j'ai. : Pla source
Gelée ,
131211 octetsUtilise la formule de Jonathan Allan (et merci à lui d'avoir économisé 2 octets)
Essayez-le en ligne!
J'ai toujours été assez fasciné par Jelly, mais je ne l'ai pas beaucoup utilisé, donc ce n'est peut-être pas la forme la plus simple.
la source
ɓ
pour aligner votre lien d'aide comme ceci:ØP÷ÆẠCḤɓn1×÷
’
et-logique etȧ
:ØP÷ÆẠCḤɓ’ȧ÷
:)Javascript (ES6), 36 octets
Port de @ JonathanAllan's Python 3 answer
la source