¿Qué es un primer cuadrado?
Un primer cuadrado es un cuadrado donde los cuatro bordes son números primos diferentes.
Pero cuales?
¿Y cómo los construimos?
Aquí hay un ejemplo de un 4x4 Prime Square
1009
0 0
3 0
1021
Primero comenzamos desde la esquina superior izquierda. Estamos trabajando en sentido horario .
Elegimos el número primo más pequeño que tiene 4
dígitos, que es 1009 .
Luego, necesitamos que el número primo más pequeño tenga 4
dígitos, que comienza con a 9
. Esto es 9001
El tercer número primo (4 dígitos) debe tener 1
como último dígito (porque 9001 termina con 1
)
y también debe ser el primo más pequeño de 4 dígitos con esta propiedad que no se haya usado antes como borde .
Este numero primo es 1021
El cuarto número primo debe tener 4
dígitos, comenzar con a 1
(porque 1009 comienza con a 1
) y terminar con a 1
(porque 1021 comienza con a 1
)
El número primo más pequeño de 4 dígitos con esta propiedad que no se ha utilizado antes como borde es 1031
Tu tarea
Se le dará un número entero n
de 3 to 100
Este número serán las dimensiones del n x n
cuadrado.
Luego debe generar este cuadrado exactamente en la forma de los siguientes casos de prueba
Casos de prueba
n=3
Output
101
3 0
113
n=5
Output
10007
0 0
0 0
9 0
10061
n=7
Output
1000003
0 0
0 0
0 0
0 0
8 1
1000037
n=10
Output
1000000007
0 0
0 0
0 0
0 0
0 0
0 0
1 0
8 0
1000000021
n=20
Output
10000000000000000051
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
9 8
10000000000000000097
- La entrada y salida se pueden dar por cualquier método conveniente .
- Puede imprimirlo en STDOUT o devolverlo como resultado de una función.
- Un programa completo o una función son aceptables.
- Cualquier cantidad de espacio en blanco extraño es aceptable, siempre que los números se alineen adecuadamente
- 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).
EDITAR
Esto es posible para todos n
Aquí están los primos paran=100
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000289
9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002191
Y para aquellos de ustedes que no creen que esto sea posible, aquí están TODOS los casos de prueba
n
: P? No es un problema con el desafío, solo curiosidad.n
: paran
= 1, no podemos satisfacer la restricción de que los cuatro bordes son primos diferentes, mientras que paran
= 2, nos vemos obligados a elegir 11,13,23, en cuyo punto el borde final es 12 que es compuesto. No tengo una prueba de que sea posible para todosn
> 2, pero me sorprendería saber lo contrario: informalmente, cuantos más dígitos haya, más "margen de maniobra" habrá para satisfacer las restricciones.n
hay al menos dos números primos de longitud quen
comienzan con 1 y terminan con cada uno de esos dígitos (por lo tanto, podemos elegir un borde inferior) y hay al menos tres números primos que comienzan con 1 y terminan con 1 (por lo tanto, podemos elegir un borde izquierdo).Respuestas:
05AB1E ,
646356534846 bytes-1 byte gracias a @ Mr.Xcoder
-5 bytes gracias a @Grimy .
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir grandes números enteros? ) Para entender por qué
Ž9¦
es2460
. Y vea esta sugerencia 05AB1E mía para comprender cómo se genera el cuadrado con elΛ
lienzo incorporado.NĀiR}¦
I¯JŽ9¦SΛ
n=4
[1009,9001,1021,1031]
[1009,"001","201","301"]
Λ
I
¯J
"1009001201301"
n=4
Ž9¦S
[2,4,6,0]
[→,↓,←,↑]
fuente
4F°ÅP¯KIù.Δ1sЮθÅ¿Š®θÅ?Šθ)¯gè}©ˆ}ð¯2ô`€R«€¦J«Ž9¦SΛ
49:°ÅPIùć4FÐN1›iR}¦ˆθUKD.ΔÐθsXÅ?‚sXÅ¿ª¯gè]Ið¯J«Ž9¦SΛ
48:°ÅPIùćÐ4FˆθUKD.ΔÐθsXÅ?‚sXÅ¿ª¯gè}ÐNĀiR}¦}I¯JŽ9¦SΛ
ÐθsXÅ?‚sXÅ¿ª
aθyXÅ?yXÅ¿)
. Sin)
embargo, no estoy exactamente seguro de por qué funciona dentro del alcance del bucle, ya que habría esperado que envolviera la lista principal también en su lista en la primera iteración. Pero incluso sin eso, el uso de enyy
lugar deÐss
aún ahorra 1 byte. :)05AB1E ,
35333231 bytes-1 byte gracias a Kevin Cruijssen
Pruébalo en línea!
Explicación:
fuente
Θ
atNΘ
. Solo1
es veraz en 05AB1E, asíif N
yif N == 1
son lo mismo.Θi
es el equivalente 05AB1E deif (cond == true)
...Θ
aún puede ser útil si desea convertir todo excepto1
a0
. Pero para la declaración ifi
, no es realmente necesario, al igual que con su pseudocódigo== true
.JavaScript (ES8),
205 ... 185 177173 bytesPruébalo en línea!
¿Cómo?
Paso # 1: calcular los 4 primos
Paso # 2: formateando la salida
fuente
Jalea ,
8982 bytesPruébalo en línea!
Definitivamente podría ser más golfista, pero funciona eficientemente para grandes números.
fuente
Jalea , 59 bytes
Pruébalo en línea!
Respuesta de Jelly más corta pero mucho menos eficiente.
fuente
JavaScript, 484 bytes
La última función sin nombre devuelve el arte ASCII.
Código original
Complejidad de tiempo mejor y promedio: Ω (100 n n) en la notación de omega grande de Knuth (n pasos para restar n números de dígitos, 10 n sustracciones por verificación de divisibilidad, 10 n verificación de divisibilidad para verificación primaria, y Ω (1) verificaciones principales realizadas )
La peor complejidad en el tiempo: Ω (1000 n n) en la notación big-omega de Knuth (n pasos para restar n números de dígitos, 10 n sustracciones por verificación de divisibilidad, 10 n verificación de divisibilidad para verificación primaria y 10 n verificaciones principales realizadas).
Sospecho que
n=100
toma alrededor de 10 203 cálculos.Nota al margen: Validé la sintaxis usando UglifyJS 3, y funcionó mucho mejor que yo, ahorrando un 47.13% más y ganando 282 bytes. Sin embargo, decidí no hacer de eso mi puntaje ya que siento que es una trampa.
Simplemente eliminó la última función ya que nunca se usan. En realidad, empeoró si se asignó y no se eliminó, incluido el código adicional que agregué.
fuente