Мы определяем карту как набор пар ключ-значение. Для этой задачи вам нужно взять каждое из значений и назначить их произвольно выбранному ключу.
- Вы должны случайным образом перемешать значения и вывести получившуюся карту. Это означает, что каждый раз, когда мы запускаем вашу программу, у нас есть шанс получить другой результат
- Каждая возможная перестановка значений должна иметь ненулевую вероятность появления.
- Все исходные ключи и исходные значения должны появиться в результирующем массиве. Повторяющиеся значения должны появляться в результирующем массиве одинаковое количество раз.
Например, если ваша карта была:
[0:10, 1:10, 5:5]
все следующее должно иметь шанс появиться:
[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]
Приемлемые входы / выходы:
- Родная карта ваших языков
- Вы можете ввести массив пар ключ-значение. Вы не можете вводить 2 массива, один с ключами, другой со значениями.
- Вы можете использовать строковое представление любого из вышеперечисленных
- Если вы введете массив или карту, вы можете изменить исходный объект вместо возврата
- Тип ввода должен соответствовать типу вывода
- Если вы вводите массив, порядок ключей должен быть сохранен.
- Вы можете предположить, что ключи являются уникальными, но вы не можете предположить, что значения являются уникальными.
Это Код-гольфтак ответь как можно короче
code-golf
array-manipulation
random
permutations
Натан Меррилл
источник
источник
[k, v]
или будут[v, k]
приемлемыми?[k, v]
Ответы:
05AB1E , 5 байтов
Ввод - это список пар ключ-значение.
Попробуйте онлайн!
источник
Брахилог ,
1312 байтПопробуйте онлайн!
Ожидает список 2-элементных списков в качестве входных данных.
объяснение
источник
CJam, 9 байт
Ввод - это список пар ключ-значение.
Проверьте это здесь.
объяснение
Альтернативное решение с тем же количеством байтов:
источник
Желе , 5 байт
Попробуйте онлайн!
объяснение
источник
TEXt"
Python 2, 77 байт
Использует эту опцию: если вы вводите массив или карту, вы можете изменить исходный объект вместо возврата . Ввод словарный словарь
{0: 10, 1: 10, 5: 5}
.Попробуйте онлайн
Вдохновение взято из этого SO ответа .
источник
Python 3, 107 байт
Использует собственную структуру словаря Python.
Спасибо @ mbomb007 за сохранение байта.
Идео это!
источник
from random import*
..keys()
. Перебор словаря перебирает ключи. Используйтеreturn dict(zip(d, i))
вместо цикла for.Perl, 35 байт
Включает +2 для
-0p
Задайте каждый ключ / значение через пробел в строке STDIN
shuffle.pl
:источник
Mathematica, 32 байта
Ввод - это список пар ключ-значение.
является оператором транспонирования Mathematica иRandomSample
может использоваться для перемешивания списка.источник
php, 84 байта
Принимает ввод как сериализованный массив, выводит то же самое.
источник
Clojure,
4034 байтаПринимает ключи и значения из m (карта), перемешивает значения и упаковывает их в карту.
источник
PowerShell v2 +, 52 байта
Принимает входные данные в виде массива кортежей, что значительно короче, чем использование хеша (что потребует
.GetEnumerator()
и вообще не сработает).Мы зацикливаем входной массив
|%{...}
, каждая итерация вытягивает второй элемент$_[1]
. Они передаютсяSort-Object
с{Get-Random}
помощью ключа сортировки. Это позволит назначить случайный вес от0
к[Int32]::MaxValue
каждому элементу для сортировки. Они передаются в другой цикл|%{...}
, причем каждая итерация выводит кортеж соответствующего первого элемента кортежа и отсортированного числа.Примеры
В приведенных здесь примерах есть дополнительный
-join','
вывод о кортеже, поэтому он лучше отображается на консоли, поскольку вывод по умолчанию для многомерных массивов трудно читать.Это работает для нецелых значений, а также без изменений.
источник
JavaScript (ES6), 89 байт
источник
Perl 6 , 28 байт
Ввод - это хеш
(технически любое значение с
.keys
методом и.values
методом будет работать, но на выходе будет хеш )Объяснение:
Вариант, который будет работать для других встроенных в Hash типов объектов:
.WHAT
объект возвращает тип.источник
R, 47 (28) байтов
Немного опоздал на вечеринку, но я бы опубликовал решение в R с использованием встроенных функций.
Самое близкое, что R имеет к массиву с сопоставлением ключ / значение, это a
list
. Следующая функция принимаетlist
объект в качестве входных данных и выводит список с перемешанными значениями.Разъяснения
Встроенный
setNames()
может назначать имена объектам путем вводаR-vector
имен. Следовательно, сначала перетасуйте, сlist
помощьюsample()
которого перетасуйте пары, а затем присвойте имена в исходном порядке, используяnames()
.Пример:
Если
x
предполагается, что он определен, нет необходимости в переносе функций, и программа сокращает до 28 байт.источник
Java 7, 156 байт
Ungolfed:
Тестовый код:
Попробуй это здесь.
Возможный вывод:
источник