Napisz program lub funkcję, która przy danej liczbie całkowitej n
konstruuje tablicę o n
wymiarach n
długości, gdzie każdy element jest identyfikatorem własnych współrzędnych. To znaczy, zaczynając od jednej tablicy, wypełnij ją n
tablicami, gdzie każda z nich zawiera n
więcej tablic, do głębokości n-1
. Elementy najgłębszych tablic to współrzędne opisujące, gdzie znajdują się w pełnej tablicy.
Kilka przykładów na wypadek, gdyby moje wyjaśnienie było mylące.
n = 1
["1"]
n = 2
[
["11", "12"],
["21", "22"]
]
n = 3
[
[
["111","112","113"],
["121","122","123"],
["131","132","133"]
],
[
["211","212","213"],
["221","222","223"],
["231","232","233"]
],
[
["311","312","313"],
["321","322","323"],
["331","332","333"]
]
]
Tutaj „321” oznacza, że jest to pierwszy element 2. elementu 3. tablicy.
Zasady:
- Współrzędne i wymiar (
n
) mogą być indeksowane 0 lub 1 - Możesz założyć, że
n
jest to jedna cyfra, poniżej 10 dla obu opcji indeksowania, aby zapobiec niejednoznacznym wynikom - IO jest elastyczny.
- W szczególności współrzędne mogą być tablicami, łańcuchami itp., O ile są wyraźne. „321” => [3,2,1]
- Dane wyjściowe mogą być liczbami całkowitymi w bazie 10 z zerami wiodącymi lub bez nich.
- Jeśli chcesz, współrzędne mogą być w odwrotnej kolejności, o ile są spójne. „321” => „123”
- Dane wyjściowe niekoniecznie muszą być strukturą tablicową w Twoim języku. Tak długo, jak istnieją wyraźne wyraźne znaczniki dla początku tablicy, końca tablicy i do oddzielania elementów.
- Wynik dla
n=1
może wynosić tylko 1 - Jeśli Twoje wyniki są nietypowe, wyjaśnij format.
- To jest golf golfowy, więc wygrywa najkrótsze rozwiązanie w każdym języku!
data L a = L [L a] | E a
.Int -> [String]
lubInt -> [[String]]
i tak dalej, w zależności od tego, co jest wejścieOdpowiedzi:
Dyalog APL ,
53 bajty-2 bajty dzięki FrownyFrog
Wypróbuj online!
⍳
daje wszystkie indeksy, biorąc pod uwagę kształt tablicy. np. 2 3 .⍴
przekształca prawy argument tak, aby był wielkości lewego argumentu.⍨
sprawia, że oba są właściwym argumentem.źródło
Python 3 , 56 bajtów
Wypróbuj online!
Xcoder zaoszczędził 2 bajty na przejściu do Pythona 3 w celu rozpakowania oznaczonego gwiazdką.
źródło
f=lambda n,*l:len(l)//n*l or[f(n,*l,k)for k in range(n)]
działa na 56 bajtów.Wolfram Language (Mathematica) ,
3222 bajtów-10 bajtów dzięki @alephalpha
Wypróbuj online!
źródło
J , 18 bajtów
Wypróbuj online!
Iteracyjne rozwiązanie, brak wbudowanego produktu kartezjańskiego. Tak wygląda szczyt J.
źródło
Galaretka ,
87 bajtówWypróbuj online!
Wyjaśnienie
Jako argument użyj argumentu 2.
Jeśli
¡
nie zmienia się, jest to odpowiedni argument na temat iteracji dla diadów, to będą to 4 bajty:ṗs³¡
źródło
1
są prawidłowe?J, 13 bajtów
Wypróbuj online!
Interesujące jest to o wiele dłużej niż odpowiedź APL (choć może to być moja niemożność zobaczenia lepszego tłumaczenia)
wyjaśnienie
źródło
#.inv
jest bardzo sprytne, +1.MATLAB,
928955 bajtówMam inną odpowiedź po ponownym przeczytaniu zasad wyzwania, ale poprzednią próbę pozostawię poniżej, ponieważ jest inna i wciąż fajnie się na nią patrzy.
Wyjaśnienie
Daje to n-wymiarową tablicę ciągów, które są indeksowane do zera.
Poprzednia odpowiedź (89 bajtów)
Mój pierwszy golf! Można to prawdopodobnie bardziej zmniejszyć, ale pomyślałem, że opublikuję to, co mam.
Wyjaśnienie
Wysyła x na końcu, aby dać rozwiązanie
Podobnie jak w innym poście MATLAB, wyjście jest tablicą n-wymiarową, z tym wyjątkiem, że używa liczb do wyświetlenia współrzędnych. Działa dla dowolnej wartości, chociaż ponieważ pętle są złe w MATLAB, zaczyna znacznie zwalniać wokół n = 8.
Edycja: -2 bajty dzięki Luisowi Mendo. Usunięto również końcowy średnik, aby wydrukować wynik.
źródło
length
przez,nnz
aby zaoszczędzić kilka bajtów. Ponadto, zgodnie z regułami PPCG, kod musi generować pewne rzeczywiste dane wyjściowe, zwykle wyświetlając je w STDOUT (nie wystarczy, aby dane wyjściowe były przechowywane w zmiennej), lub musi to być funkcja zwracająca dane wyjścioweRdza ,
201176167166154 bajtyWypróbuj online!
Typ wyjściowy to typ sumy z dwoma wariantami, ponieważ język jest ściśle wpisany. Może to być albo
L
typ listy zawierający ten typ sumy, alboS
typ wyniku (ciąg znaków). Wynik może wyglądać tak.Również sformatowane przy użyciu
rustfmt
:źródło
R , 102 bajty
Wypróbuj online!
which
indeksowania tablicźródło
which
jest tym, czego szukałem, dzięki! Zapisano 9 bajtówJava 10, 144 bajty
Rozwiązaniem jest metoda
f
. Tworzy ciąg znaków reprezentujący tablicę.Wypróbuj online
Nie golfił
Podziękowanie
źródło
Object[]
zvar
. Ponadto uważam, że tenelse
blok jest niepotrzebny, tak jakreturn
wif
bloku.05AB1E , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (Node.js) ,
626058 bajtówWypróbuj online! Wyjście jest indeksowane na 0. Edycja: Zapisano 2 bajty dzięki @JoKing i kolejne 2 bajty dzięki @Arnauld.
źródło
MATLAB,
116108104 bajtówWydaje mi się, że musi to być krótszy sposób, biorąc pod uwagę powinowactwo MATLAB-a do matryc wielowymiarowych ... Dzięki Luisowi za 4 bajty z krótkich rąk
Wyjaśnienie
Dane wyjściowe to n-wymiarowa tablica komórek, w której każdy element jest tablicą wartości współrzędnych. Działa dla każdego
n
bez dwuznaczności ze względu na wyjście tablicy numerycznej, o ilen^(n+1)
tablica elementów może być przechowywana w pamięci RAM!źródło
Węgiel drzewny , 26 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wejście
n
.Wygeneruj wszystkie
nⁿ
n
cyfry cyfrowe w bazien
.Podziel je
n
razy nan
tablicę -wymiarową, w której każdy wymiar ma rozmiarn
.Wydrukuj tablicę. Domyślny format wyjściowy to każdy element na swojej linii, następnie każdy blok
n
linii jest zakończony pustą linią, następnie każdy blokn
blokówn
linii jest zakończony drugą pustą linią, i tak dalej, aż don-1
pustych linii na najwyższym poziomie .źródło
Galaretka , 7 bajtów
Wypróbuj online!
źródło