Uma matriz irregular é uma matriz em que cada elemento é uma matriz de número desconhecido de números inteiros positivos.
Por exemplo, as seguintes são matrizes irregulares:
[[1,2,3],[4],[9,10]] Shape: 3,1,2
[[1],[2],[3]] Shape: 1,1,1
[[1,2,3,4,5,6,8]] Shape: 7
As seguintes não são matrizes irregulares:
[1] Each element will be an array
[] The array will contain at least 1 element
[[1,2,3],[]] Each subarray will contain at least 1 integer
Você precisa inserir uma matriz irregular e retornar uma matriz irregular com os números inteiros embaralhados
- A matriz de saída deve ter a mesma forma que a matriz de entrada. Definimos a forma da matriz como o comprimento de cada sub-matriz.
- Cada número inteiro deve ter uma chance igualmente provável de aparecer em cada local possível.
- Você pode assumir que o acaso do seu idioma é aleatório.
Por exemplo, se eu passei em: [[4],[1,2,3],[4]]
, em seguida, [[1],[4,4,2],[3]]
seria uma saída válida, mas [[4,1,3],[3],[4]]
ou [[4],[4],[1,2,3]]
não.
code-golf
array-manipulation
random
Nathan Merrill
fonte
fonte
Respostas:
Jelly, 3 bytes na página de códigos de Jelly
Explicação:
Como o programa está incompleto (
ṁ
não possui um segundo argumento), o padrão é usar a entrada do programa; assim,ṁ
faz com que a saída tenha o mesmo padrão de sublista que a entrada.Experimente online!
fonte
F
eṁ
trabalho para múltiplas camadas de achatamento, não apenas um.)ṁ
pode ser qualquer coisa, não apenas uma lista simples. Por exemplo: tio.run/nexus/jelly#@/9wZ@P///@jow11FIxidRSijXUUTEC0qY6CWWzs/…PowerShell v2 +, 86 bytes
Funciona através da manipulação de strings. A entrada é passada como uma string que representa a matriz, em qualquer formato que funcione para o seu idioma. ;-)
-split
s fora a entrada com não dígitos,sort
s com base norandom
bloco de script (que atribuirá um peso aleatório diferente para cada entrada à classificação), armazena-o em$a
. Em seguida,split
a entrada é novamente, desta vez em dígitos, e para cada uma é gerado o valor atual (geralmente colchetes e vírgulas) concatenado com o número correspondente de$a
. Isso é-join
editado novamente em uma string e a saída é implícita.Exemplos
fonte
Python 2 , 89 bytes
Experimente online!
fonte
shuffle(r=sum(x,[]))
?JavaScript (ES6),
7875 bytesEsta é a primeira vez que me lembro de usar
.splice()
um desafio de código-golfe ...Você pode obter dois bytes usando a ordem aleatória da matriz:
No entanto, isso parece colocar o último número inteiro primeiro na maioria das vezes, então eu vou assumir que os números inteiros não são distribuídos uniformemente.
fonte
sort
não funciona corretamente quando recebe uma chave de comparação inconsistente. Mesmo que o aleatório do idioma seja aleatório, seu tipo não funcionará nessa situação, e é isso que está criando o viés que você está vendo. Como tal, acho que a segunda solução está incorreta.Ruby, 47 bytes
fonte
Braquilog , 17 bytes
Experimente online!
Explicação
Basicamente, criamos uma lista de sublistas com elementos variáveis que têm a mesma "forma" que a Entrada e, em seguida, declaramos que, se concatenarmos tudo em uma única lista, isso resultará em uma confusão da concatenação da entrada em uma única lista. .
fonte
Perl, 37 bytes
36 bytes de código +
-p
sinalizador.Para executá-lo:
Explicações:
fonte
05AB1E , 17 bytes
Experimente online!
Estou aguardando a solução 05AB1E ou 2sable usando algum recurso desinteressante / de moldagem que ainda não conheço :).
fonte
APL, 35 bytes
Eu mal estou derrotando Perl, tem que estar faltando algo.
Por exemplo:
Explicação:
⍳¨⍴¨⍵
: Para cada sub-matriz, obtenha uma lista dos índices{⍵+⊃⌽⍺}\
: Começando com o primeiro subconjunto, adicione o último valor no array a cada valor no próximo array.⊃¨
: obtenha os primeiros itens das matrizes, que são os pontos de partida(⍳⍴Z←∊⍵)∊
: armazene a matriz nivelada emZ
. Gere um vetor de bits onde os que marcam os locais onde as sub-matrizes devem começar.?⍨⍴Z
: gera uma permutação aleatória deZ
.Z[
...]
: permutarZ
.⊂⍨
: Divida a permutação em sub-matrizes de acordo com o vetor de bits.fonte
A⊣(∊A)←(∊A)[?⍨≢∊A←⎕]
Pitão, 15 bytes
Um programa que recebe a entrada de uma lista e imprime o resultado.
Suíte de teste
Como funciona
fonte
PHP , 105 bytes
reduzido para 105 bytes graças a
user59178
.Resposta original:
PHP , 132 bytes
fonte
$m=array_merge(...$i=$_GET[i]);
é 25 bytes mais curto$i=$_GET['i'];$m=call_user_func_array('array_merge',$i);
e faz a mesma coisa. Além disso, você pode soltar o{}
depois doforeach
para salvar mais 2 bytes.Bater,
63., 58 bytesEDITAS:
Nota:
O Bash não suporta realmente matrizes multidimensionais (elas só podem ser simuladas, até certo ponto); portanto, este programa aceitará uma representação de texto "serializada" de uma matriz robusta, conforme descrito na descrição da tarefa, por exemplo:
[[1,2,3],[4],[9,10]]
e fornecerá saída no mesmo formato.Golfe
Teste
Um bom bônus é que você pode alimentar matrizes robustas de profundidade arbitrária:
e ainda funcionará corretamente.
Experimente online!
fonte
Oitava, 60 bytes
fonte
MATLAB , 84 bytes
fonte
Java, 368 bytes
o método
static int[][] f( int[][] r ){...}
resolve o desafio. decidi rolar minha própria interface funcional para evitar uma importação e adicionar um método padrão para facilitar o usofonte
Mathematica, 67 bytes
Explicação: Isso embaralha a lista de posições de todos os números inteiros na matriz irregular 2D.
Union@@
é curto paraFlatten@
Nota:
{}
São usados colchetes ondulados em vez de colchetes[]
.fonte