Wir definieren eine Karte als eine Reihe von Schlüssel-Wert-Paaren. Für diese Herausforderung müssen Sie jeden der Werte einem zufällig ausgewählten Schlüssel zuweisen.
- Sie müssen die Werte zufällig mischen und die resultierende Karte ausgeben. Dies bedeutet, dass wir jedes Mal, wenn wir Ihr Programm ausführen, die Möglichkeit haben, eine andere Ausgabe zu erhalten
- Jede mögliche Permutation der Werte muss eine Wahrscheinlichkeit ungleich Null aufweisen.
- Alle Originalschlüssel und Originalwerte müssen im resultierenden Array erscheinen. Wiederholte Werte müssen im resultierenden Array gleich oft vorkommen.
Zum Beispiel, wenn Ihre Karte war:
[0:10, 1:10, 5:5]
Alle folgenden müssen eine Chance haben zu erscheinen:
[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]
Akzeptable Ein- / Ausgänge:
- Die Mutterkarte Ihrer Sprachen
- Sie können ein Array von Schlüssel-Wert-Paaren eingeben. Sie dürfen nicht zwei Arrays eingeben, eines mit Schlüsseln, das andere mit Werten.
- Sie können eine Zeichenfolgendarstellung der oben genannten verwenden
- Wenn Sie ein Array oder eine Karte eingeben, können Sie das ursprüngliche Objekt ändern, anstatt es zurückzugeben
- Der Eingabetyp muss mit dem Ausgabetyp übereinstimmen
- Wenn Sie ein Array eingeben, muss die Reihenfolge der Schlüssel beibehalten werden.
- Sie können davon ausgehen, dass die Schlüssel eindeutig sind, aber Sie können nicht davon ausgehen, dass die Werte eindeutig sind.
Dies ist ein Code-Golf , also antworte so kurz wie möglich
code-golf
array-manipulation
random
permutations
Nathan Merrill
quelle
quelle
[k, v]
oder wären[v, k]
sie akzeptabel?[k, v]
Antworten:
05AB1E , 5 Bytes
Eingabe ist eine Liste von Schlüssel-Wert-Paaren.
Probieren Sie es online aus!
quelle
Brachylog ,
1312 BytesProbieren Sie es online aus!
Erwartet eine Liste mit 2-Element-Listen als Eingabe.
Erläuterung
quelle
CJam, 9 Bytes
Eingabe ist eine Liste von Schlüssel-Wert-Paaren.
Testen Sie es hier.
Erläuterung
Alternative Lösung, gleiche Byteanzahl:
quelle
Gelee , 5 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
TEXt"
Python 2, 77 Bytes
Verwendet diese Option: Wenn Sie ein Array oder eine Karte eingeben, können Sie das ursprüngliche Objekt ändern, anstatt es zurückzugeben . Die Eingabe ist wie ein Wörterbuchliteral
{0: 10, 1: 10, 5: 5}
.Probieren Sie es online aus
Inspiration aus dieser SO-Antwort .
quelle
Python 3, 107 Bytes
Verwendet die native Wörterbuchstruktur von Python.
Vielen Dank an @ mbomb007 für das Speichern eines Bytes.
Ideone es!
quelle
from random import*
..keys()
. Das Iterieren eines Wörterbuchs iteriert über die Schlüssel. Verwenden Siereturn dict(zip(d, i))
anstelle der for-Schleife.Perl, 35 Bytes
Beinhaltet +2 für
-0p
Geben Sie jeden Schlüssel / Wert in einer STDIN-Zeile durch Leerzeichen getrennt an
shuffle.pl
::quelle
Mathematica, 32 Bytes
Eingabe ist eine Liste von Schlüssel-Wert-Paaren.
ist der Transpositionsoperator von Mathematica undRandomSample
kann zum Mischen einer Liste verwendet werden.quelle
PHP, 84 Bytes
Nimmt die Eingabe als serialisiertes Array auf und gibt dieselbe aus.
quelle
Clojure,
4034 BytesNimmt die Schlüssel und Werte von m (einer Karte), mischt die Werte und komprimiert sie in eine Karte.
quelle
PowerShell v2 +, 52 Byte
Nimmt die Eingabe als Array von Tupeln auf, was erheblich kürzer ist als die Verwendung eines
.GetEnumerator()
Hashs (was erforderlich wäre und was nicht).Wir schleifen das Eingabearray
|%{...}
, wobei jede Iteration das zweite Element herauszieht$_[1]
. Diese werdenSort-Object
mit dem{Get-Random}
als Sortierschlüssel versehen. Dadurch wird jedem Element eine zufällige Gewichtung von0
bis[Int32]::MaxValue
zum Sortieren zugewiesen . Diese werden in eine andere Schleife geleitet|%{...}
, wobei jede Iteration ein Tupel des entsprechenden ersten Elements des Tupels und die sortierte Zahl ausgibt.Beispiele
Die Beispiele hier enthalten eine zusätzliche
-join','
Ausgabe für die Tupelausgabe, damit sie auf der Konsole besser angezeigt wird, da die Standardausgabe für mehrdimensionale Arrays schwer zu lesen ist.Dies funktioniert auch für nicht ganzzahlige Werte ohne Änderungen.
quelle
JavaScript (ES6), 89 Byte
quelle
Perl 6 , 28 Bytes
Eingabe ist ein Hash
(Technisch gesehen würde jeder Wert mit einer
.keys
Methode und einer.values
Methode funktionieren, aber die Ausgabe ist ein Hash )Erläuterung:
Eine Variante, die für die anderen in Hash eingebauten Objekttypen funktionieren würde, ist:
.WHAT
für ein Objekt gibt den Typ zurück.quelle
R, 47 (28) Bytes
Ein bisschen spät zur Party, aber obwohl ich eine Lösung in R mit eingebauten Funktionen veröffentlichen würde.
Das, was R einem Array mit Schlüssel / Wert-Zuordnung am nächsten kommt, ist a
list
. Die folgende Funktion nimmt einlist
Objekt als Eingabe und gibt eine Liste mit gemischten Werten aus.Erklärt
Das eingebaute Objekt
setNames()
kann Objekten Namen zuweisen, indem es einenR-vector
Namen eingibt . Mischen Sie daher zuerst die,list
durchsample()
die die Paare gemischt werden, und weisen Sie dann die Namen in der ursprünglichen Reihenfolge mit zunames()
.Beispiel:
Wenn
x
angenommen wird, dass es definiert ist, ist kein Funktionsumbruch erforderlich, und das Programm wird auf 28 Byte reduziert.quelle
Java 7, 156 Bytes
Ungolfed:
Testcode:
Probieren Sie es hier aus.
Mögliche Ausgabe:
quelle