2016-11-11 5 views
1

Ich bin neu in Ruby. Ich möchte nur wissen, ob es eine Möglichkeit gibt, Zufallszahlen in der folgenden Weise zu erstellen:Rubin. Zufallszahlengenerator

1) Generieren Sie 45 Zufallszahlen.

2) erzeugten Zufallszahl kann nur bis zu 5 mal

ich den folgenden Ansatz versucht wiederholt werden.

45.times do |x| 
    puts x.rand(1..9) 
end 

Wie kann ich das maximale Auftreten einer Zahl von 5 erreichen?

+1

Benötigen Sie 45 Zufallszahlen im Bereich von 0 bis 5? – inaitgaJ

+0

nein. Ich wollte 45 Zufallszahlen erstellen. Wenn eine Zahl jedoch mehr als 5 erreicht, verwenden Sie diese Nummer nicht mehr in den Zufallszahlen. –

+1

@EjayTan Ihre Erklärung scheint ein bisschen kompliziert. Sie möchten ein gemischtes Array, das jede Zahl von 1 bis 9 genau 5 Mal enthält. – Stefan

Antwort

2

würde ich etwas tun:

Array.new(5) { (1..9).to_a }.flatten.shuffle 

Dies erzeugt ein Feld, in dem alle Anzahl Form 1 bis 9 vorhanden sind genau 5 mal aus und mischt das Array zufällig.

Je nach Bedarf können Sie dieses Array verwenden, wie es ist, oder pop die nächste Zufallszahl von ihm:

numbers = Array.new(5) { (1..9).to_a }.flatten.shuffle 

3.times do 
    puts numbers.pop 
end 

Mit pop gibt eine Zahl zurück und entfernt sie aus dem Array. Das bedeutet, dass nach 45 Kreisen das numbers Array leer ist.

+0

To könnte auch 'Array # *' verwenden, um 'flatten' zu vermeiden. "((1..9) .to_a * 5) .shuffle" – Stefan

+0

"3x" sollte wahrscheinlich "45x" sein. Wäre es nicht sauberer, Elemente einfach zu entfernen, bis das Array leer ist, anstatt die magische Zahl "45" drin zu haben? Etwas wie 'while (n = numbers.pop); setzt n; Ende. Beachten Sie auch, dass 'pop' das Element _last_ entfernt, das kontraintuitiv sein könnte. – Stefan

+0

@Stefan stimme ich völlig zu. Ich meinte den '3.x'-Teil nur als ein Beispiel, wie man' pop' verwendet, das leicht in die Konsole eingefügt werden kann. Ich denke, das OP möchte nicht nur ein Programm schreiben, das die Werte auf die Konsole ausgibt. Daher hängt es IMO von der Verwendung dieses Arrays nach dem Zufallsprinzip ab, wie er seinen Inhalt konsumieren möchte. Aber 'while' ist sicherlich besser als eine magische Zahl. Du hast recht. – spickermann