2011-04-19 34 views

Respuesta

13

Tome su número de base, 1.000.000 y añada un número aleatorio entre 0 y hasta su máximo - Número de partida:

1_000_000 + Random.rand(10_000_000 - 1_000_000) #=> 3084592 
+0

Estoy usando ruby ​​1.8.7, Parece aleatorio 'no existe. es una gema? – Blankman

+0

@Blankman: ¿Intentó 'require 'random'', y también comprobando si solo es 1.9.2? –

+0

1.8.7 no tiene Aleatorio. Está en 1.9.2+. Instale la gema de backports y la heredará en 1.8.7, junto con muchas otras bondades jugosas. –

6

Es un método de instancia:

puts Random.new.rand(1_000_000..10_000_000-1) 
+2

'1_000_000 ... 10_000_000' es más Ruby-ish. – sawa

+0

@sawa esa fue mi primera versión, pero excluye 1_000_000. – steenslag

1

Esto generará un número aleatorio entre 1,000,000 y 9,999,999.

rand(10_000_000-1_000_000)+1_000_000 

Esto funciona en 1.8.7 sin ningún gems (backports, etc.).

0

Otra opción con el rubí 1.8.7 Compatibilidad:

rand (9999999999) .to_s.center (10, rand (9) .to_s) .to_i

1

O, en caso de actuación no es un problema y que no desea contar ceros:

(0...7).map { |i| rand((i == 0 ? 1 : 0)..9) }.join.to_i 
+0

Necesitaba una forma de evitar ceros –

1

me parece más legible:

7.times.map { rand(1..9) }.join.to_i 
+0

Mucho mejor, gracias. – Yimanei

Cuestiones relacionadas