Twoja piramida
Piramida, którą chcę zbudować, jest zbudowana w całości z kostek. Ma 24 warstwy, a N- ta warstwa od góry zawiera N 2 kostki ułożone w kwadracie N na N. Piramida wygląda następująco:
Aby zbudować piramidę, potrzebujesz zapasów kostek. Otrzymujesz 4900 kostek ułożonych w kwadrat 70 na 70, który wygląda następująco:
(Dobra, przyznaję, że obraz kwadratu jest zupełnie niepotrzebny).
Ponieważ 1 2 + 2 2 + 3 2 + ... + 24 2 = 70 2 , masz dokładnie odpowiednią liczbę kostek, aby zbudować piramidę. Wszystko, co musisz zrobić, to powiedzieć mi, gdzie powinna iść każda kostka.
Twoje zadanie
Powinieneś wybrać dowolny biject pomiędzy sześcianami na kwadracie a sześcianami w piramidzie. (Byłoby miło, gdybyś w swojej odpowiedzi powiedział, którego z 4900! Różnych bijectów używasz.)
Następnie napisz funkcję lub program, który wykonuje następujące czynności:
- Biorąc pod uwagę położenie sześcianu w kwadracie 70 na 70 (jako para współrzędnych
(X,Y)
), - Umieść swoje położenie w piramidzie (jako potrójny układ współrzędnych
(A,B,C)
).
Współrzędne wejściowe i wyjściowe mogą być indeksowane 0 lub indeksowane 1. Zakładając, że 1-indeksowany, twoja wartość wejściowa (X,Y)
będzie parą liczb całkowitych od 1 do 70. Twój wynik (A,B,C)
będzie potrójną liczbą całkowitą; A
powinna być warstwą liczącą od góry (od 1 do 24) i (B,C)
powinna być współrzędnymi tego sześcianu w tej warstwie (od 1 do A
).
Na przykład:
- górny sześcian piramidy ma współrzędne
(1,1,1)
. - Cztery narożniki podstawy piramidy mają współrzędne
(24,1,1)
,(24,1,24)
,(24,24,1)
, i(24,24,24)
. - Jeśli zdecydujesz się umieścić rogi kwadratu w rogach piramidy, wtedy na wejściu
(70,1)
możesz podać wynik(24,24,1)
.
Możesz założyć, że (X,Y)
jako dane wejściowe otrzymasz prawidłowe współrzędne . Prawidłowość jest całkowicie determinowana przez następującą zasadę: dwa różne ważne dane wejściowe powinny zawsze dawać dwa różne ważne dane wejściowe.
To jest golf-golf : wygrywa najkrótszy kod.
źródło
PHP,
75 8278 bajtów0-indeksowane :
zbioru P = X + Y * 70 następnie zmniejszyć przez A P 2 idąc w dół do odpowiedniej warstwy. A-1; ROCZNIE; P% A - gotowe.
(odwrócony: podczas zwiększania A do właściwej warstwy: P = P + A 2, a następnie P = P + A * B + C -> X = P / 70, Y = P% 70)
Uruchom z
php -nr '<code>' <X> <Y>
; drukuje A_B_C.1 indeksowany, 82 bajty :
źródło
Python,
807372 bajtyPierwsze zgłoszenie, nie bądź zbyt surowy q:
0-indeksowane
Tworzy listę długości 4900 ze wszystkimi współrzędnymi piramidy i zwraca inną pozycję listy dla każdego wejścia.
Wypróbuj online!
źródło
a**2
doa*a
zapisania bajt.Python 2 , 64 bajty
Wypróbuj online!
źródło
do
89,87,82, 71 bajtówWziąłem rozwiązanie Xnor w języku Python i usunąłem łamanie wiersza
0-indeksowane
1-indeksowany
źródło
Partia, 103 bajty
0-indeksowane. Działa przez każdą warstwę, zaczynając od góry.
źródło
J, 37 bajtów
-4 bajty dzięki FrownyFrog
Dość proste tłumaczenie metody Jelly na J. Wykorzystuje indeksowanie 0. Najwyższy kwadrat piramidy jest pierwszy. Dolny prawy róg podstawy jest ostatnim.
Większość kodu to podstawa do utworzenia potrójnie indeksowanej listy jako stałej. Znalezienie odpowiedniego elementu na tej liście na podstawie danych wejściowych z 2 elementów jest po prostu kwestią tłumaczenia z bazy 70 za pomocą
70&#.
Wypróbuj online!
źródło
(#~~:&a:)
->a:-.~
Łuska , 13 bajtów
Wypróbuj online! Indeksy zaczynają się od 1.
Wyjaśnienie
Podobnie jak niektóre inne odpowiedzi, tworzę pełną listę współrzędnych piramidy i po prostu indeksuję. Robię to, wymieniając wszystkie tróje, w
[A,B,C]
których liczby wynoszą od 1 do 24 (wyrażone jako 4 !, aby zachować bajt) i zachowując te, dla którychA >= max(B,C)
.źródło