Nous définissons une carte comme un ensemble de paires clé-valeur. Pour ce défi, vous devez prendre chacune des valeurs et les affecter à une clé choisie au hasard.
- Vous devez mélanger aléatoirement les valeurs et sortir la carte résultante. Cela signifie que chaque fois que nous exécutons votre programme, nous avons une chance d'obtenir une sortie différente
- Chaque permutation possible des valeurs doit avoir une chance non nulle d'apparaître.
- Toutes les clés et valeurs d'origine doivent apparaître dans le tableau résultant. Les valeurs répétées doivent apparaître le même nombre de fois dans le tableau résultant.
Par exemple, si votre carte était:
[0:10, 1:10, 5:5]
tous les éléments suivants doivent avoir une chance d'apparaître:
[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]
Entrées / sorties acceptables:
- Carte native de vos langues
- Vous pouvez entrer un tableau de paires clé-valeur. Vous ne pouvez pas entrer 2 tableaux, l'un avec des clés, l'autre avec des valeurs.
- Vous pouvez utiliser une représentation sous forme de chaîne de tout ce qui précède
- Si vous entrez un tableau ou une carte, vous pouvez modifier l'objet d'origine au lieu de retourner
- Le type d'entrée doit correspondre au type de sortie
- Si vous entrez un tableau, l'ordre des clés doit être conservé.
- Vous pouvez supposer que les clés sont uniques, mais vous ne pouvez pas supposer que les valeurs sont uniques.
Ceci est un code-golf , alors répondez le plus brièvement possible
code-golf
array-manipulation
random
permutations
Nathan Merrill
la source
la source
[k, v]
ou seraient-elles[v, k]
acceptables?[k, v]
Réponses:
05AB1E , 5 octets
L'entrée est une liste de paires clé-valeur.
Essayez-le en ligne!
la source
Brachylog ,
1312 octetsEssayez-le en ligne!
Attend une liste de listes à 2 éléments en entrée.
Explication
la source
CJam, 9 octets
L'entrée est une liste de paires clé-valeur.
Testez-le ici.
Explication
Solution alternative, même nombre d'octets:
la source
Gelée , 5 octets
Essayez-le en ligne!
Explication
la source
TEXt"
Python 2, 77 octets
Utilise cette option: Si vous entrez un tableau ou une carte, vous pouvez modifier l'objet d'origine au lieu de revenir . L'entrée est un dictionnaire littéral comme
{0: 10, 1: 10, 5: 5}
.Essayez-le en ligne
Inspiration tirée de cette réponse SO .
la source
Python 3, 107 octets
Utilise la structure du dictionnaire natif de Python.
Merci à @ mbomb007 d'avoir enregistré un octet.
Ideone it!
la source
from random import*
..keys()
. L'itération d'un dictionnaire se répète sur les touches. Utilisez à lareturn dict(zip(d, i))
place de la boucle for.Perl, 35 octets
Comprend +2 pour
-0p
Donnez chaque clé / valeur séparée par un espace sur une ligne STDIN
shuffle.pl
:la source
Mathematica, 32 octets
L'entrée est une liste de paires clé-valeur.
est l'opérateur de transposition de Mathematica etRandomSample
peut être utilisé pour mélanger une liste.la source
php, 84 octets
Prend l'entrée comme un tableau sérialisé, sort le même.
la source
Clojure,
4034 octetsPrend les clés et les valeurs de m (une carte), mélange les valeurs et les zippe dans une carte.
la source
PowerShell v2 +, 52 octets
Prend l'entrée sous la forme d'un tableau de tuples, ce qui est nettement plus court que l'utilisation d'un hachage (ce qui nécessiterait
.GetEnumerator()
et tout cela ne fonctionne pas).Nous bouclons le tableau d'entrée
|%{...}
, chaque itération tirant le deuxième élément$_[1]
. Ceux-ci sont acheminésSort-Object
avec le{Get-Random}
comme clé de tri. Cela attribuera un poids aléatoire de0
à[Int32]::MaxValue
à chaque élément pour le tri. Ceux-ci sont dirigés vers une autre boucle|%{...}
, chaque itération produisant un tuple du premier élément correspondant du tuple et le numéro trié.Exemples
Les exemples ici ont un supplément
-join','
sur la sortie de tuple, donc il est mieux affiché sur la console, car la sortie par défaut pour les tableaux multidimensionnels est difficile à lire.Cela fonctionne également pour les valeurs non entières sans aucune modification.
la source
JavaScript (ES6), 89 octets
la source
Perl 6 , 28 octets
L'entrée est un hachage
(techniquement, toute valeur avec une
.keys
méthode et une.values
méthode fonctionnerait, mais la sortie est un hachage )Explication:
Une variante qui fonctionnerait pour les autres types d'objets Hash similaires est:
.WHAT
sur un objet renvoie le type.la source
R, 47 (28) octets
Un peu tard pour la fête, mais je publierais une solution en R à l'aide de builtins.
La chose la plus proche de R à un tableau avec mappage clé / valeur est a
list
. La fonction suivante prend unlist
objet en entrée et génère une liste avec ses valeurs mélangées.Expliqué
La fonction intégrée
setNames()
peut attribuer des noms aux objets en saisissant unR-vector
des noms. Par conséquent, mélangez d'abord lelist
parsample()
lequel mélange les paires, puis attribuez les noms dans l'ordre d'origine à l'aide denames()
.Exemple:
Si
x
est supposé être défini, il n'est pas nécessaire d'envelopper la fonction et le programme se réduit à 28 octets.la source
Java 7, 156 octets
Non golfé:
Code de test:
Essayez-le ici.
Sortie possible:
la source