Diberikan array bilangan bulat 2D, mari kita urutkan baris dan kolomnya dalam blok. Ini berarti bahwa Anda hanya perlu mengurutkan baris atau kolom tertentu, tetapi menerapkan transformasi yang diperlukan untuk mengurutkannya ke setiap baris atau kolom lainnya dalam array 2D.
Aturan
- Input akan berupa array 2D integer dan integer 1-diindeks. Bilangan bulat ini akan mewakili baris yang akan diurutkan jika angka tersebut positif, atau kolom yang akan diurutkan jika jumlahnya negatif (atau sebaliknya yang Anda inginkan). Contoh: Diberikan
4x3
array (baris x kolom), Anda dapat mengurutkan kolom kedua dengan-2
argumen atau baris ketiga dengan3
argumen. Argumen kedua ini tidak akan pernah menjadi nol dan nilai absolutnya tidak akan pernah lebih besar dari dimensi array yang sesuai. - Output juga akan berupa array 2D bilangan bulat dengan transformasi yang diperlukan diterapkan untuk mengurutkan baris atau kolom yang diberikan. Atau Anda bisa menulis array ke STDOUT.
- Array output akan memiliki baris atau kolom yang ditentukan diurutkan dalam urutan menaik. Perlu diketahui bahwa ketika Anda perlu menukar dua angka berturut-turut, seluruh kolom tempat nomor tersebut akan ditukar. Dan ketika Anda perlu menukar dua angka dalam kolom, seluruh baris tempat nomor tersebut akan ditukar.
- Dalam kasus di mana angka yang sama muncul beberapa kali di baris / kolom yang akan diurutkan, akan ada beberapa solusi yang mungkin sesuai dengan cara Anda menukar nilai, lakukan saja sesuai dengan sisa baris / kolom yang akan ditukar.
Contohnya
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]
Ini adalah kode-golf , jadi semoga kode terpendek untuk setiap bahasa menang!
code-golf
array-manipulation
sorting
Charlie
sumber
sumber
Jawaban:
R , 55 byte
Cobalah online!
Menugaskan kembali
+
operator (sebenarnya fungsi dalam R) keorder
fungsi, yang mengembalikan indeks vektor dari terkecil ke terbesar. Maka itu hanya manipulasi array.sumber
R , 55 byte
Cobalah online!
Alternatif jawaban ngm ; fungsi rekursif yang terinspirasi oleh jawaban DimChtz
sumber
Matlab,
736247 byteCobalah secara Online!
-11 byte terima kasih kepada @Giuseppe.
-15 byte terima kasih kepada @LuisMendo.
sumber
Japt ,
1817 bytenegatif untuk baris dan positif untuk kolom
Cobalah online!
sumber
U
negatif - versi 17 byte sebelumnya berfungsi, meskipun.ß
yang secara otomatis diterapkanU
. Ini bisa menciptakan masalah dengan mencoba meneruskan string literal, tetapi tetap mengirim saran ke repo GitHub untuk penyelidikan lebih lanjut.05AB1E ,
252414 byteKekalahan -10 byte berkat @Emigna .
Menggunakan input bilangan bulat positif untuk mengurutkan baris, negatif untuk kolom.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
diø}Σ¹Ä<è]¹diø
bagian dari Anda, jadi saya tidak memposting jawaban terpisah.JavaScript (ES6), 90 byte
Cobalah online!
Bagaimana?
JS tidak memiliki metode transposisi asli, jadi kita perlu mendefinisikannya:
Fungsi utama:
sumber
MATL, 17 bytes
Try it online!
Or verify all test cases
Explanation
sumber
APL (Dyalog Classic), 23 bytes
Try it online!
sumber
Python 2,
7170 bytesTry it online!
If
n
is negative, the rows are sorted based on columnn
.Otherwise the matrix is transposed, sorted the same way, and transposed back again.
sumber
Jelly, 12 bytes
Try it online!
sumber
C# (.NET Core), 186 bytes
Try it online!
Ungolfed:
The shift function we'll use twice, so a function variable will save space. The function iterates through the horizontal dimension of the array on index, and adds every item on that index in of each horizontal array to a new output array (horizontally) - much the same as in Arnoud's JS solution.
Now the ordering is simple, order horizontal array by number-at-index (argument -1), optionally shifting the array before and after sorting.
Seen how the question talks about arrays specifically, we convert to array a few times (very, very wasteful). Feeling a bit silly to use such a verbose language in code golf hehe.
sumber
C# (.NET Core),
142/139138/135 bytes (and yet another -1 by Kevin)Try it online!
Ungolfed:
New all-inline approach; negative answer still orders arrays by element-at-index. Otherwise, a collection of value-index-pair is created of the array-at-index and sorted by value. This effectively creates a collection of indices in order of having-to-be-added. Then for each array, the elements in the predetermined positions are selected. Quite some trimming of code and ugly, ugly, ugly **silently sobs** reuse of input parameters is involved, and there you go ... 142 bytes.
Again, the arrays argument is strictly enforced, adding quite some overhead for .ToArray() calls.
135 bytes claim, eh?! C# 7.2 inferred value-tuples would trim an additional three bytes, but tio.run doesn't allow. Therefor, this is the answer i decided to post for easy verification.
sumber
(a,s)=>
can be a curryinga=>s=>
.(s<0)?
doesn't need the parenthesis, and-s-1
can be~s
. Try it online: 137 bytesJava (OpenJDK 8), 326 bytes
Try it online!
Well guys, this question was very frustrating for me, and I posted my answer KNOWING I was forgetting something, luckily we have legends like Kevin Cruijssen out here to help us out :)
Java (OpenJDK 8), 281 bytes
Try it online!
sumber
a->b->
instead of(a,b)->
and remove thereturn
-statement, since you are modifying the input-array. 281 bytes Still a nice answer, though. +1 from me. I did the challenge in 05AB1E, but wouldn't even have tried it in Java this time. ;)Clean, 95 bytes
Try it online!
sumber
Kotlin, 192 bytes
Try it online!
sumber
Ruby, 69 bytes
Try it online!
sumber
Red,
190185 bytesTry it online!
Explanation:
My actual solution is 175 bytes long, but it doesn't work in TIO. Here it is, working normalyl in the Red console:
Red, 175 bytes
sumber
VBA (Excel), 205 bytes
Yay! 2nd longest byte count! I didn't completely lose :D
Golfed:
This sorts all the data on the open (active) worksheet using UsedRange... which can be buggy, but should only contain cells that have been edited.
UnGolfed:
sumber
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
Defined so you can remove the.Sortfields.Clear
line as well.Perl 6, 43 bytes
Try it online!
Curried function.
Explanation
sumber
Physica, 45 bytes
Very similar to Arnauld's JS answer.
Try it online!
How it works?
A more elaborate and visual explanation can be found in the linked answer.
sumber
J, 32 bytes
Try it online!
Note: The
g=.
of the main verb doesn't count.An explicit version for the same bytes
J, 32 bytes
Try it online!
sumber
Clojure, 91 bytes
Argh,
apply map list
* 2.sumber