La forme N-dimensionnelle la plus simple que l'on puisse créer pour n'importe quelle dimension est un Simplex , et c'est un ensemble de N + 1 points qui sont tous à égale distance les uns des autres.
Pour 2 dimensions, c'est un triangle équilatéral, pour 3 dimensions, c'est un tétraèdre régulier, à 4 dimensions est le 5-Cell et ainsi de suite.
Le défi
Étant donné une dimension entière N en entrée, sortez un tableau / liste / pile / n'importe lequel des N points dimensionnels qui représentent un simplexe de cette dimension. Autrement dit, N + 1 sommets qui sont à distance égale et non nulle l'un de l'autre.
Implémentation de référence dans Lua
Exemples
1 -> [[0], [1]]
2 -> [[0, 0], [1, 0], [0.5, 0.866...]]
4 -> [[0, 0, 0, 0], [1, 0, 0, 0], [0.5, 0.866..., 0, 0], [0.5, 0.288..., 0.816..., 0], [0.5, 0.288..., 0.204..., 0.790...]]
Remarques
- L'entrée est un nombre dans n'importe quel format standard et sera toujours un entier supérieur à 1 et inférieur à 10
- Le codage en dur est autorisé pour une entrée de 1, mais rien de plus élevé.
- Une erreur raisonnable est autorisée dans la sortie. Les problèmes d'arithmétique en virgule flottante ou de trig peuvent être ignorés.
- Toute transformation du simplexe à N dimensions est autorisée, tant qu'elle reste régulière et non nulle.
- Les échappatoires standard sont interdites.
- Il s'agit de code-golf , donc le moins d'octets gagne.
code-golf
arithmetic
ATaco
la source
la source
Réponses:
Gelée , 11 octets
Essayez-le en ligne!
Travaux de génération de la matrice d'identité de taille N et la concaténation avec la liste générée par la répétition N fois le singleton √ (N + 1) + 1 , divisé par N .
la source
Python
7866 octetsPeut certainement être amélioré, en
particulier lors de la manipulation de n = 1 ''. (Comment est-ce même un simplexe?)Je viens de réaliser que ce n'est pas nécessaire. Peut probablement encore être amélioré ^^Essayez-le en ligne!
[i*[0]+[1]+(n+~i)*[0]for i in range(n)]
crée une matrice d'identité. Tous les points sont éloignés lessqrt(2)
uns des autres. (merci à Rod pour l'amélioration)Maintenant, nous avons besoin d'un
n+1
point -th avec la même distance à tous les autres points. Nous devons choisir(x, x, ... x)
.La distance de
(1, 0, ... )
à(x, x, ... x)
estsqrt((x-1)²+x²+...+x²)
. Si nous voulons unn
simplexe dimensionnel, cela s'avère êtresqrt((x-1)²+(n-1)x²)
, comme nous avons un1
etn-1
0
s dans le premier point. Simplifiez un peu:sqrt(x²-2x+1+(n-1)x²) = sqrt(nx²-2x+1)
Nous voulons que cette distance soit
sqrt(2)
.sqrt(2) = sqrt(nx²-2x+1)
2 = nx²-2x+1
0 = nx²-2x-1
0 = x²-2/n*x+1/n
Résoudre cette équation quadratique (une solution, l'autre fonctionne bien aussi):
x = 1/n+sqrt(1/n²+1/n) = 1/n+sqrt((n+1)/n²) = 1/n+sqrt(n+1)/n = (1+sqrt(n+1))/n
Mettez cela dans une liste
n
fois, mettez cette liste dans une liste et joignez-vous à la matrice d'identité.-4 octets grâce à Alex Varga:
Multipliez chaque vecteur par
n
. Cela modifie la création de la matrice d'identité enlambda n:[i*[0]+[n]+(n+~i)*[0]
(même longueur) et supprime la division parn
au point supplémentaire, ce qui devientn*[1+(n+1)**.5]
, en enregistrant deux crochets et le/n
.la source
Wolfram Language (Mathematica) , 46 octets
Essayez-le en ligne!
la source
APL (Dyalog) ,
2018 octets1 octet grâce à @ngn
Essayez-le en ligne!
la source
(∘.=⍨⍳)
->∘.=⍨∘⍳
⌹
mais je n'arrive pas à comprendre comment cela pourrait fonctionner ...{÷¯1+4○⍵*.5}⍪⍳∘.=⍳
JavaScript (ES7), 70 octets
Port de la réponse Python de @ PattuX.
la source
Wolfram Language (Mathematica), 205 octets
Fonction simplexe dans Mathematica À partir de
{0,0,...]},{1,0,0,...]}
, Placement du premier point à l'origine, Deuxième point sur l'x
axe Troisième point dans lex,y
plan, Quatrième point dans l'x,y,z
espace, etc. Cette progression réutilise tous les points précédents, en ajoutant un nouveau point à la fois dans une nouvelle dimensionVérification
la source
Octave , 31 octets
Enregistré 2 octets grâce à Luis Mendo .
Essayez-le en ligne!
la source
ones(1,n)
par~~(1:n)
Rubis , 55 octets
plutôt que de renvoyer des grandeurs similaires pour toutes les dimensions et d'utiliser la formule
(1+(n+1)**0.5)/n
I pour augmenter le facteur den
simplifier la formule en(1+(n+1)**0.5)
Essayez-le en ligne!
non golfé dans le programme de test
Une fonction lambda prenant
n
comme argument et renvoyant un tableau de tableaux.production
la source
Pari / GP , 37 octets
Essayez-le en ligne!
la source
R , 38 octets
Essayez-le en ligne!
la source