平方採中法をDr.Racketで表現する方法はありますか?
平方採中法は、生成する乱数の桁数を n としたとき、初期値 s の2乗を計算し、その数値を 2n 桁の数値とみて、(下の例のように 2 乗した桁数が足りないときは、0 を補います。)その中央にある n 個の数字を最初の乱数とします。次にこの乱数を 2 乗して、同じ様に、中央にある n 個の数字をとって、次の乱数とします。例えば、123 を初期値とすると
1232 = 00015129 → 0151
1512 = 00022801 → 0228
2282 = 00051984 → 0519
5192 = 00269361 → 2693
26932 = 07252249 → 2522
の様になります。この方法を用いて、初期値を入力とし乱数を 2個生成し出力するプログラムを作成しようと考えています。そのあと、テストもします。
(define (square x) (* x x))
(define (integer x) (+ x x))
(test-case
"Case 2 - Previous Number: 3456" (displayln "Previous: 3456")
(display "Square of Previous: ")(displayln (expt 3456 2))
(display "Expected: 9439")
(check-equal? (von-Neumann 3456) 9439))
ただ、この後、2乗したものから真ん中の桁だけを抽出する方法がおもいつきません。