обзор
В этой задаче ваша задача состоит в том, чтобы случайным образом генерировать монотонную математическую функцию между двумя наборами.
вход
Ваши входные данные представляют собой два натуральных числа s
и n
.
После получения этих входных данных ваша программа должна сгенерировать случайную математическую функцию f
из набора в . Другими словами, это «правило», которое принимает кортеж целых чисел между и и возвращает одно такое целое число. Дополнительно должен быть монотонным в следующем смысле. Если и два- кортежи такие, что выполняется для каждой координаты , то .{0,1,...,s-1}n
{0,1,...,s-1}
f
n
0
s-1
f
A
B
n
A[i] ≥ B[i]
i
f(A) ≥ f(B)
Точное распределение монотонных функций f
не имеет значения, если каждая такая функция имеет положительную вероятность генерации (при условии идеального ГСЧ).
Выход
Ваш вывод должен быть перечислением входов и выходов f
. Он должен содержать все n
наборы целых чисел между 0
и s-1
в некотором порядке, за каждым из которых следует соответствующий вывод f
. Точный формат вывода является гибким (в пределах разумного).
Примеры
Входы s = 3
и n = 2
могут производить выход
(0, 0) 0
(0, 1) 1
(0, 2) 2
(1, 0) 0
(1, 1) 1
(1, 2) 2
(2, 0) 1
(2, 1) 1
(2, 2) 2
Он содержит все пары в наборе {0, 1, 2}
ровно один раз, и за каждой из них следует ее f
-значение. Условие монотонности также выполнено. Кортежи приведены здесь в лексикографическом порядке, но это не обязательно.
В качестве другого примера, s = 2
и n = 4
может привести
(0, 0, 0, 0) 0
(0, 0, 0, 1) 0
(0, 0, 1, 0) 0
(0, 0, 1, 1) 0
(0, 1, 0, 0) 1
(0, 1, 0, 1) 1
(0, 1, 1, 0) 1
(0, 1, 1, 1) 1
(1, 0, 0, 0) 0
(1, 0, 0, 1) 1
(1, 0, 1, 0) 0
(1, 0, 1, 1) 1
(1, 1, 0, 0) 1
(1, 1, 0, 1) 1
(1, 1, 1, 0) 1
(1, 1, 1, 1) 1
Ниже приведены все возможные выходы для s = 2
и n = 2
(вплоть до переупорядочения кортежей); ваша программа должна случайно вывести один из них:
(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 0
-------
(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 0
(1,0) 1
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 1
(1,1) 1
-------
(0,0) 1
(0,1) 1
(1,0) 1
(1,1) 1
Правила и оценки
Вы можете написать полную программу или функцию. Побеждает меньшее количество байтов, и стандартные лазейки запрещены. Код с объяснением является предпочтительным.
Нет ограничений на временную сложность, но я дам бонус -15%, если ваше решение всегда гарантированно завершит работу через определенное время (в зависимости от входных данных и при условии, что идеальный ГСЧ работает в постоянном времени) ,