Огляд
У цьому завданні ваше завдання полягає в випадковому генеруванні монотонної математичної функції між двома множинами.
Вхідні дані
Ваші входи - це два натуральних числа sта n.
Отримавши ці входи, ваша програма генерує випадкову математичну функцію fз набору на . Іншими словами, це "правило", яке приймає в собі цілу кількість цілих чисел між і і повертає одне таке ціле число. Крім того, має бути монотонним у наступному сенсі. Якщо і є два парних таких, що мають місце для кожної координати , то .{0,1,...,s-1}n{0,1,...,s-1}fn0s-1fABnA[i] ≥ B[i]if(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, який працює в постійний час) .