Tu piramide
La pirámide que quiero que construyas está hecha completamente de cubos. Cuenta con 24 capas, y la N º capa de la parte superior contiene N 2 cubos dispuestos en una N por cuadrado N. La pirámide se ve así:
Para construir la pirámide, necesitará un suministro de cubos. Te dan 4900 cubos dispuestos en un cuadrado de 70 por 70 que se ve así:
(Bien, admito que la imagen del cuadrado es completamente innecesaria).
Como 1 2 + 2 2 + 3 2 + ... + 24 2 = 70 2 , tienes exactamente el número correcto de cubos para construir la pirámide. Todo lo que tienes que hacer es decirme a dónde debe ir cada cubo.
Tu tarea
Debe elegir una biyección arbitraria entre los cubos en el cuadrado y los cubos en la pirámide. (¡Sería bueno que tu respuesta dijera cuál de las 4900 diferentes biyecciones que estás usando!
Luego, escriba una función o programa que haga lo siguiente:
- Dada la ubicación de un cubo en el cuadrado 70 por 70 (como un par de coordenadas
(X,Y)
), - Salida de su ubicación en la pirámide (como un triple de coordenadas
(A,B,C)
).
Las coordenadas de entrada y salida pueden estar indexadas a 0 o indexadas a 1. Suponiendo que 1 indexado, su entrada (X,Y)
será un par de enteros entre 1 y 70. Su salida (A,B,C)
será un triple de enteros; A
debe ser la capa que cuenta desde la parte superior (entre 1 y 24) y (B,C)
debe ser las coordenadas de ese cubo dentro de esa capa (entre 1 y A
).
Por ejemplo:
- El cubo superior de la pirámide tiene coordenadas
(1,1,1)
. - Las cuatro esquinas de la base de la pirámide tienen coordenadas
(24,1,1)
,(24,1,24)
,(24,24,1)
, y(24,24,24)
. - Si decide colocar las esquinas del cuadrado en las esquinas de la pirámide, en la entrada
(70,1)
puede dar la salida(24,24,1)
.
Puede suponer que solo se le darán coordenadas válidas (X,Y)
como entrada. La corrección está completamente determinada por la siguiente regla: dos entradas válidas diferentes siempre deben dar dos entradas válidas diferentes.
Este es el código de golf : el código más corto gana.
fuente
PHP,
75 8278 bytes0 indexado :
ajuste P = X * 70 + Y luego reduzca P en A 2 mientras camina hacia la capa correcta. A-1; PENSILVANIA; P% A - hecho.
(invertido: mientras se incrementa A a la capa correcta: P = P + A 2 luego P = P + A * B + C -> X = P / 70, Y = P% 70)
Correr con
php -nr '<code>' <X> <Y>
; imprime A_B_C.1 indexado, 82 bytes :
fuente
Python,
807372 bytesPrimera presentación, no seas demasiado duro q:
0 indexado
Crea una lista de longitud 4900 con todas las coordenadas de pyramind y devuelve una entrada de lista diferente para cada entrada.
Pruébalo en línea!
fuente
a**2
aa*a
ahorrar un byte.Python 2 , 64 bytes
Pruébalo en línea!
fuente
do
89,87,8271 bytesTomó la solución Python de xnor y eliminó el salto de línea
0 indexado
1 indexado
fuente
Lote, 103 bytes
0 indexado. Funciona a través de cada capa desde la parte superior.
fuente
J, 37 bytes
-4 bytes gracias a FrownyFrog
Traducción bastante sencilla del método Jelly en J. Utiliza 0 indexación. El cuadrado superior de la pirámide es el primero. La esquina inferior derecha de la base es la última.
La mayoría del código es repetitivo para producir la lista indexada triple como una constante. Encontrar el elemento correcto dentro de esa lista basado en la entrada de 2 elementos es simplemente una cuestión de traducir desde la base 70 con
70&#.
Pruébalo en línea!
fuente
(#~~:&a:)
->a:-.~
Casco , 13 bytes
Pruébalo en línea! Los índices comienzan desde 1.
Explicación
Como algunas otras respuestas, construyo la lista completa de coordenadas piramidales y simplemente la indexo. Hago esto enumerando todos los triples
[A,B,C]
donde los números están entre 1 y 24 (¡expresados como 4! Para guardar un byte) y manteniendo aquellos para los cualesA >= max(B,C)
.fuente