Czasami w moim kodzie mam listy stałych macierzy:
[ [[1, 0],
[0, 1]],
[[1, 0],
[0,-1]],
[[0, 1],
[1, 0]],
[[0,-1],
[1, 0]] ]
To okropne wykorzystanie nieruchomości ekranowych. Wolę pisać je obok siebie:
[ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Przekonasz się, że jest to nadal poprawna składniowo lista zagnieżdżona, po prostu nie jest już prostokątna i ma bardzo inną strukturę (w szczególności pogłębia się za każdym razem, gdy dodam matrycę większą niż 1x1). Nadal jednak możliwe jest zrekonstruowanie początkowej listy macierzy z tej nowej listy.
Aby móc korzystać z tej składni w przyszłości, muszę napisać kod, który konwertuje tablice napisane w układzie poziomym na listę reprezentowanych macierzy.
Aby upewnić się, że odpowiedzi nie wykonują dopasowania wzorca 2D na układzie w kodzie źródłowym, dane wejściowe zostaną podane albo jako obiekt tablicy, albo jeśli weźmie się ciąg znaków, to nie będzie zawierał białych znaków wskazujących, w jaki sposób literał został napisany w kodzie. Więc dostaniesz jakieś dane wejściowe:
[[[1, 0], [[1, 0], [[0, 1], [[0,-1], [0, 1]], [0,-1]], [1, 0]], [1, 0]]]
Wyjście powinno być następującą tablicą lub jej ciągiem znaków (znowu nie jest potrzebny żaden dodatkowy układ):
[[[1, 0], [0, 1]], [[1, 0], [0,-1]], [[0, 1], [1, 0]], [[0,-1], [1, 0]]]
To pierwsza i łatwiejsza część dwuczęściowego wyzwania. W tym przypadku możesz założyć, że wszystkie macierze są kwadratowe i mają takie same wymiary oraz że są odpowiednio wyrównane obok siebie. W drugiej części rozluźnimy te założenia.
Zasady
Dane wejściowe będą listą zagnieżdżoną lub jej kanoniczną reprezentacją ciągu znaków (w wybranym języku) i wynik powinien być wyprowadzany w tym samym formacie. Wynik zawsze będzie zawierał przynajmniej jedną matrycę, a matryce mogą być tak małe jak 1x1. Macierze będą zawierały (podpisane) liczby całkowite o wartości bezwzględnej mniejszej niż 128.
Możesz napisać program lub funkcję i użyć dowolnej ze standardowych metod odbierania danych wejściowych i dostarczania danych wyjściowych.
Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Przypadki testowe
Każdy przypadek testowy ma a) macierze list rozmieszczone ładnie obok siebie, tak jak byłyby w kodzie (to nie jest twoja informacja wejściowa), b) niesformatowaną listę bez dodatkowych białych znaków ( to twoje dane wejściowe), c) oczekiwany wynik.
Pretty: [ [[0]] ]
Input: [[[0]]]
Output: [[[0]]]
Pretty: [ [[-1]], [[0]], [[1]] ]
Input: [[[-1]],[[0]],[[1]]]
Output: [[[-1]],[[0]],[[1]]]
Pretty: [ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Input: [[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
Output: [[[1,0],[0,1]],[[1,0],[0,-1]],[[0,1],[1,0]],[[0,-1],[1,0]]]
Pretty: [ [[1, 0, 0], [[ 127, 63, 31], [[1, 0, 0], [[0, 0, 0],
[0, 1, 0], [ 15, 0, -15], [0, 0, 1], [0, 0, 0],
[0, 0, 1]], [ -31, -63, -127]], [0, 1, 0]], [0, 0, 0]] ]
Input: [[[1,0,0],[[127,63,31],[[1,0,0],[[0,0,0],[0,1,0],[15,0,-15],[0,0,1],[0,0,0],[0,0,1]],[-31,-63,-127]],[0,1,0]],[0,0,0]]]
Output: [[[1,0,0],[0,1,0],[0,0,1]],[[127,63,31],[15,0,-15],[-31,-63,-127]],[[1,0,0],[0,0,1],[0,1,0]],[[0,0,0],[0,0,0],[0,0,0]]]
źródło
[([1, 0], [0, 1]), ([1, 0], [0, -1]), ([0, 1], [1, 0]), ([0, -1], [1, 0])]
dane wyjściowe są prawidłowe dla trzeciej skrzynki testowej? Jest to lista mieszana i krotka.[([1,0], ([1, 0}, ...
a to zapewni dodatkowe informacje.Odpowiedzi:
Galaretka ,
20151311 bajtówWypróbuj online!
tło
Jak większość rzeczy, to wyzwanie jest dość proste, gdy już zorientujesz się, co musisz zrobić. I ostatecznie to zrobiłem, po trzech usunięciach i jednym cofnięciu ...
Najpierw musimy obliczyć wymiary macierzy. Łatwiej to zrobić niż powiedziano: pierwszy element pierwszego elementu jest pierwszym rzędem pierwszej macierzy wyjściowej, więc jego długość jest równa liczbie kolumn kwadratowej macierzy wyjściowej.
Na przykład, jeśli dane wejściowe to
pierwszym elementem pierwszego elementu jest
[1, 0, 0]
, którego długość wynosi ℓ = 3 .Jeśli spłaszczimy dane wejściowe i podzielimy je na kawałki o tej długości, otrzymamy wszystkie wiersze macierzy wyjściowych, choć w niewłaściwej kolejności. Dla naszego przykładowego wejścia daje to
Aby uzyskać końcowy wynik, musimy najpierw podzielić tablicę wierszy na ℓ kawałków o równej długości. Dla naszego przykładowego wejścia daje to
Każda kolumna jest teraz jedną z macierzy wyjściowych, więc transponowanie powstałej macierzy tablic to wszystko, co pozostało do zrobienia. Dla naszego przykładowego wejścia to daje
zgodnie z życzeniem.
Jak to działa
źródło
Pyth , 12 bajtów
To jest port mojej odpowiedzi na żelki.
Wypróbuj online!
Jak to działa
Pyth analizuje program w następujący sposób (pseudo-kod).
Q jest zmienną, która przechowuje dane wejściowe. J jest niezdefiniowaną zmienną.
Najpierw
J = l(h(h(Q)))
przechowuje długość głowy (pierwszy element) głowy Q w J .Następnie
.n(Q)
wyrównuje Q ic(..., J)
dzieli wynik na kawałki o długości J .Następnie
c(J, ...)
dzieli wynik na J części.Wreszcie
C(...)
transponuje wynik.źródło
Pyth , 29 bajtów
Zestaw testowy.
Jak to działa
Algorytm
Pracujmy nad danymi wejściowymi
[[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
.Będziemy tutaj używać operacji na czystych ciągach.
Po pierwsze, dzielimy dane wejściowe przecinkami, które nie są częścią najgłębszej listy (odbywa się to przez dzielenie wyrażenia regularnego
\B,
):Następnie znajdujemy indeks pierwszego podłańcucha, który nie zaczyna się od
[[
(odbywa się to poprzez sprawdzenie, czy znak przy indeksie1
to[
). W tym przypadku jest tak4
, ponieważ podciąg o indeksie 4 to taki,[0,1]]
który się nie zaczyna[[
.Następnie grupujemy podciągi w grupy po 4, a następnie transponujemy:
A następnie łączymy je przecinkami:
źródło
JavaScript (ES6),
132130 bajtówIstnieją cztery przypadki:
n
jednocześnie.n
th element.źródło
05AB1E , 11 bajtów
Port Dennisa odpowiedź ' . Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
Mathematica, 104 bajty
Wkład
wydajność
wkład
wydajność
{{{{0}}} i {{{-1}}, {{0}}, {{1}}} też działają
-11 bajtów dzięki Martinowi Enderowi
źródło