Definimos un mapa como un conjunto de pares clave-valor. Para este desafío, debe tomar cada uno de los valores y asignarlos a una clave elegida al azar.
- Debe barajar aleatoriamente los valores y generar el mapa resultante. Esto significa que cada vez que ejecutamos su programa, tenemos la posibilidad de obtener un resultado diferente
- Cada posible permutación de los valores debe tener una probabilidad distinta de cero de aparecer.
- Todas las claves y valores originales deben aparecer en la matriz resultante. Los valores repetidos deben aparecer la misma cantidad de veces en la matriz resultante.
Por ejemplo, si su mapa era:
[0:10, 1:10, 5:5]
todo lo siguiente debe tener la posibilidad 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 / salidas aceptables:
- El mapa nativo de tus idiomas
- Puede ingresar una matriz de pares clave-valor. Es posible que no de entrada 2 arrays, uno con teclas, el otro con valores.
- Puede usar una representación de cadena de cualquiera de los anteriores
- Si ingresa una matriz o un mapa, puede modificar el objeto original en lugar de devolver
- El tipo de entrada debe coincidir con el tipo de salida.
- Si ingresa una matriz, se debe mantener el orden de las teclas.
- Puede suponer que las claves son únicas, pero no puede suponer que los valores son únicos.
Este es un código de golf , así que responda lo más breve posible
code-golf
array-manipulation
random
permutations
Nathan Merrill
fuente
fuente
[k, v]
o serían[v, k]
aceptables?[k, v]
Respuestas:
05AB1E , 5 bytes
La entrada es una lista de pares clave-valor.
Pruébalo en línea!
fuente
Brachylog ,
1312 bytesPruébalo en línea!
Espera una lista de listas de 2 elementos como entrada.
Explicación
fuente
CJam, 9 bytes
La entrada es una lista de pares clave-valor.
Pruébalo aquí.
Explicación
Solución alternativa, mismo recuento de bytes:
fuente
Jalea , 5 bytes
Pruébalo en línea!
Explicación
fuente
TEXt"
Python 2, 77 bytes
Utiliza esta opción: si ingresa una matriz o un mapa, puede modificar el objeto original en lugar de devolverlo . La entrada es un diccionario literal como
{0: 10, 1: 10, 5: 5}
.Pruébalo en línea
Inspiración tomada de esta respuesta SO .
fuente
Python 3, 107 bytes
Utiliza la estructura del diccionario nativo de Python.
Gracias a @ mbomb007 por guardar un byte.
Ideone it!
fuente
from random import*
..keys()
. La iteración de un diccionario itera sobre las teclas. Use enreturn dict(zip(d, i))
lugar del bucle for.Perl, 35 bytes
Incluye +2 para
-0p
Dé a cada clave / valor separados por espacio en una línea STDIN
shuffle.pl
:fuente
Mathematica, 32 bytes
La entrada es una lista de pares clave-valor.
es el operador de transposición de Mathematica yRandomSample
puede usarse para barajar una lista.fuente
php, 84 bytes
Toma la entrada como una matriz serializada, emite la misma.
fuente
Clojure,
4034 bytesToma las claves y los valores de m (un mapa), baraja los valores y los comprime en un mapa.
fuente
PowerShell v2 +, 52 bytes
Toma datos como una matriz de tuplas, que es significativamente más corta que usar un hash (lo que requeriría
.GetEnumerator()
y qué no funcionaría).Hacemos un bucle en la matriz de entrada
|%{...}
, cada iteración saca el segundo elemento$_[1]
. Esos se canalizanSort-Object
con la{Get-Random}
clave de clasificación. Esto asignará un peso azar0
a[Int32]::MaxValue
cada elemento para la clasificación. Estos se canalizan a otro bucle|%{...}
, y cada iteración genera una tupla del primer elemento correspondiente de la tupla y el número ordenado.Ejemplos
Los ejemplos aquí tienen un adicional
-join','
en la salida de tupla, por lo que se muestra mejor en la consola, ya que la salida predeterminada para las matrices multidimensionales es difícil de leer.Esto también funciona para valores no enteros sin modificaciones.
fuente
JavaScript (ES6), 89 bytes
fuente
Perl 6 , 28 bytes
La entrada es un hash
(técnicamente cualquier valor con un
.keys
método y un.values
método funcionaría, pero la salida es un hash )Explicación:
Una variante que funcionaría para los otros tipos de objetos construidos en Hash es:
.WHAT
en un objeto devuelve el tipo.fuente
R, 47 (28) bytes
Un poco tarde para la fiesta, pero publicaría una solución en R usando builtins.
Lo más cercano que R tiene a una matriz con asignación de clave / valor es a
list
. La siguiente función toma unlist
objeto como entrada y genera una lista con sus valores mezclados.Explicado
El incorporado
setNames()
puede asignar nombres a los objetos ingresando unoR-vector
de los nombres. Por lo tanto, primero baraje ellist
por elsample()
cual baraja los pares, y luego asigne los nombres en el orden original usandonames()
.Ejemplo:
Si
x
se supone que está definido, no es necesario ajustar la función y el programa se reduce a 28 bytes.fuente
Java 7, 156 bytes
Sin golf:
Código de prueba:
Pruébalo aquí.
Salida posible:
fuente