Sua pirâmide
A pirâmide que quero que você construa é feita inteiramente de cubos. Possui 24 camadas, e a N a ésima camada da parte superior contém cubos de N 2 organizados em um quadrado N por N. A pirâmide é assim:
Para construir a pirâmide, você precisará de um suprimento de cubos. Você recebe 4900 cubos dispostos em um quadrado de 70 por 70, assim:
(Ok, admito que a imagem da praça é totalmente desnecessária.)
Como 1 2 + 2 2 + 3 2 + ... + 24 2 = 70 2 , você tem exatamente o número certo de cubos para construir a pirâmide. Tudo o que você precisa fazer é me dizer onde cada cubo deve ir.
Sua tarefa
Você deve escolher uma joia arbitrária entre os cubos no quadrado e os cubos na pirâmide. (Seria bom se a sua resposta dissesse qual das 4900 diferentes bijeções que você está usando.)
Em seguida, escreva uma função ou programa que faça o seguinte:
- Dada a localização de um cubo no quadrado 70 por 70 (como um par de coordenadas
(X,Y)
), - Saída sua localização na pirâmide (como um triplo de coordenadas
(A,B,C)
).
As coordenadas de entrada e saída podem ser indexadas em 0 ou 1. Supondo que seja indexado 1, sua entrada (X,Y)
será um par de números inteiros entre 1 e 70. Sua saída (A,B,C)
será um triplo de números inteiros; A
deve ser a camada contando da parte superior (entre 1 e 24) e (B,C)
as coordenadas desse cubo dentro dessa camada (entre 1 e A
).
Por exemplo:
- o cubo superior da pirâmide tem coordenadas
(1,1,1)
. - Os quatro cantos da base da pirâmide têm coordenadas
(24,1,1)
,(24,1,24)
,(24,24,1)
, e(24,24,24)
. - Se você decidir colocar os cantos do quadrado nos cantos da pirâmide, na entrada
(70,1)
você poderá fornecer a saída(24,24,1)
.
Você pode supor que você receberá apenas coordenadas válidas (X,Y)
como entrada. A correção é inteiramente determinada pela seguinte regra: duas entradas válidas diferentes sempre devem fornecer duas entradas válidas diferentes.
Este é o código-golfe : o código mais curto vence.
fonte
PHP,
75 8278 bytesIndexado em 0 :
conjunto P = X + Y * 70, em seguida, reduzir P por A 2 ao andar para baixo para a camada correcta. A-1; P / A; P% A - pronto.
(invertido: ao incrementar A para a camada correta: P = P + A2 2 e P = P + A * B + C -> X = P / 70, Y = P% 70)
Corra com
php -nr '<code>' <X> <Y>
; imprime A_B_C.1 indexado, 82 bytes :
fonte
Python,
807372 bytesPrimeira submissão, não seja muito duro q:
Indexado a 0
Cria uma lista de comprimento 4900 com todas as coordenadas pyramind e retorna uma entrada de lista diferente para cada entrada.
Experimente online!
fonte
a**2
aa*a
salvar um byte.Python 2 , 64 bytes
Experimente online!
fonte
C
89,87,82, 71 bytesTomou a solução Python do xnor e removeu a quebra de linha
Indexado a 0
Indexado 1
fonte
Lote, 103 bytes
Indexado a 0. Funciona através de cada camada, começando pelo topo.
fonte
J, 37 bytes
-4 bytes graças ao FrownyFrog
Tradução bastante direta do método Jelly em J. Usa 0 indexação. A praça da pirâmide superior é a primeira. O canto inferior direito da base é o último.
A maioria do código é padronizada para produzir a lista indexada tripla como uma constante. Encontrar o elemento correto nessa lista com base na entrada de 2 elementos é simplesmente uma questão de traduzir da base 70 com
70&#.
Experimente online!
fonte
(#~~:&a:)
->a:-.~
Casca , 13 bytes
Experimente online! Os índices começam em 1.
Explicação
Como algumas outras respostas, construo a lista completa de coordenadas da pirâmide e simplesmente a indexo. Eu faço isso listando todos os triplos em
[A,B,C]
que os números estão entre 1 e 24 (expressos em 4! Para salvar um byte) e mantendo aqueles para os quaisA >= max(B,C)
.fonte