質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

4回答

1303閲覧

Rubyで7桁-7桁の数字の生成

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/11/17 13:46

編集2017/11/17 13:58

Rubyで7桁-7桁の重複しない数字を出力したい

  • 1桁目は0以外の数字
  • 5桁目は5しか入らない

そのような計14桁の数字列を1万個ぐらい生成するには、どのような処理をするのが良いでしょうか?

securerandomなど、色々試してみたんですが、うまくいきませんでした...
できるだけ、gemなどは使いたくありません。

ご教授よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

Takahito_Ogawa

総合スコア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
oskbt

総合スコア1895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Ruby

1char = [('0'..'9')].map { |i| i.to_a }.flatten 2p str = (0...10).map { char[rand(char.length)] }.join

たとえばこんな風にすると、ランダムな文字列が作れます。

あくまで参考なので、重複なしとか乱数の精度が云々とか、
細かい仕様を実装するのは自力でお願いします。

投稿2017/11/17 14:14

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

0-9999 の連番をとり12桁表記とし、1桁目に1、5桁目に5 を挿入すると良いです。

投稿2017/11/17 13:54

編集2017/11/17 13:55
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問