总览
在此挑战中,您的任务是在两组之间随机生成单调数学函数。
输入值
您的输入是两个正整数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
带有-value。也满足单调性条件。元组在这里按字典顺序给出,但这不是必需的。
再举一个例子,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
规则和计分
您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。带有解释的代码是首选。
时间复杂度没有限制,但是如果您的解决方案始终保证在一定时间内完成(取决于输入,并假设恒定的RNG在恒定的时间运行),我将给予-15%的奖励。。