Definiujemy mapę jako zestaw par klucz-wartość. W tym wyzwaniu musisz wziąć każdą z wartości i przypisać ją do losowo wybranego klucza.
- Musisz losowo przetasować wartości i wydrukować wynikową mapę. Oznacza to, że za każdym razem, gdy uruchamiamy Twój program, mamy szansę uzyskać inną wydajność
- Każda możliwa permutacja wartości musi mieć niezerową szansę pojawienia się.
- Wszystkie oryginalne klucze i oryginalne wartości muszą pojawić się w wynikowej tablicy. Powtarzane wartości muszą pojawiać się tyle samo razy w wynikowej tablicy.
Na przykład, jeśli twoja mapa to:
[0:10, 1:10, 5:5]
wszystkie poniższe muszą mieć szansę pojawienia się:
[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]
Dopuszczalne wejścia / wyjścia:
- Natywna mapa Twoich języków
- Możesz wprowadzić tablicę par klucz-wartość. Ty może nie wejście 2 tablice, jeden z klawiszy, druga z wartościami.
- Możesz użyć reprezentacji ciągu dowolnego z powyższych
- Jeśli wprowadzisz tablicę lub mapę, możesz zmodyfikować oryginalny obiekt zamiast zwracać
- Typ wejściowy musi być zgodny z typem wyjściowym
- Jeśli wprowadzisz tablicę, kolejność kluczy musi być zachowana.
- Możesz założyć, że klucze są unikalne, ale nie możesz założyć, że wartości są unikalne.
To jest golf-golf, więc odpowiedz tak krótko, jak to możliwe
code-golf
array-manipulation
random
permutations
Nathan Merrill
źródło
źródło
[k, v]
czy byłyby[v, k]
do przyjęcia?[k, v]
Odpowiedzi:
05AB1E , 5 bajtów
Dane wejściowe to lista par klucz-wartość.
Wypróbuj online!
źródło
Brachylog ,
1312 bajtówWypróbuj online!
Oczekuje listy 2-elementowych list jako danych wejściowych.
Wyjaśnienie
źródło
CJam, 9 bajtów
Dane wejściowe to lista par klucz-wartość.
Sprawdź to tutaj.
Wyjaśnienie
Alternatywne rozwiązanie, ta sama liczba bajtów:
źródło
Galaretka , 5 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
TEXt"
Python 2, 77 bajtów
Korzysta z tej opcji: jeśli wprowadzisz tablicę lub mapę, możesz zmodyfikować oryginalny obiekt zamiast zwracać . Wejście jest dosłowne jak słownik
{0: 10, 1: 10, 5: 5}
.Wypróbuj online
Inspiracja zaczerpnięta z tej SO odpowiedzi .
źródło
Python 3, 107 bajtów
Używa natywnej struktury słownika Pythona.
Dzięki @ mbomb007 za zapisanie bajtu.
Ideone to!
źródło
from random import*
..keys()
. Iteracja słownika polega na iteracji po klawiszach. Użyjreturn dict(zip(d, i))
zamiast pętli for.Perl, 35 bajtów
Obejmuje +2 za
-0p
Podaj każdy klucz / wartość oddzielone spacją w wierszu STDIN
shuffle.pl
:źródło
Mathematica, 32 bajty
Dane wejściowe to lista par klucz-wartość.
jest operatorem transpozycji Mathematiki iRandomSample
można go użyć do przetasowania listy.źródło
php, 84 bajtów
Pobiera dane wejściowe jako szeregową tablicę, generuje to samo.
źródło
Clojure,
4034 bajtówBierze klucze i wartości z m (mapa), tasuje wartości i zamyka je w mapę.
źródło
PowerShell v2 +, 52 bajty
Pobiera dane wejściowe jako tablicę krotek, co jest znacznie krótsze niż użycie skrótu (który wymagałby
.GetEnumerator()
i co by nie działało).Zapętlamy tablicę wejściową
|%{...}
, a każda iteracja wyciąga drugi element$_[1]
. Są one przesyłaneSort-Object
za pomocą{Get-Random}
jako klucza sortującego. Będzie to przypisać losowo wagi od0
celu[Int32]::MaxValue
do każdego elementu do sortowania. Są one przesyłane do innej pętli|%{...}
, z której każda iteracja generuje krotkę odpowiedniego pierwszego elementu krotki i posortowanej liczby.Przykłady
Przykłady tutaj mają dodatkowe
-join','
dane wyjściowe krotki, więc lepiej widać to na konsoli, ponieważ trudno jest odczytać domyślne dane wyjściowe dla tablic wielowymiarowych.Działa to również w przypadku wartości niecałkowitych bez modyfikacji.
źródło
JavaScript (ES6), 89 bajtów
źródło
Perl 6 , 28 bajtów
Dane wejściowe to skrót
(technicznie każda wartość z
.keys
metodą i.values
metoda działałaby, ale dane wyjściowe to skrót )Wyjaśnienie:
Wariant, który działałby dla innych typów obiektów typu Hash, jest:
.WHAT
na obiekcie zwraca typ.źródło
R, 47 (28) bajtów
Trochę późno na imprezę, ale mimo to opublikowałbym rozwiązanie w R za pomocą wbudowanych funkcji.
R najbardziej zbliżony do tablicy z odwzorowaniem klucza / wartości to
list
. Poniższa funkcja pobieralist
obiekt jako dane wejściowe i wyświetla listę z losowymi wartościami.Wyjaśnione
Wbudowany
setNames()
może przypisywać nazwy do obiektów, wprowadzając aR-vector
nazw. Dlatego najpierw należy potasować,list
wedługsample()
którego tasuje pary, a następnie przypisać nazwy w oryginalnej kolejności za pomocąnames()
.Przykład:
Jeśli
x
zakłada się, że jest zdefiniowany, nie ma potrzeby zawijania funkcji, a program zmniejsza się do 28 bajtów.źródło
Java 7, 156 bajtów
Nie golfowany:
Kod testowy:
Wypróbuj tutaj.
Możliwe wyjście:
źródło