Cel
Biorąc pod uwagę tablicę 2D o dowolnym rozmiarze, napisz program lub funkcję, aby przesunąć na przemian kolumny i wiersze
Przykład
a b c d e
f g h i j
k l m n o
Wszystkie elementy w pierwszej kolumnie przesuwają się o jeden wiersz w dół , w drugiej kolumnie przesuwają się o jeden wiersz, trzecie przesuwają się w dół o jeden wiersz itd., Owijając się, gdy osiągną krawędź.
k g m i o
a l c n e
f b h d j
Wszystkie elementy w pierwszym rzędzie przesuwają się w prawo , drugi w lewo , trzeci w prawo itp., Owijają się, gdy osiągną krawędź.
o k g m i
l c n e a
j f b h d
Będę podążał za tradycją wyboru najkrótszego działającego kodu jako najlepszej odpowiedzi
code-golf
array-manipulation
Karan Shishoo
źródło
źródło
Odpowiedzi:
Łuska , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
MATL , 13 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
J ,
26, 2119 bajtów-5 bajtów dzięki milom
Wyjaśnienie:
^:2
- powtórzyć dwukrotnie:@|:
- transponować i#\
- znajdź długość prefiksów (1, 2, 3 ... rzędy)_1^
- podnieś -1 do powyższych mocy, tworząc listę naprzemiennych -1 1 -1 1 ...|."_1~
- obróć każdy wiersz tablicy wejściowej z przesunięciem w stosunku do powyższej listyWypróbuj online!
Orginalna wersja:
Jak to działa
^:2
- powtórzyć dwukrotnie:|:
- transponować i|."0 1]
- obróć każdy wiersz tablicy wejściowej, przesunięcia na liście:@#
- liczba rzędów w tablicy($_1 1"0)
- na przemian _1 1 (3 -> _1 1 _1)Wypróbuj online!
źródło
_1 1..
przy użyciu(|."_1~_1^2|#\)@|:^:2
także2|
częściWolfram Language (Mathematica) , 55 bajtów
Wypróbuj online!
źródło
Python 2 , 83 bajty
Wypróbuj online!
źródło
APL + WIN, 30 bajtów
Monity o wprowadzenie ekranu tablicy 2d
źródło
APL (Dyalog Unicode) , 26 bajtów
Wypróbuj online!
Prefiks Dfn.
W jaki sposób?
źródło
APL (Dyalog Unicode) , 15 bajtów (SBCS)
Wypróbuj online!
źródło
JavaScript (ES6),
9491 bajtówPrawdopodobnie istnieje sposób golfisty, aby wykonać rotację ...
źródło
Pyth, 15 bajtów
Wypróbuj online
Wyjaśnienie
źródło
q / kdb + , 32 bajty
Rozwiązanie:
Przykład:
Wyjaśnienie:
Odwróć siatkę, aby zastosować obrót do kolumn , druga iteracja ponownie się odwróci, a zatem obrót zostanie zastosowany do wierszy w drugim przejściu.
Obrót opiera się na liście
-1 1 -1 1..
długości obracanego wiersza / kolumny.Od tej łatwiejszej do odczytania wersji oderwano zdrowe 9 bajtów
źródło
JavaScript (ES6),
11676 bajtówWypróbuj online!
Skomentował
źródło
Galaretka , 10 bajtów
Wypróbuj online!
źródło
Czysty , 93 bajty
Jako dosłownie funkcja częściowa, wygląda to jak twarz.
Wypróbuj online!
źródło
05AB1E , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
APL NARS, 36 bajtów, 18 znaków
Ten {⍵⌽⍨- × - \ ⍳≢⍵} obracałby każdy wiersz argumentu macierzy zgodnie z wektorem -1 1 -1 1 itd. (Który ma długość wektora długości wierszy macierzy argumentów). Test:
źródło
bash i in., 84
Niekonkurencyjne rozwiązanie powłoki.
Jest to oparte na funkcji, która zmienia kierunek obrotu rzędów. Ta sama procedura wykonana w transponowanym macierzy spowoduje obrócenie kolumn. Na przykład
transpose | rotate | transpose | rotate
.Obrót naprzemienny można wykonać na tablicach jednoznakowych w
sed
następujący sposób:Transpozycji można dokonać za pomocą
rs
lubdatamash
:Razem wzięte:
Wynik:
źródło