集合S = { s 1,s 2,… ,s n }的置换是一个双射函数π :S → S。例如,如果小号= { 1 ,2 ,3 ,4 }那么函数小号= { s1个,秒2,… ,sñ}π:S→ S小号= { 1 ,2 ,3 ,4 }π:x↦1+(x+1mod4)是一个置换:
π(1)=3,π(2)=4,π(3)=1,π(4)=2
我们还可以对无穷集进行置换,让我们以N为例:函数π:x↦x−1+2⋅(xmod2)是置换,交换奇数和偶数以两个为单位的整数。第一个元素如下:
2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,…
挑战
解决此难题的任务是编写一个在正自然数上实现任意1排列的函数/程序。解决方案的分数是将代码点与实现的置换映射后的总和。
例
假设我们采用上述Python实现的排列方式:
def pi(x):
return x - 1 + 2*(x % 2)
在线尝试!
字符的d
代码点为,。如果我们对每个角色执行此操作,则会得到:100pi(100)=99
99,102,101,31,111,106,39,119,42,57,9,31,31,31,31,113,102,115,118,113,109,31,119,31,46,31,50,31,44,31,49,41,39,119,31,38,31,49,42
所有这些映射字符的总和为,这将是该函数的分数。2463
规则
您将通过功能或程序实现置换π
- 给定自然数,返回/输出xπ(x)
- 对于这一挑战的目的并不包含N0
- 排列必须非平凡地排列的无限子集N
- 您的函数/程序不允许读取其自身的源代码
计分
得分是由该排列下所有代码点的总和得出的(零字节可能不是源代码的一部分)(这些代码点取决于您的语言2,您可以自由使用SBCS,UTF-8等)您的语言支持)。
得分最低的提交者获胜,最早的提交者打破了联系。
除了仅置换N的有限子集的置换,这意味着集合{x|π(x)≠x}必须是无限的。
如果可以提高分数,则可以例如使用UTF-8编码的Jelly提交而不是通常的SBCS。