Dada uma matriz 2D de números inteiros, vamos classificar suas linhas e colunas em blocos. Isso significa que você só precisa classificar uma linha ou coluna, mas aplicar as transformações necessárias para classificá-la em todas as outras linhas ou colunas da matriz 2D.
Regras
- A entrada será uma matriz 2D de números inteiros e um inteiro indexado em 1. Esse número inteiro representará a linha a ser classificada se o número for positivo ou a coluna a ser classificada se o número for negativo (ou o contrário que você desejar). Exemplo: Dada uma
4x3
matriz (linhas x colunas), você pode classificar a segunda coluna com um-2
argumento ou a terceira linha com um3
argumento. Este segundo argumento nunca será zero e seu valor absoluto nunca será maior que a dimensão correspondente da matriz. - A saída também será uma matriz 2D de números inteiros com as transformações necessárias aplicadas para classificar a linha ou coluna especificada. Como alternativa, você pode simplesmente escrever a matriz em STDOUT.
- A matriz de saída terá a linha ou coluna especificada classificada em ordem crescente. Observe que quando você precisar trocar dois números seguidos, as colunas inteiras onde estão os números serão trocadas. E quando você precisar trocar dois números em uma coluna, as linhas inteiras onde estão os números serão trocadas.
- No caso em que o mesmo número aparecer várias vezes na linha / coluna a ser classificada, haverá várias soluções possíveis de acordo com a maneira como você troca os valores, apenas faça o mesmo com o restante das linhas / colunas a serem trocadas.
Exemplos
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]
Este é o código-golfe , portanto, pode ganhar o código mais curto para cada idioma!
code-golf
array-manipulation
sorting
Charlie
fonte
fonte
Respostas:
R , 55 bytes
Experimente online!
Reatribui o
+
operador (na verdade uma função em R) àorder
função, que retorna os índices de um vetor do menor para o maior. Então é apenas manipulação de array.fonte
R , 55 bytes
Experimente online!
Alternativa à resposta de ngm ; uma função recursiva que foi inspirada na resposta de DimChtz
fonte
Matlab,
736247 bytesExperimente Online!
-11 bytes graças a @ Giuseppe.
-15 bytes graças a @LuisMendo.
fonte
Japonês ,
1817 bytesnegativo para linhas e positivo para colunas
Experimente online!
fonte
U
é negativo - a versão anterior de 17 bytes funciona.ß
é automaticamente aplicadoU
. Isso pode criar problemas com a tentativa de passar cadeias literais, mas postar uma sugestão no repositório do GitHub de qualquer maneira para uma investigação mais aprofundada.05AB1E ,
252414 bytesWhopping -10 bytes graças a @Emigna .
Usa uma entrada inteira positiva para classificar as linhas, negativas para as colunas.
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
diø}Σ¹Ä<è]¹diø
qual é um subconjunto seu, por isso não estou postando uma resposta separada.JavaScript (ES6), 90 bytes
Experimente online!
Quão?
JS não tem método de transposição nativo, portanto, precisamos definir um:
Função principal:
fonte
MATL, 17 bytes
Try it online!
Or verify all test cases
Explanation
fonte
APL (Dyalog Classic), 23 bytes
Try it online!
fonte
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.
fonte
Jelly, 12 bytes
Try it online!
fonte
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.
fonte
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.
fonte
(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!
fonte
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!
fonte
Kotlin, 192 bytes
Try it online!
fonte
Ruby, 69 bytes
Try it online!
fonte
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
fonte
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:
fonte
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
fonte
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.
fonte
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!
fonte
Clojure, 91 bytes
Argh,
apply map list
* 2.fonte