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]]]
[([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.