programing

루비에서 난수를 얻는 방법

nasanasas 2020. 9. 29. 07:54
반응형

루비에서 난수를 얻는 방법


0사이의 난수를 어떻게 생성 n합니까?


사용하다 rand(range)

에서 루비 임의의 번호 :

6면 주사위 굴림을 시뮬레이션하기 위해 임의의 정수가 필요한 경우 다음을 사용 1 + rand(6)합니다.. 롤인 크랩은 2 + rand(6) + rand(6).

마지막으로 임의의 부동 소수점이 필요한 경우 rand인수없이 호출하십시오.


으로 마크 - 앙드레 Lafortune는 에 언급 (그것을 upvote에 가서) 아래에 그의 대답 , 루비 1.9.2 자체가 Random클래스 (마크 - 앙드레 자신이 있다는 디버그에 도움 , 따라서 1.9.2 대상 해당 기능을).

예를 들어, 10 개의 숫자를 추측해야하는게임에서 다음 과 같이 초기화 할 수 있습니다.

10.times.map{ 20 + Random.rand(11) } 
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]

노트 :

의 상응하는 이유입니다 Random.new.rand(20..30)20 + Random.rand(11)때문에, Random.rand(int)반환 "이 아닌 임의의 정수 크거나 제로에 동일 적은 인수보다 ." 20..3030을 포함하면 11을 제외한 0에서 11 사이의 임의의 숫자를 찾아야합니다.


(10은 포함, 42는 제외) rand(42-10) + 10사이의 난수를 얻는 데 사용할 수 있지만 Ruby 1.9.3 이후로 더 나은 방법이 있습니다. 여기서 호출 할 수 있습니다.1042

rand(10...42) # => 13

backportsgem 을 요구하여 모든 버전의 Ruby에서 사용할 수 있습니다.

Ruby 1.9.2는 또한 Random자신 만의 난수 생성기 객체를 만들 수 있도록 클래스를 도입했으며 멋진 API를 가지고 있습니다.

r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"

Random직접 호출 할 수 있도록 클래스 자체는, 임의의 발전기 역할을합니다 :

Random.rand(10...42) # => same as rand(10...42)

참고 사항 Random.new

대부분의 경우 가장 간단한 방법은 rand또는 Random.rand. 난수를 원할 때마다 새로운 난수 생성기를 만드는 것은 정말 나쁜 생각 입니다. 이렇게하면 랜덤 생성기 자체 의 속성에 비해 끔찍한 초기 시딩 알고리즘의 랜덤 속성을 얻을 수 있습니다 .

를 사용하는 경우 가능한 한 드물게Random.new 호출해야 합니다 (예 : 한 번만 호출 하고 다른 곳에서 사용).MyApp::Random = Random.new

사례 Random.new유용는 다음과 같다 :

  • 당신은 gem을 작성하고 있고 주요 프로그램이 의존 할 수있는 rand/ 의 순서를 방해하고 싶지 않습니다 Random.rand.
  • 별도의 재현 가능한 난수 시퀀스를 원합니다 (예 : 스레드 당 하나씩)
  • 재현 가능한 난수 시퀀스를 저장하고 다시 시작할 수 있기를 원합니다 ( Random객체가 마샬링 될 수 있으므로 쉽게 )

숫자뿐만 아니라 16 진수 또는 uuid를 찾는다면 SecureRandom모듈 ActiveSupport이 1.9.2+에서 루비 코어로 가는 길을 찾았다는 것을 언급 할 가치가 있습니다. 따라서 완전한 프레임 워크가 필요하지 않습니다.

require 'securerandom'

p SecureRandom.random_number(100) #=> 15
p SecureRandom.random_number(100) #=> 88

p SecureRandom.random_number #=> 0.596506046187744
p SecureRandom.random_number #=> 0.350621695741409

p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"

여기에 문서화되어 있습니다 : Ruby 1.9.3-모듈 : SecureRandom (lib / securerandom.rb)


