Introducción
En matemáticas, un número poligonal es un número representado como puntos o guijarros dispuestos en la forma de un polígono regular. Los puntos se consideran alfa (unidades). Estos son un tipo de números figurados bidimensionales.
El número 10, por ejemplo, se puede organizar como un triángulo:
* ** *** ****
Pero 10 no se puede organizar como un cuadrado. El número 9, por otro lado, puede ser:
*** *** ***
Algunos números, como 36, se pueden organizar como un cuadrado y un triángulo:
****** * ****** ** ****** *** ****** **** ****** ***** ****** ******
Por convención, 1 es el primer número poligonal para cualquier número de lados. La regla para agrandar el polígono al siguiente tamaño es extender dos brazos adyacentes en un punto y luego agregar los lados adicionales necesarios entre esos puntos. En los siguientes diagramas, cada capa adicional se muestra en rojo.
Números triangulares
Números cuadrados:
Los polígonos con mayor número de lados, como los pentágonos y los hexágonos, también se pueden construir de acuerdo con esta regla, aunque los puntos ya no formarán una red perfectamente regular como la anterior.
Números Pentagonales:
Números Hexagonales:
Fuente: Wikipedia
Tu tarea
Dado un número entero positivo N (1 <= N <= 1000), imprima cada tipo de Número poligonal N está comenzando desde los números triangulares hasta los números icosagonales (20 gon).
Por ejemplo, el número 10 es un número triangular y un número decagonal, por lo que la salida debería ser algo así (puede elegir su propio formato de salida, pero debería verse más o menos así):
3 10
Casos de prueba
1 -> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 -> (None)
3 -> 3
6 -> 3 6
36 -> 3 4 13
Como referencia, el n
número k
número - gonal es:
Crédito: xnor
Recuerde, este es el código de golf , por lo que gana el código con la menor cantidad de bytes.
fuente
n
número k-gonal es(k-2)*n*(n-1)/2 + n
.Respuestas:
Python 3, 68 bytes
Para cada número potencial de lados
s+2
, resuelve la fórmula cuadráticaR=s*n*(n-1)/2 + n
paran
ver si el resultado es un número entero.Comparar (73 bytes):
Un enfoque alternativo para resolver
s
da 62 bytes en Python 3, pero fallaR=1
.fuente
JavaScript (ES6), 90 bytes
Resuelve la ecuación cuadrática. 73 bytes en versiones suficientemente nuevas de Firefox:
fuente
> <>, 62 + 3 = 65 bytes
Espera la entrada en la parte superior de la pila, por lo que +3 bytes para la
-v
bandera.Esta es la primera vez que programo en> <>, por lo que es posible que me falten algunos trucos obvios para acortar el código.
Explicación:
Inicialización
Mueve N al registro, empuja el contador a la pila (comenzando en
1
, que corresponde a números triangulares), y comienza la secuencia con los valores0
y1
.Bucle principal
Compara la parte superior de la pila con el registro. Si es igual, vaya a la rutina de impresión. Si es mayor, vaya a la rutina de reinicio. De lo contrario, tome la diferencia entre los dos elementos superiores de la pila, agregue el contador y agregue al elemento anterior de la pila superior. Esto calcula el siguiente número poligonal.
Impresión
Imprime el contador + 2, seguido de una nueva línea, luego se mueve a la rutina de reinicio.
Reiniciar
Elimina los dos elementos superiores de la pila e incrementa el contador. Finaliza el programa si el contador es mayor que 18, de lo contrario, empuja los números iniciales
0
y1
hacia la pila y vuelve al bucle principal.fuente
Jalea , 22 bytes
Pruébalo en línea!
Explicación
fuente
Axioma 203 bytes
aquí hay menos golf y rutina que muestran números
fuente
AWK , 67 bytes
Pruébalo en línea!
Intenté realmente resolver la cuadrática, pero verificar cada valor para ver si funciona es más corto (y menos propenso a errores para mí)
fuente
R,
6866 bytesLecturas
N
de stdin. Calcula los primerosN
números k-gonales y obtiene el lugark
donde son igualesN
, usando la fórmula de xnor; sin embargo, guarda bytes en paréntesis al usar en1:18
lugar de3:20
y agregar2
al final.expand.grid
por nombres predeterminados de las columnasVar1
,Var2
, ..., si no le es dado un nombre.$
índices por coincidencia parcial, por lo quem$V
corresponde am$Var2,
la segunda columna.versión antigua:
Pruébalo en línea!
fuente
Pari / GP , 34 bytes
Pari / GP tiene una función incorporada para probar si un número es un número poligonal.
Pruébalo en línea!
fuente
Jalea , 20 bytes
Acabo de comenzar a escribir un engaño efectivo de este desafío (aunque cubriendo todos los k> 1 no solo [1,20]) ... ¡así que en su lugar lo responderé!
Un programa completo que imprime una representación de la lista Jelly de los resultados *
Pruébalo en línea!
* Sin resultados no imprime nada;
un solo resultado imprime solo ese número;
resultados múltiples imprime una lista
[]
cerrada y,
separada de los números¿Cómo?
fuente