チャレンジ:
Middle-Squareメソッドを使用して一連の(疑似)乱数を生成する文字数による最短のコード。
(疑似)乱数生成のミドルスクエア法は、1946年にジョンフォンノイマンによって最初に提案され、次のように定義されています。
R n + 1 = mid((R n)2、m)
例えば:
3456 2 = 11943936
mid(11943936)= 9439
9439 2 = 89094721
mid(89094721)= 0947
947 2 = 896809
mid(896809)= 9680
9680 2 = 93702400
mid(93702400)= 7024
もう一つの例:
843 2 = 710649
mid(710649)= 106
106 2 = 11236
mid(11236)= 123
123 2 = 15129
mid(15129)= 512
512 2 = 262144
mid(262144)= 621
621 2 = 385641
mid(385641)= 856
856 2 = 732736
mid(732736)= 327
327 2 = 106929
mid(106929)= 069
69 2 = 4761
mid(4761)= 476
476 2 = 226576
mid(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
先行ゼロに関する限り、答えは先行ゼロを表示するべきではないということです:)。