rand방법 으로 난수를 생성 할 수 있습니다 . rand메서드에 전달 된 인수 integer또는 a 여야하며 range범위 내에서 해당하는 임의의 숫자를 반환합니다.

rand(9)       # this generates a number between 0 to 8
rand(0 .. 9)  # this generates a number between 0 to 9
rand(1 .. 50) # this generates a number between 1 to 50
#rand(m .. n) # m is the start of the number range, n is the end of number range

글쎄, 나는 그것을 알아 냈다. 분명히 rand라는 내장 (?) 함수가 있습니다.

rand(n + 1)

If someone answers with a more detailed answer, I'll mark that as the correct answer.


What about this?

n = 3
(0..n).to_a.sample

Simplest answer to the question:

rand(0..n)

You can simply use random_number.

If a positive integer is given as n, random_number returns an integer: 0 <= random_number < n.

Use it like this:

any_number = SecureRandom.random_number(100) 

The output will be any number between 0 and 100.


rand(6)    #=> gives a random number between 0 and 6 inclusively 
rand(1..6) #=> gives a random number between 1 and 6 inclusively

Note that the range option is only available in newer(1.9+ I believe) versions of ruby.


range = 10..50

rand(range)

or

range.to_a.sample

or

range.to_a.shuffle(this will shuffle whole array and you can pick a random number by first or last or any from this array to pick random one)


This link is going to be helpful regarding this;

http://ruby-doc.org/core-1.9.3/Random.html

And some more clarity below over the random numbers in ruby;

Generate an integer from 0 to 10

puts (rand() * 10).to_i

Generate a number from 0 to 10 In a more readable way

puts rand(10)

Generate a number from 10 to 15 Including 15

puts rand(10..15)

Non-Random Random Numbers

Generate the same sequence of numbers every time the program is run

srand(5)

Generate 10 random numbers

puts (0..10).map{rand(0..10)}

you can do rand(range)

x = rand(1..5)

Easy way to get random number in ruby is,

def random    
  (1..10).to_a.sample.to_s
end

Try array#shuffle method for randomization

array = (1..10).to_a
array.shuffle.first

Maybe it help you. I use this in my app

https://github.com/rubyworks/facets
class String

  # Create a random String of given length, using given character set
  #
  # Character set is an Array which can contain Ranges, Arrays, Characters
  #
  # Examples
  #
  #     String.random
  #     => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"
  #
  #     String.random(10)
  #     => "t8BIna341S"
  #
  #     String.random(10, ['a'..'z'])
  #     => "nstpvixfri"
  #
  #     String.random(10, ['0'..'9'] )
  #     => "0982541042"
  #
  #     String.random(10, ['0'..'9','A'..'F'] )
  #     => "3EBF48AD3D"
  #
  #     BASE64_CHAR_SET =  ["A".."Z", "a".."z", "0".."9", '_', '-']
  #     String.random(10, BASE64_CHAR_SET)
  #     => "xM_1t3qcNn"
  #
  #     SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"]
  #     BASE91_CHAR_SET =  ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS]
  #     String.random(10, BASE91_CHAR_SET)
  #      => "S(Z]z,J{v;"
  #
  # CREDIT: Tilo Sloboda
  #
  # SEE: https://gist.github.com/tilo/3ee8d94871d30416feba
  #
  # TODO: Move to random.rb in standard library?

  def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])
    chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flatten
    Array.new(len){ chars.sample }.join
  end

end

https://github.com/rubyworks/facets/blob/5569b03b4c6fd25897444a266ffe25872284be2b/lib/core/facets/string/random.rb

It works fine for me


How about this one?

num = Random.new
num.rand(1..n)

Don't forget to seed the RNG with srand() first.


use 'rand' function Just Like this

rand(10)

참고URL : https://stackoverflow.com/questions/198460/how-to-get-a-random-number-in-ruby

반응형