挑战:
按字符计数的最短代码,将使用Middle-Square Method生成一系列(伪)随机数。
(伪)随机数生成的中方方法由 John Von Neumann 在 1946 年首次提出,定义如下:
R n+1 = 中((R n ) 2 , m)
例如:
3456 2 = 11943936
中(11943936)= 9439
9439 2 = 89094721
中(89094721)= 0947
947 2 = 896809
中(896809)= 9680
9680 2 = 93702400
中(93702400)= 7024
另一个例子:
843 2 = 710649
中(710649)= 106
106 2 = 11236
中(11236)= 123
123 2 = 15129
中(15129)= 512
512 2 = 262144
中(262144)= 621
621 2 = 385641
中(385641)= 856
856 2 = 732736
中(732736)= 327
327 2 = 106929
中(106929)= 069
69 2 = 4761
中(4761) = 476
476 2 = 226576
中(226576)= 265
的定义mid
:
显然,对于 的确切定义存在一些混淆mid
。出于本次挑战的目的,假设您正在提取与起始种子相同的位数。意思是,如果起始种子有 4 个数字,您将从中间提取 4 个数字。如果 起始种子有 3 个数字,您将从中间提取 3 个数字。
关于在找不到确切中间时提取数字,请考虑数字710649。如果要提取中间 3,则存在一些歧义(106或064)。在这种情况下,提取最接近字符串开头的 3。因此,在这种情况下,您将提取106。
一种简单的思考方法是在数字不正确的情况下将零填充到数字中。例如,如果您将前导零填充到710649您将得到0710649并且中间 3 位现在变为106。
测试用例:
不对种子的长度做任何假设。例如,您不能假设种子始终是 4 位数字
生成 4 位随机数的3456起始种子应生成以下系列(前 10 个):
9439、947、9680、7024、3365、3232、4458、8737、3351、2292
生成 4 位随机数的8653起始种子应生成以下系列(前 10 个):
8744、4575、9306、6016、1922、6940、1636、6764、7516、4902
生成 3 位随机数的843起始种子应生成以下系列(前 10 个):
106、123、512、621、856、327、69、476、265、22
生成 5 位随机数的起始种子45678应生成以下系列(前 10 个):
86479、78617、80632、1519、30736、47016、10504、3340、11556、35411
就前导零而言,答案是不应该显示前导零:)。