Weź jako dane wejściowe nie zagnieżdżoną tablicę. Zamień go w macierz, używając następującej metody:
Powiedzmy, że moja tablica jest [1, 2, 3, 4, 5]
Najpierw powtarzam tę tablicę 5 razy: (długość)
[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
Następnie czytam go wzdłuż przekątnych:
[[1],
[2, 1],
[3, 2, 1],
[4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2],
[5, 4, 3],
[5, 4],
[5]]
Spłaszczam tę tablicę i dzielę na pięć (długość):
[[1, 2, 1, 3, 2],
[1, 4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2, 5],
[4, 3, 5, 4, 5]]
To jest kod golfowy. Wygrywa najmniej bajtów.
Odpowiedzi:
05AB1E, 13 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Galaretka , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
L
zrobiłem dziwne rzeczy, dlatego użyłem rejestru: / Właśnie spróbowałem ponownie i działa ... zasadniczo tak samo, więc chyba po prostu usunę mój.Python 2,
10596 bajtów-1 i -4 i -4 bajty dzięki Flp.Tkc
Pętla for dodaje elementy jak w opisie, prawdziwa magia dzieje się w zipie, który jest stąd
źródło
JavaScript (ES6) 100
101 105Mniej golfa
Test
źródło
return
. Powinieneś zamieścić o tym wskazówkę w wątku końcówki ES6.eval
jest nawet lepszy tym razem :(MATL , 17 bajtów
Wypróbuj online!
Jak to działa
Poniższe objaśnienie wykorzystuje dane wejściowe
[1 2 3 4 5]
jako przykład. Aby wizualizować wyniki pośrednie, wstaw%
(symbol komentarza) po dowolnej instrukcji w kodzie.Zauważ, że
;
jest to separator wierszy dla macierzy. Podobnie[1 2]
jak wektor rzędowy, wektor[1; 2]
kolumnowy i[1 0; 0 1]
macierz tożsamości 2 × 2.źródło
JavaScript (ES6), 116 bajtów
Cóż, to początek ...
źródło
R, 84 bajtów
Odczytuje wejście ze standardowego wejścia i wysyła / zwraca macierz R.
Wyjaśniono
Najciekawszym aspektem tej odpowiedzi jest sposób pobierania przekątnych. Zasadniczo obiekt można podzielić za pomocą
split
funkcji, jeśli dostarczono obiekt zawierający czynniki, na które obiekt jest podzielony. Do stworzenia tych czynników możemy użyćcol
irow
które zwracają macierz zawierającą odpowiednio indeksy kolumny i wiersza. Biorąc różnice:row(m)-col(m)
otrzymujemy macierz:w którym każda przekątna jest jednoznacznie zidentyfikowana. Możemy teraz podzielić na podstawie tej macierzy i przekształcić ją w poszarpaną listę, stosując
split
:(Zwróć uwagę, jak nazwa każdego wektora odpowiada wartościom po przekątnej w powyższej macierzy).
Ostatnim krokiem jest spłaszczenie i przekształcenie go w matrycę formy:
źródło
Mathematica 93 bajty
Oto jak zwykle napisałbym ten kod (109 bajtów):
Ten wykres macierzy daje dobry pomysł ze struktury ze względu na sekwencyjnie rosnący wektor wejściowy.
Oto wykres macierzy z losowym wektorem wejściowym. Oczywiście pewna struktura wciąż istnieje.
źródło
Mathematica, 92 bajty
Nienazwana funkcja przyjmująca listę za argument. Mogą istnieć inne struktury do takiej funkcji, ale mam nadzieję, że grałem w tę strukturę całkiem dobrze ....
Pierwsza część
n=NestList[#2,(r=Reverse)@#,(l=Length@#)-1]&
definiuje funkcjęn
dwóch argumentów: pierwsza to lista długościl
, a druga to funkcja do zastosowania do list.n
stosuje tę funkcjęl-1
do odwróconej listy argumentów, zapisując wszystkie wyniki na liście wyników. (Definiowanier
il
po prostu gra w golfa.)n
jest wywoływany dwukrotnie na oryginalnej liście, raz z funkcją będącRest
(upuść pierwszy element listy) i raz z funkcją będącMost
(upuść ostatni element). Daje to wszystkie pożądane listy podrzędne, ale cała lista jest tam dwa razy (stąd dodatkowaMost
), a pierwsza połowa jest tam w odwrotnej kolejności (stądr[...]
). Wreszcie~ArrayReshape~{l,l}
zapomina o bieżącej strukturze listy i wymusza, aby była tablicąl
xl
.źródło
Mathematica, 85 bajtów
Dosłownie wykonanie sugerowanych kroków:
Moja intuicja mówi, że powinien istnieć sprytny sposób, aby
Part
zrobić to krócej, ale każda próba, którą podjąłem, była dłuższa niż 85 bajtów.źródło
Rubinowy (110 bajtów)
sort
Operacja nie może być wymagane, ale doc na przeliczalne # group_by nie gwarantuje uporządkowanie wartości w wartości hash (które są macierze), ale obecne wersje Ruby zapewnić jeden zamawiania spodziewałbym i kolejność musiałbym jeślisort
były usunięty z mojego kodu.Kroki są następujące.
Na koniec
f.to_a
zwraca tablicę pokazaną wcześniej.źródło