Biorąc pod uwagę tablicę liczb całkowitych 2D, posortujmy jej wiersze i kolumny w bloki. Oznacza to, że musisz tylko posortować dany wiersz lub kolumnę, ale stosując transformacje potrzebne do posortowania go do każdego innego wiersza lub kolumny w tablicy 2D.
Zasady
- Wejście będzie dwuwymiarową tablicą liczb całkowitych i 1-indeksowaną liczbą całkowitą. Ta liczba całkowita będzie reprezentować wiersz do posortowania, jeśli liczba jest dodatnia, lub kolumnę do posortowania, jeśli liczba jest ujemna (lub w drugą stronę). Przykład: Biorąc pod uwagę
4x3
tablicę (wiersze x kolumny), możesz posortować drugą kolumnę z-2
argumentem lub trzeci wiersz z3
argumentem. Ten drugi argument nigdy nie będzie wynosił zero, a jego wartość bezwzględna nigdy nie będzie większa niż odpowiadający mu wymiar tablicy. - Wyjściem będzie również tablica liczb całkowitych 2D z zastosowanymi transformacjami do posortowania danego wiersza lub kolumny. Alternatywnie możesz po prostu napisać tablicę do STDOUT.
- Tablica wyjściowa będzie miała określony wiersz lub kolumnę posortowane w porządku rosnącym. Pamiętaj tylko, że kiedy trzeba zamienić dwie liczby z rzędu, całe kolumny, w których leżą liczby, zostaną zamienione. A kiedy trzeba zamienić dwie liczby w kolumnie, całe rzędy, w których leżą liczby, zostaną zamienione.
- W przypadku, gdy ta sama liczba pojawia się kilka razy w sortowanym wierszu / kolumnie, istnieje kilka możliwych rozwiązań w zależności od sposobu zamiany wartości, wystarczy postępować odpowiednio z resztą wierszy / kolumn do zamiany.
Przykłady
Positive indices for rows and negative indices for columns
[5 8 7 6 [1 3 2 4
1 3 2 4 order by -3 (3rd column) --> 9 6 3 0
9 6 3 0] 5 8 7 6]
[5 8 7 6 [9 6 3 0
1 3 2 4 order by -4 (4th column) --> 1 3 2 4
9 6 3 0] 5 8 7 6]
[5 8 7 6 [5 7 8 6
1 3 2 4 order by 2 (2nd row) --> 1 2 3 4
9 6 3 0] 9 3 6 0]
[5 8 7 6 [6 7 8 5
1 3 2 4 order by 3 (3rd row) --> 4 2 3 1
9 6 3 0] 0 3 6 9]
[1 2 [1 2 [3 2
3 2] order by -2 (2nd column) --> 3 2] or 1 2] (both are valid)
[7 5 9 7 [5 7 7 9 [5 7 7 9
1 3 2 4 order by 1 (1st row) --> 3 1 4 2 or 3 4 1 2
9 6 3 0] 6 9 0 3] 6 0 9 3]
To jest golf golfowy , więc może wygrać najkrótszy kod dla każdego języka!
code-golf
array-manipulation
sorting
Charlie
źródło
źródło
Odpowiedzi:
R , 55 bajtów
Wypróbuj online!
Ponownie przypisuje
+
operator (właściwie funkcję w R) doorder
funkcji, która zwraca indeksy wektora od najmniejszej do największej. To tylko manipulacja tablicą.źródło
R , 55 bajtów
Wypróbuj online!
Alternatywa dla odpowiedzi ngm ; funkcja rekurencyjna zainspirowana odpowiedzią DimChtza
źródło
Matlab,
736247 bajtówWypróbuj online!
-11 bajtów dzięki @Giuseppe.
-15 bajtów dzięki @LuisMendo.
źródło
Japt ,
1817 bajtówujemna dla wierszy i dodatnia dla kolumn
Wypróbuj online!
źródło
U
to, gdy jest ujemne - działa jednak poprzednia 17-bajtowa wersja.ß
tego automatycznie się stosujeU
. Może to powodować problemy z próbą przekazania literalnych ciągów znaków, ale mimo to opublikuj sugestię w repozytorium GitHub w celu dalszego zbadania.05AB1E ,
252414 bajtówOgromne -10 bajtów dzięki @Emigna .
Wykorzystuje dodatnią liczbę całkowitą do sortowania wierszy, ujemną dla kolumn.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
diø}Σ¹Ä<è]¹diø
twój podzbiór, więc nie zamieszczam osobnej odpowiedzi.JavaScript (ES6), 90 bajtów
Wypróbuj online!
W jaki sposób?
JS nie ma natywnej metody transpozycji, dlatego musimy ją zdefiniować:
Główna funkcja:
źródło
MATL , 17 bajtów
Wypróbuj online!
Lub sprawdź wszystkie przypadki testowe
Wyjaśnienie
źródło
APL (Dyalog Classic) , 23 bajty
Wypróbuj online!
źródło
Python 2 ,
7170 bajtówWypróbuj online!
Jeśli
n
jest ujemne, wiersze są sortowane na podstawie kolumnyn
.W przeciwnym razie matryca zostanie transponowana, posortowana w ten sam sposób i ponownie transponowana.
źródło
Galaretka , 12 bajtów
Wypróbuj online!
źródło
C # (.NET Core) , 186 bajtów
Wypróbuj online!
Nie golfowany:
Z funkcji shift skorzystamy dwa razy, więc zmienna funkcji pozwoli zaoszczędzić miejsce. Funkcja przechodzi przez poziomy wymiar tablicy na indeksie i dodaje każdy element na tym indeksie każdej tablicy poziomej do nowej tablicy wyjściowej (poziomo) - podobnie jak w rozwiązaniu Joud firmy Arnoud.
Teraz porządkowanie jest proste, uporządkuj tablicę poziomą według liczby na indeksie (argument -1), opcjonalnie przesuwając tablicę przed i po sortowaniu.
Widząc, jak pytanie dotyczy konkretnie tablic, kilka razy przekształcamy się w tablicę (bardzo, bardzo marnotrawstwo). Czuję się trochę głupio, używając tak pełnego języka w hehe golfowym.
źródło
C # (.NET Core) ,
142/139138/135 bajtów (i jeszcze jedno -1 przez Kevina)Wypróbuj online!
Nie golfowany:
Nowe całościowe podejście; odpowiedź przecząca wciąż porządkuje tablice według elementu po indeksie. W przeciwnym razie tworzona jest kolekcja pary wartość-indeks z tablicy-przy-indeksie i sortowana według wartości. To skutecznie tworzy zbiór indeksów w kolejności dodawania. Następnie dla każdej tablicy wybiera się elementy we wcześniej określonych pozycjach. Jest trochę przycinania kodu i brzydkie, brzydkie, brzydkie ** cicho szloch ** ponowne użycie parametrów wejściowych jest zaangażowane, i proszę bardzo ... 142 bajty.
Ponownie, argument tablic jest ściśle egzekwowany, dodając całkiem sporo narzutu dla wywołań .ToArray ().
135 bajtów roszczenia, co ?! Wnioskowane w krotce C # 7.2 wartości-topy przycinają dodatkowe trzy bajty, ale tio.run nie pozwala. Dlatego jest to odpowiedź, którą postanowiłem opublikować w celu łatwej weryfikacji.
źródło
(a,s)=>
może być currya=>s=>
.(s<0)?
nie potrzebuje nawiasu i-s-1
może być~s
. Wypróbuj online: 137 bajtówJava (OpenJDK 8) , 326 bajtów
Wypróbuj online!
Cóż, chłopaki, to pytanie było dla mnie bardzo frustrujące, a ja opublikowałem swoją odpowiedź WIEDZĄ, że o czymś zapomniałem, na szczęście mamy tutaj legendy takie jak Kevin Cruijssen , które mogą nam pomóc :)
Java (OpenJDK 8) , 281 bajtów
Wypróbuj online!
źródło
a->b->
zamiast(a,b)->
i usunąćreturn
-statement, ponieważ modyfikujesz tablicę wejściową. 281 bajtów Wciąż ładna odpowiedź. +1 ode mnie Podjąłem wyzwanie w 05AB1E, ale tym razem nawet nie spróbowałbym tego w Javie. ;)Czysty , 95 bajtów
Wypróbuj online!
źródło
Kotlin , 192 bajty
Wypróbuj online!
źródło
Rubin , 69 bajtów
Wypróbuj online!
źródło
Czerwony ,
190185 bajtówWypróbuj online!
Wyjaśnienie:
Moje rzeczywiste rozwiązanie ma 175 bajtów długości, ale nie działa w TIO. Oto działa normalnie w czerwonej konsoli:
Czerwony , 175 bajtów
źródło
VBA (Excel), 205 bajtów
Tak! Druga najdłuższa liczba bajtów! Nie straciłem całkowicie: D
Gra w golfa:
To sortuje wszystkie dane w otwartym (aktywnym) arkuszu za pomocą UsedRange ..., który może być błędny, ale powinien zawierać tylko edytowane komórki.
UnGolfed:
źródło
Sub d(a)
With Sheet1.Sort
.SortFields.Clear
.SortFields.Add IIf(a<0,Columns(Abs(a)),Rows(Abs(a)))
.SetRange Sheet1.UsedRange
.Orientation=(a<0)+2
.Apply
End With
End Sub
.SortFields
zdefiniowanego, więc możesz również usunąć.Sortfields.Clear
linię.Perl 6 , 43 bajtów
Wypróbuj online!
Funkcja curry.
Wyjaśnienie
źródło
Physica , 45 bajtów
Bardzo podobny do odpowiedzi JS Arnaulda .
Wypróbuj online!
Jak to działa?
Bardziej szczegółowe i wizualne wyjaśnienie można znaleźć w powiązanej odpowiedzi.
źródło
jot , 32 bajty
Wypróbuj online!
Zanotuj
g=.
Główny czasownik się nie liczy.Wersja jawna dla tych samych bajtów
J , 32 bajty
Wypróbuj online!
źródło
Clojure, 91 bajtów
Argh,
apply map list
* 2.źródło