La forma N-Dimensional más simple que se puede crear para cualquier dimensión es un Simplex , y este es un conjunto de N + 1 puntos que están a la misma distancia entre sí.
Para 2 dimensiones, este es un triángulo equilátero, para 3 dimensiones, este es un tetraedro regular, en 4 dimensiones es la celda 5 y así sucesivamente.
El reto
Dada una dimensión entera N como entrada, genera una matriz / lista / pila / lo que sea de N puntos dimensionales que representan un simplex de esta dimensión. Es decir, N + 1 vértices que son iguales y distintos de cero entre sí.
Implementación de referencia en Lua
Ejemplos
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...]]
Notas
- La entrada es un número en cualquier formato estándar , y siempre será un número entero mayor que 1 y menor que 10
- Se permite la codificación rígida para la entrada de 1, pero nada más alto.
- Se permite un error razonable en la salida. Los problemas con la aritmética de coma flotante o trigonometría pueden ignorarse.
- Se permite cualquier transformación del simplex N dimensional, siempre y cuando siga siendo Regular y No cero.
- Las lagunas estándar están prohibidas.
- Este es el código de golf , por lo que gana menos bytes.
code-golf
arithmetic
Un taco
fuente
fuente

Respuestas:
Jalea , 11 bytes
Pruébalo en línea!
Obras de la generación de la matriz identidad de tamaño N y concatenar con la lista generada repitiendo N veces el singleton √ (N + 1) + 1 , divididos por N .
fuente
Python
7866 BytesSeguramente se puede mejorar,
especialmente en el manejo de n = 1 '' '. (¿Cómo es eso incluso un simplex?)Acabo de darme cuenta de que no es necesario. Probablemente se pueda mejorar aún ^^Pruébalo en línea!
[i*[0]+[1]+(n+~i)*[0]for i in range(n)]crea una matriz de identidad. Todos los puntos tienen distanciasqrt(2)unos de otros. (gracias a Rod por mejorar)Ahora necesitamos un
n+1enésimo punto con la misma distancia a todos los demás puntos. Tenemos que elegir(x, x, ... x).Distancia de
(1, 0, ... )a(x, x, ... x)essqrt((x-1)²+x²+...+x²). Si queremos unnsimplex dimensional, resulta sersqrt((x-1)²+(n-1)x²), ya que tenemos uno1yn-10s en el primer punto. Simplifica un poco:sqrt(x²-2x+1+(n-1)x²) = sqrt(nx²-2x+1)Queremos que esta distancia sea
sqrt(2).sqrt(2) = sqrt(nx²-2x+1)2 = nx²-2x+10 = nx²-2x-10 = x²-2/n*x+1/nResolviendo esta ecuación cuadrática (una solución, otra funciona bien también):
x = 1/n+sqrt(1/n²+1/n) = 1/n+sqrt((n+1)/n²) = 1/n+sqrt(n+1)/n = (1+sqrt(n+1))/nPonga eso en una lista de
ntiempos, ponga esa lista en una lista y únase a la matriz de identidad.-4 Bytes gracias a Alex Varga:
Multiplica cada vector por
n. Esto cambia la creación de la matriz de identidad alambda n:[i*[0]+[n]+(n+~i)*[0](la misma longitud) y elimina la división pornen el punto adicional, por lo que se convierten*[1+(n+1)**.5], guardando dos corchetes y el/n.fuente
Wolfram Language (Mathematica) , 46 bytes
Pruébalo en línea!
fuente
APL (Dyalog) ,
2018 bytes1 byte gracias a @ngn
Pruébalo en línea!
fuente
(∘.=⍨⍳)->∘.=⍨∘⍳⌹, pero no puedo bastante averiguar cómo podría funcionar ...{÷¯1+4○⍵*.5}⍪⍳∘.=⍳JavaScript (ES7), 70 bytes
Puerto de la respuesta Python de @ PattuX.
fuente
Wolfram Language (Mathematica), 205 bytes
Función simplex en Mathematica Comenzando desde
{0,0,...]},{1,0,0,...]}, Colocando el primer punto en el origen, Segundo punto en elxeje Tercer punto en elx,yplano, Cuarto punto en elx,y,zespacio, etc. Esta progresión reutiliza todos los puntos anteriores, agregando un nuevo punto a la vez en una nueva dimensiónVerificación
fuente
Octava , 31 bytes
Guardado 2 bytes gracias a Luis Mendo .
Pruébalo en línea!
fuente
ones(1,n)por~~(1:n)Ruby , 55 bytes
en lugar de devolver magnitudes similares para todas las dimensiones y usar la fórmula
(1+(n+1)**0.5)/nescalo por un factor densimplificar la fórmula para(1+(n+1)**0.5)Pruébalo en línea!
sin golf en el programa de prueba
Una función lambda que toma
ncomo argumento y devuelve una matriz de matrices.salida
fuente
Pari / GP , 37 bytes
Pruébalo en línea!
fuente
R , 38 bytes
Pruébalo en línea!
fuente