Огляд
У цьому завданні ваше завдання полягає в випадковому генеруванні монотонної математичної функції між двома множинами.
Вхідні дані
Ваші входи - це два натуральних числа 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
не має значення, до тих пір, поки кожна така функція має позитивну ймовірність виникнення (якщо вважати досконалий RNG).
Вихідні дані
Ваш результат повинен бути перерахуванням входів та результатів 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%, якщо ваше рішення завжди гарантовано закінчиться за певний час (залежно від вкладених даних та припускаючи досконалий RNG, який працює в постійний час) .