Rubyで7桁-7桁の重複しない数字を出力したい
- 1桁目は0以外の数字
- 5桁目は5しか入らない
そのような計14桁の数字列を1万個ぐらい生成するには、どのような処理をするのが良いでしょうか?
securerandom
など、色々試してみたんですが、うまくいきませんでした...
できるだけ、gemなどは使いたくありません。
ご教授よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
まず、4つのパートにわけて考えましょう。
パート1: 1桁目
パート2: 2〜4桁目
パート3: 5桁目
パート4: 6〜14桁目
1桁ずつ数字を生成していく愚直な方法を取ると、数字の生成パターンは2つあります。
パターン1: 0〜9のランダムな数字(パート2, 4)
パターン2: 1〜9のランダム数字(パート1)
Rubyで乱数を生成するには、Random.rand(n)
を使うのがいいでしょう。
これは0〜n-1までのいずれかの数値を等確率で生成するメソッドです。
たとえば、Random.rand(10)
で、0〜9のいずれかの数値を生成します。右端の数字は含まれないことに注意してください。また、このメソッドは数値を返すので数字を得るためには、文字列への変換が必要なことにも注意です。
パターン1: Random.rand(10).to_s
パターン2: (Random.rand(9) + 1).to_s
14桁の数字列を生成するプログラムは次のようになります。
Ruby
1def zero_to_nine() 2 Random.rand(10).to_s 3end 4 5def one_to_nine() 6 (Random.rand(9) + 1).to_s 7end 8 9def generate_random_string() 10 random_string = one_to_nine 11 for i in 2..4 do 12 random_string += zero_to_nine 13 end 14 random_string += '5' 15 for i in 6..14 do 16 random_string += zero_to_nine 17 end 18 return random_string 19end
最後にこれを1万個生成しましょう。
random_strings = Array.new for i in 1..10000 do random_strings.push(generate_random_string) end puts random_strings
投稿2017/11/17 14:30
総合スコア229
0
ベストアンサー
重複を処理しながら作成するようなループ処理をすればいいと思う。
1万個は30秒くらいで作成できた。
ruby
1result = [] 2 3loop{ 4 result << rand(1000..9999).to_s + rand(500..599).to_s + '-' + format("%07d",rand(10000000)) 5 result.uniq! 6 break if result.count == 10000 7} 8 9puts result 10
投稿2017/11/17 14:17
編集2017/11/17 14:38総合スコア1895
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
0-9999 の連番をとり12桁表記とし、1桁目に1、5桁目に5 を挿入すると良いです。
投稿2017/11/17 13:54
編集2017/11/17 13:55退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。