Dado un número de entrada positivo n
, construya una espiral de números desde 1
hasta n^2
, con 1
en la parte superior izquierda, girando hacia adentro en sentido horario. Tome la suma de las diagonales (si n
es impar, el número del medio n^2
se cuenta dos veces) y escriba ese número.
Ejemplo para n = 1
:
1
(1) + (1) = 2
Ejemplo para n = 2
:
1 2
4 3
(1+3) + (4+2) = 4 + 6 = 10
Ejemplo para n = 4
:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
(1+13+15+7) + (10+16+14+4) = 36 + 44 = 80
Ejemplo de n = 5
:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
(1+17+25+21+9) + (13+23+25+19+5) = 73 + 85 = 158
Más reglas y aclaraciones
- Este es OEIS A059924 y hay algunas soluciones de forma cerrada en esa página.
- Se puede suponer que la entrada y la salida encajan en el tipo entero nativo de su idioma.
- La entrada y la salida se pueden dar en cualquier formato conveniente .
- Puede optar por 0-index o 1-index, como estoy aquí en mis ejemplos, para su envío. Por favor, indique lo que está haciendo.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
+3-3*(-1)^n
no es realmente lo mismo6
, aunque la diferencia se pierde en la división de enteros.+3-3*(-1^n)
la misma que+6
. Actualizaré mi respuesta para hacerlo más obvio.+6
sin
es raro, pero+0
cuandon
es aún3-3*(-1^n)
es siempre6
pero3-3*(-1)^n
tiene ese comportamiento alternativo. La fórmula original tiene el último, lo que hace innecesario el uso de la división de enteros, ya que siempre es divisible por 12Python 2 , 30 bytes
Ahorró algunos bytes al portar el enfoque de Giuseppe .
Pruébalo en línea!
Python 2 ,
3634 bytesAhorré algunos bytes más gracias a @LeakyNun .
Pruébalo en línea!
fuente
Mathematica, 19 bytes
Puede ejecutarlo con la siguiente sintaxis:
Donde
5
se puede sustituir con la entrada.Puede probarlo en el Sandbox de Wolfram (Copiar-Pegar + Evaluar celdas)
fuente
Mathematica, 19 bytes
Pruébalo en línea!
Ahorró algunos bytes al portar el enfoque de Giuseppe.
Mathematica, 58 bytes
Siempre disfruto las preguntas con respuestas dadas gracias a los oeis (por la buena pregunta y respuesta)
fuente
Jalea ,
1110 bytes1 byte gracias a Jonathan Allan.
Pruébalo en línea!
fuente
8,-3,4,3
->⁽ø\DN2¦
para guardar un byteMATL , 21 bytes
Pruébalo en línea!
fuente
UQG1YL-tP,wXds]+
Cubix , 33 bytes
Pruébalo en línea!
versión del cubo:
Implementa el mismo algoritmo que mi R respuesta . Sospecho que esto se puede reducir.
fuente
SOGL V0.12 ,
251514 bytesPruébalo aquí!
Traducción de la respuesta de Python de Mr.Xcoder que utiliza el enfoque de Giuseppe . SOGL no gana nada aquí: p
fuente
Java 8, 24 bytes
Puerto de la respuesta R de @Giuseppe .
Tenga en cuenta que los
/6
pisos por defecto al calcular con enteros en Java.Pruébalo aquí
fuente
Excel,
3530 bytesGuardado 5 bytes usando el enfoque de Giuseppe .
Primer intento:
Evolucionado de una implementación directa de fórmula de OEIS (37 bytes):
+3-3*(-1)^A1
La lógica se puede cambiar a6*MOD(A1,2)
.No guarda bytes, pero permite la eliminación de un factor común para 2 bytes.
fuente
05AB1E ,
1312 bytesUtiliza la misma técnica de conversión de base que la presentación Jelly de Leaky Nun
¿Quizáshaya una forma más corta de crear la lista de coeficientes?-1 byte gracias a Datboi (use espacios y ajuste para vencer la compresión (!))
Pruébalo en línea!
¿Cómo?
Mis 13 años ...
Todos usan compresiones para encontrar la lista de coeficientes.
fuente
8 3(4 3)¹β6÷
a salvo 1 byte (aunque sin compresión elegante)Pyth , 17 bytes
Pruébalo aquí
fuente
Pyke , 14 bytes
Pruébalo aquí!
fuente
05AB1E , 14 bytes
Pruébalo en línea!
fuente
MATL , 12 bytes
¡Pruébalo en MATL Online!
Explicación
El mismo enfoque que la respuesta de Giuseppe .
fuente
Gaia , 14 bytes
Pruébalo en línea!
fuente