Definimos um mapa como um conjunto de pares de valores-chave. Para esse desafio, você precisa pegar cada um dos valores e atribuí-los a uma chave escolhida aleatoriamente.
- Você deve aleatoriamente embaralhar os valores e gerar o mapa resultante. Isso significa que cada vez que executamos seu programa, temos a chance de obter uma saída diferente
- Cada permutação possível dos valores deve ter uma chance diferente de zero de aparecer.
- Todas as chaves e valores originais devem aparecer na matriz resultante. Valores repetidos devem aparecer o mesmo número de vezes na matriz resultante.
Por exemplo, se o seu mapa era:
[0:10, 1:10, 5:5]
todos os itens a seguir devem ter a chance de aparecer:
[0:10, 1:10, 5:5] (original map)
[0:10, 1:5, 5:10]
[0:10, 1:10, 5:5] (technically the same map, but I swapped the two tens)
[0:10, 1:5, 5:10]
[0:5, 1:10, 5:10]
[0:5, 1:10, 5:10]
Entradas / saídas aceitáveis:
- Mapa nativo dos seus idiomas
- Você pode inserir uma matriz de pares de valores-chave. Você não pode inserir 2 matrizes, uma com chaves e outra com valores.
- Você pode usar uma representação em cadeia de qualquer uma das opções acima
- Se você inserir uma matriz ou um mapa, poderá modificar o objeto original em vez de retornar
- O tipo de entrada deve corresponder ao tipo de saída
- Se você inserir uma matriz, a ordem das chaves deverá ser mantida.
- Você pode assumir que as chaves são únicas, mas não pode assumir que os valores são únicos.
Este é um código-golfe , então responda o mais breve possível
code-golf
array-manipulation
random
permutations
Nathan Merrill
fonte
fonte
[k, v]
ou seriam[v, k]
aceitáveis?[k, v]
Respostas:
05AB1E , 5 bytes
Entrada é uma lista de pares de valores-chave.
Experimente online!
fonte
Braquilog ,
1312 bytesExperimente online!
Espera uma lista de 2 elementos como entrada.
Explicação
fonte
CJam, 9 bytes
Entrada é uma lista de pares de valores-chave.
Teste aqui.
Explicação
Solução alternativa, mesma contagem de bytes:
fonte
Gelatina , 5 bytes
Experimente online!
Explicação
fonte
TEXt"
Python 2, 77 bytes
Usa esta opção: Se você inserir uma matriz ou um mapa, poderá modificar o objeto original em vez de retornar . Entrada é um dicionário literal como
{0: 10, 1: 10, 5: 5}
.Experimente online
Inspiração tirada desta resposta SO .
fonte
Python 3, 107 bytes
Usa a estrutura de dicionário nativa do Python.
Obrigado a @ mbomb007 por salvar um byte.
Ideone it!
fonte
from random import*
..keys()
. A iteração de um dicionário itera sobre as teclas. Use emreturn dict(zip(d, i))
vez do loop for.Perl, 35 bytes
Inclui +2 para
-0p
Dê a cada chave / valor separado por espaço em uma linha STDIN
shuffle.pl
:fonte
Mathematica, 32 bytes
Entrada é uma lista de pares de valores-chave.
é o operador de transposição do Mathematica eRandomSample
pode ser usado para embaralhar uma lista.fonte
php, 84 bytes
Recebe a entrada como uma matriz serializada, produz o mesmo.
fonte
Clojure,
4034 bytesPega as chaves e os valores de m (um mapa), embaralha os valores e os fecha em um mapa.
fonte
PowerShell v2 +, 52 bytes
Recebe entrada como uma matriz de tuplas, que é significativamente mais curta do que usar um hash (o que exigiria
.GetEnumerator()
e outras coisas para funcionar).Fazemos um loop na matriz de entrada
|%{...}
, cada iteração puxando o segundo elemento$_[1]
. Aqueles são canalizadosSort-Object
com a{Get-Random}
tecla de classificação. Isso atribuirá um peso aleatório de0
para[Int32]::MaxValue
para cada elemento para classificação. Esses são canalizados para outro loop|%{...}
, com cada iteração produzindo uma tupla do primeiro elemento correspondente da tupla e o número classificado.Exemplos
Os exemplos aqui têm um adicional
-join','
na saída da tupla, para que seja mostrado melhor no console, pois a saída padrão para matrizes multidimensionais é difícil de ler.Isso funciona para valores não inteiros, bem como sem modificações.
fonte
JavaScript (ES6), 89 bytes
fonte
Perl 6 , 28 bytes
Input é um Hash
(tecnicamente, qualquer valor com um
.keys
método e um.values
método funcionaria, mas a saída é um Hash )Explicação:
Uma variante que funcionaria para os outros tipos de objeto integrados no Hash é:
.WHAT
em um objeto retorna o tipofonte
R, 47 (28) bytes
Um pouco atrasado para a festa, mas apesar de eu postar uma solução em R usando builtins.
A coisa mais próxima que R tem de uma matriz com mapeamento de chave / valor é a
list
. A função a seguir pega umlist
objeto como entrada e gera uma lista com seus valores embaralhados.Explicado
O builtin
setNames()
pode atribuir nomes a objetos inserindo umR-vector
dos nomes. Portanto, em primeiro baralhar olist
porsample()
que embaralha os pares, e depois atribuir os nomes na ordem original usandonames()
.Exemplo:
Se
x
for assumido como definido, não há necessidade de agrupar funções e o programa reduz para 28 bytes.fonte
Java 7, 156 bytes
Ungolfed:
Código do teste:
Experimente aqui.
Saída possível:
fonte