範囲内で複数の乱数を生成する


8

たとえば、100〜200の10個の乱数を生成したいとします(両方とも含まれています)。ランドでどうやって作るの?


2
どういう意味randですか?RANDOM変数?/dev/random/dev/urandom
muru

いいえ、単にbashから実行するrandコマンドを意味します。
ignacio caviedes

1
これrandかこれrand
muru

回答:


7

(OpenSSLからのものとは対照的に)パッケージrandからrandものを意味する場合、それは下限をサポートせず、上限のみをサポートします。あなたができることは、シフト下限からゼロへの追加、下限下限のトリックです:

$ rand -N 10 -M 100 -e -d '\n' | awk '{$0 += 100}1'
170
180
192
168
169
170
117
180
167
142
  • -N 必要な乱数の数です
  • -M数値rand出力の上限となるため、(max - min = 100)
  • -e -d '\n'区切り文字を改行に設定します。これはによる処理の便宜のためawkです。

次に、awkコードは各行を取り、100を追加します。


すばらしい、ムル。それでおしまい!Tksたくさん。
ignacio caviedes

ほらほら、ファンタスティコ、ムル。ミュシャグラシアス。
ignacio caviedes

6

使用python

#!/usr/bin/env python2
import random
for i in range(10):
    print random.randint(100, 200)

出力:

187
123
194
190
124
121
191
103
126
192

ここでは、のrandomモジュールを使用して、100から200(含まれている)()の間のpython10(range(10))個のランダムな整数を生成しましたrandom.randint(100, 200)


5

これがPerlの方法です:

$ perl -le 'print 100+int(rand(101)) for(1..10)'

129
197
127
167
116
134
143
134
122
117
Or, on the same line:

$ perl -e 'print 100+int(rand(101))." " for(1..10); print "\n"'
147 181 146 115 126 116 154 112 100 116 

/dev/urandomここから改造し)を使うこともできます:

$ for((i=0;i<=10;i++)); do 
    echo $(( 100+(`od -An -N2 -i /dev/urandom` )%(101))); 
done
101
156
102
190
152
130
178
165
186
173
143

@ignaciocaviedesどういたしまして。ただし、ご検討ください受諾これらの答えの1を(perhapのmuruのあなたが望んでいたツールを使用している)、残りをupvotingの代わりに、コメントありがとう残します。それがここで感謝が表現される方法です。Y porque le escribiste en Castellano al Muru?Eltíoes de India!:P
terdon

@terdon私はあなたが何を言ったかわからない。Oo
ムル

4

あなたも使うことができますawk

$ awk -v min=100 -v max=200 -v freq=10 'BEGIN{srand(); for(i=0;i<freq;i++)print int(min+rand()*(max-min+1))}'
132
131
148
100
104
125
103
197
184
165

3

shufGNUのcoreutilsのから:

$ shuf -i 100-200 -n 10
159
112
192
140
166
121
135
120
198
139

Cuonglm、私の質問に対するあなたの答えが最良だと思います。それは有り難いです; どうもありがとうございました。
ignacio caviedes

2

使用できます$RANDOM

number=0   #initialize the number
FLOOR=100
RANGE=200
while [ "$number" -le $FLOOR ]
do
  number=$RANDOM
  let "number %= $RANGE"  # Scales $number down within $RANGE.
done
echo "Random number between $FLOOR and $RANGE $number"
echo

大丈夫、パビ。もう一度たくさんTks。
ignacio caviedes

1

バッシュバージョン

何も見事な- iカウンターとforループの単純なエミュレーションwhile。範囲はif . . . else . . .fi構造を使用して設定されます。補足:私のプロンプトは最初に作業ディレクトリ、次に入力領域なので、表示されているものと混同しないでください

$ ./bashRadom.sh 100 200                                                       
190
111
101
158
171
197
199
147
142
125

bashRadom.sh

#! /bin/bash

i=0; 
while [ $i -lt 10  ]; do 

  NUM=$RANDOM; 
  if [ $NUM -gt $1 ] && [ $NUM -lt $2  ]; then 
      echo $NUM; 
  else continue; 
  fi;
  i=$((i+1));

done

Cバージョン

これは、大学でCクラスを受講するときに使用したコードです。この質問に合うように追加した小さな編集は、(ソースに値をハードコーディングする代わりに)コマンドライン引数を使用することです

$ gcc randfunc.c   
$ ./a.out 100 200
100 
106 
155 
132 
161 
130 
110 
195 
105 
162 
187 

randfunc.c

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int randInt (int, int);

void
main (int argc, char *argv[])
{    
  int min = atoi (argv[1]), max = atoi (argv[2]), i = 0;
  srand (time (NULL));    

  for (i; i < 11; i++)
    {
      printf ("%d \n", randInt (min, max));
    }    
}    

int
randInt (int a, int b)
{
  int randValue;
  randValue = a + (int) rand () % (b - a + 1);
  return randValue;    
}

かなり似ている:askubuntu.com/a/621557/158442
muru

@muru誰かがすでに投稿したのを見なかった。Cバージョンも追加中です。Cに加えてbashバージョンを保持することは問題ありませんか?
Sergiy Kolodyazhnyy 2015

どちらにせよ、私は大丈夫です。
muru

あなたがCを使用するつもりなら、あなたは本当にとC ++を使用する必要がありますrandomライブラリ:stackoverflow.com/a/19728404/2072269stackoverflow.com/a/19666713/2072269
muru

@muru私はC ++に精通していません。これまでのところ、基本的なCにのみ精通しています。しかし、情報をありがとう^ _ ^
Sergiy Kolodyazhnyy 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.