Deine Pyramide
Die Pyramide, die Sie bauen sollen, besteht ausschließlich aus Würfeln. Es hat 24 Schichten, und die N- te Schicht von oben enthält N 2 Würfel, die in einem Quadrat von N mal N angeordnet sind. Die Pyramide sieht so aus:
Um die Pyramide zu bauen, benötigen Sie einen Vorrat an Würfeln. Sie erhalten 4900 Würfel, die in einem Quadrat von 70 mal 70 so angeordnet sind:
(Okay, ich gebe zu, dass das Bild des Platzes völlig unnötig ist.)
Da 1 2 + 2 2 + 3 2 + ... + 24 2 = 70 2 , haben Sie genau die richtige Anzahl von Würfeln, um die Pyramide zu bauen. Alles, was Sie tun müssen, ist mir zu sagen, wohin jeder Würfel gehen soll.
Deine Aufgabe
Sie sollten eine beliebige Bijektion zwischen den Würfeln im Quadrat und den Würfeln in der Pyramide auswählen. (Es wäre schön, wenn Ihre Antwort sagen würde, welche der 4900! Verschiedenen Bijektionen Sie verwenden.)
Schreiben Sie dann eine Funktion oder ein Programm, das Folgendes ausführt:
- Angesichts der Position eines Würfels im Quadrat 70 x 70 (als Koordinatenpaar
(X,Y)
) - Geben Sie die Position in der Pyramide aus (als Dreifachkoordinaten
(A,B,C)
).
Die Eingabe- und Ausgabekoordinaten können alle entweder 0-indiziert oder 1-indiziert sein. Angenommen, Ihre Eingabe (X,Y)
ist ein Paar von ganzen Zahlen zwischen 1 und 70. Ihre Ausgabe (A,B,C)
ist ein Dreifach von ganzen Zahlen. A
sollte die Schicht sein, die von oben gezählt wird (zwischen 1 und 24) und (B,C)
sollte die Koordinaten dieses Würfels innerhalb dieser Schicht sein (zwischen 1 und A
).
Beispielsweise:
- Der oberste Würfel der Pyramide hat Koordinaten
(1,1,1)
. - Die vier Ecken der Basis der Pyramide haben Koordinaten
(24,1,1)
,(24,1,24)
,(24,24,1)
und(24,24,24)
. - Wenn Sie die Ecken des Quadrats an den Ecken der Pyramide platzieren möchten, können
(70,1)
Sie bei der Eingabe die Ausgabe angeben(24,24,1)
.
Sie können davon ausgehen, dass Sie nur gültige Koordinaten (X,Y)
als Eingabe erhalten. Die Korrektheit wird vollständig durch die folgende Regel bestimmt: Zwei verschiedene gültige Eingaben sollten immer zwei verschiedene gültige Eingaben ergeben.
Das ist Code-Golf : Der kürzeste Code gewinnt.
quelle
PHP,
75 8278 Bytes0-indiziert :
setze P = X * 70 + Y und reduziere P um A 2, während du zur richtigen Ebene gehst. A-1; P / A; P% A - erledigt.
(Umgekehrt: während A auf die richtige Ebene erhöht wird: P = P + A 2, dann P = P + A * B + C -> X = P / 70, Y = P% 70)
Laufen mit
php -nr '<code>' <X> <Y>
; druckt A_B_C.1-indiziert, 82 Bytes :
quelle
Python,
807372 BytesErste Einreichung, sei nicht zu hart q:
0-indiziert
Erstellt eine Liste der Länge 4900 mit allen Pyramind-Koordinaten und gibt für jede Eingabe einen anderen Listeneintrag zurück.
Probieren Sie es online!
quelle
a**2
uma*a
ein Byte zu speichern.Python 2 , 64 Bytes
Probieren Sie es online!
quelle
C
89,87,8271 BytesNahm die Python-Lösung von xnor und entfernte den Zeilenumbruch
0-indiziert
1-indiziert
quelle
Batch, 103 Bytes
0-indiziert. Arbeitet sich durch jede Ebene ab der Spitze.
quelle
J, 37 Bytes
-4 Bytes dank FrownyFrog
Ziemlich einfache Übersetzung der Jelly-Methode in J. Verwendet die Indexierung 0. Das oberste Pyramidenquadrat ist das erste. Die untere rechte Ecke der Basis ist die letzte.
Der größte Teil des Codes ist Boilerplate, um die dreifach indizierte Liste als Konstante zu erzeugen. Das Finden des richtigen Elements in dieser Liste basierend auf der Eingabe von 2 Elementen ist einfach eine Frage der Übersetzung von der Basis 70 mit
70&#.
Probieren Sie es online!
quelle
(#~~:&a:)
->a:-.~
Schale , 13 Bytes
Probieren Sie es online! Indizes beginnen ab 1.
Erläuterung
Wie einige andere Antworten konstruiere ich die vollständige Liste der Pyramidenkoordinaten und indiziere sie einfach. Ich führe dazu alle Tripel auf, bei
[A,B,C]
denen die Zahlen zwischen 1 und 24 liegen (ausgedrückt als 4!, Um ein Byte zu speichern), und behalte diejenigen, für dieA >= max(B,C)
.quelle