Votre pyramide
La pyramide que je veux que vous construisiez est entièrement constituée de cubes. Il a 24 couches, et la N ème couche du haut contient N 2 cubes disposés dans un carré N par N. La pyramide ressemble à ceci:
Pour construire la pyramide, vous aurez besoin d'une réserve de cubes. On vous donne 4900 cubes disposés dans un carré de 70 par 70 qui ressemble à ceci:
(D'accord, j'avoue que l'image du carré est totalement inutile.)
Puisque 1 2 + 2 2 + 3 2 + ... + 24 2 = 70 2 , vous avez exactement le bon nombre de cubes pour construire la pyramide. Tout ce que vous avez à faire est de me dire où chaque cube doit aller.
Ta tâche
Vous devez choisir une bijection arbitraire entre les cubes du carré et les cubes de la pyramide. (Ce serait bien si votre réponse disait laquelle des 4900! Différentes bijections vous utilisez.)
Ensuite, écrivez une fonction ou un programme qui effectue les opérations suivantes:
- Étant donné l'emplacement d'un cube dans le carré 70 par 70 (sous la forme d'une paire de coordonnées
(X,Y)
), - Afficher son emplacement dans la pyramide (sous la forme d'un triple de coordonnées
(A,B,C)
).
Les coordonnées d'entrée et de sortie peuvent toutes être indexées 0 ou indexées 1. En supposant 1 indexé, votre entrée (X,Y)
sera une paire d'entiers entre 1 et 70. Votre sortie (A,B,C)
sera un triple d'entiers; A
devrait être le calque compté à partir du haut (entre 1 et 24) et (B,C)
devrait être les coordonnées de ce cube au sein de ce calque (entre 1 et A
).
Par exemple:
- le cube supérieur de la pyramide a des coordonnées
(1,1,1)
. - Les quatre coins de la base de la pyramide ont des coordonnées
(24,1,1)
,(24,1,24)
,(24,24,1)
et(24,24,24)
. - Si vous décidez de placer les coins du carré aux coins de la pyramide,
(70,1)
vous pouvez donner la sortie en entrée(24,24,1)
.
Vous pouvez supposer que vous ne recevrez que des coordonnées valides (X,Y)
en entrée. La correction est entièrement déterminée par la règle suivante: deux entrées valides différentes doivent toujours donner deux entrées valides différentes.
C'est le code-golf : le code le plus court l'emporte.
la source
PHP,
75 8278 octets0 indexé :
réglez P = X * 70 + Y puis réduisez P de A 2 tout en descendant vers le bon calque. A-1; PENNSYLVANIE; P% A - terminé.
(inversé: lors de l'incrémentation de A vers le bon calque: P = P + A 2 puis P = P + A * B + C -> X = P / 70, Y = P% 70)
Courir avec
php -nr '<code>' <X> <Y>
; imprime A_B_C.1 indexé, 82 octets :
la source
Python,
807372 octetsPremière soumission, ne soyez pas trop sévère q:
0 indexé
Crée une liste de longueur 4900 avec toutes les coordonnées pyramidales et renvoie une entrée de liste différente pour chaque entrée.
Essayez-le en ligne!
la source
a**2
àa*a
sauver un octet.Python 2 , 64 octets
Essayez-le en ligne!
la source
C
89,87,82, 71 octetsA pris la solution Python de xnor et supprimé le saut de ligne
0 indexé
1 indexé
la source
Lot, 103 octets
0 indexé. Fonctionne à travers chaque couche en partant du haut.
la source
J, 37 octets
-4 octets grâce à FrownyFrog
Traduction assez simple de la méthode Jelly en J. Utilise l'indexation 0. Le sommet de la pyramide est le premier. Le coin inférieur droit de la base est le dernier.
La majorité du code est passe-partout pour produire la liste triplement indexée comme constante. Trouver l'élément correct dans cette liste sur la base de l'entrée de 2 éléments est simplement une question de traduction à partir de la base 70 avec
70&#.
Essayez-le en ligne!
la source
(#~~:&a:)
->a:-.~
Husk , 13 octets
Essayez-le en ligne! Les indices commencent à 1.
Explication
Comme certaines autres réponses, je construis la liste complète des coordonnées de la pyramide et l'indexe simplement. Pour ce faire, je répertorie tous les triplets
[A,B,C]
dont les nombres sont compris entre 1 et 24 (exprimés en 4! Pour enregistrer un octet) et en conservant ceux pour lesquelsA >= max(B,C)
.la source