日刊 あおのうま Vol.2278(2017.06.26)【便利なライブラリに頼り過ぎ】

投稿者: | 2017/06/26

乱数 と 種

昨日に引き続き、プログラミング問題でじたばたしております。
なんとかSwift で再帰版を書いたは良いのですが、アルゴリズムそのものよりも乱数の生成で泣かされました。

import Foundation

srandom(Uint32(time(nil)))
func each_rand_seven(list: Array) -> Array {
  // let x = arc4random_form(10)
  let x = random() % 10
  let concated_list = list + [x]
  return x == 7 ? concated_list : each_rand_nine(concated_list)
}

print(each_rand_seven(list: []))

srandom(seed) を使って乱数初期位置を変えてやれば良いかと思ったのですが、結局seed の生成にtime を使うと秒単位になるので再帰処理内で呼び出すには刻みが大き過ぎるって言うね。

マイクロ秒からseed を作るようにすればええんかもしれませんが、それも何だかなあ。

とか思っていたら、別に再帰の中でsrandom() せずとも良いようで。*01と言うより再帰の都度srandom() 呼んでいたらえらいことになりますね。
関数の外でいっぺんsrandom(UInt32(time(nil))) を呼んでやったら、あっけなく都度乱数になりました。

脚注   [ + ]

01. と言うより再帰の都度srandom() 呼んでいたらえらいことになりますね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータがどう処理されているか知りたい方はこちらをお読みください