prendi un numero a caso fra 1 e 100, e gli altri li prendi fra 1 e 100 -
la
somma dei precedenti.
Grosso modo dovrebbe andare
----- Original Message -----
From: “david” [email protected]
To: “ruby-it” [email protected]
Sent: Monday, February 26, 2007 7:58 PM
Subject: [ruby-it] un insieme casuale la cui somma faccia uno?
nr_days = 5
Come fareste?
“Every normal man must be tempted at times to spit upon his hands, hoist
the bl
ack flag, and begin slitting throats.” - H.L. Mencken
Nah, era quello che avevo provato. Il problema è che la “varianza”
diminuisce man mano che pigli numeri random e diminuisci il max
possibile.
primo giro (total = 100):
days[0] = rand(total) #30?
total -= days[0]
al secondo secondo giro hai total = 70 e non possono capitare numeri
da 70 in sù… al terzo giro è peggio ancora… ecc
Altre idee?
stb wrote:
prendi un numero a caso fra 1 e 100, e gli altri li prendi fra 1 e
100 - la somma dei precedenti.
Grosso modo dovrebbe andare
----- Original Message ----- From: "david"
[1]<[email protected]>
To: "ruby-it" [2]<[email protected]>
Sent: Monday, February 26, 2007 7:58 PM
Subject: [ruby-it] un insieme casuale la cui somma faccia uno?
Problemino per voi:
1. prendi un numero (float) in input: total
2. prendi un numero (int) in input: nr_days
3. crea un array con un numero di elementi pari a nr_days: days
4. distribuisci total tra gli elementi di days in in maniera
casuale
di modo che la somma sia uguale a total
esempio:
total = 100
nr_days = 5
days = fa_la_cosa_magica()
# days = [30, 13 , 7, 26, 24]
check = 0
days.each{|d|
check += d
}
unless check == total
urla_di_dolore_and_strappa_capelli
end
puts days.to_s
Come fareste?
--
"Every normal man must be tempted at times to spit upon his hands,
hoist the bl
ack flag, and begin slitting throats." - H.L. Mencken
-------------------------------------------------------------------
-------------
_______________________________________________
Ml mailing list
[3][email protected]
[4]http://lists.ruby-it.org/mailman/listinfo/ml
_______________________________________________________________________
–
“Den som väntar pÃ¥ nÃ¥got gott väntar inte för länge. Den som väntar pÃ¥
någon so
m har gått får vänta länge. Den som har väntat för gott har väntat för
länge.”
Ummm… mi parli di pane, così all’ora di cena… Perfido!
baguette_length = 100
loaves = 10
cuts = Array.new(loaves - 1,0)
cuts.collect! do |cut|
rand(baguette_length) #?? ma la somma dei miei tagli supererà
il totale!
end
cuts.sort!
puts cuts.inspect
loaf_thickness = Array.new()
cuts.each_with_index do |cut,i|
loaf_thickness << cuts[i+1] - cut unless cuts[i+1].nil?
end
puts loaf_thickness.inspect + " Sum:
#{loaf_thickness.inject(0){|sum,i| sum += i}}"
Ma non va comunque bene. Dove sbaglio? Mi perdo un pezzo alla fine mi
pare…
chiaro scuro wrote:
On 2/26/07, david [1]<[email protected]> wrote:
Problemino per voi:
1. prendi un numero (float) in input: total
2. prendi un numero (int) in input: nr_days
3. crea un array con un numero di elementi pari a nr_days: days
4. distribuisci total tra gli elementi di days in in maniera
casuale
di modo che la somma sia uguale a total
esempio:
devi fare un reframe del problema.
prova a visualizzarlo così: total rappresenta la lunghezza di una
baguette
che devi dividere in nr_days pezzi. quindi devi distribuire
nr_days-1 tagli
sulla baguette per ottenere nr_days pezzi.
ogni taglio può cadere in una posizione casuale tra zero e total.
produci nr_total-1 tagli casualmente, sortali, e vedi quanta
baguette c'è
tra due tagli contigui.. quella è la dimensione di ogni pezzo di
baguette,
ovvero è il valore casuale che assegnerai a ogni giorno del tuo
problema
originario.
_______________________________________________
Ml mailing list
[2][email protected]
[3]http://lists.ruby-it.org/mailman/listinfo/ml
–
“Remember, always be yourself. Unless you suck.” - Joss Whedon
crea un array con un numero di elementi pari a nr_days: days
distribuisci total tra gli elementi di days in in maniera casuale
di modo che la somma sia uguale a total
esempio:
devi fare un reframe del problema.
prova a visualizzarlo così: total rappresenta la lunghezza di una baguette
che devi dividere in nr_days pezzi. quindi devi distribuire nr_days-1
tagli
sulla baguette per ottenere nr_days pezzi.
ogni taglio può cadere in una posizione casuale tra zero e total.
produci nr_total-1 tagli casualmente, sortali, e vedi quanta baguette
c’è
tra due tagli contigui… quella è la dimensione di ogni pezzo di baguette,
ovvero è il valore casuale che assegnerai a ogni giorno del tuo problema
originario.
il valore casuale dato dal taglio non rappresenta la lunghezza della fetta
che tagli, ma il punto della baguette in cui pratichi il taglio… dove 0 è
l’inizio della baguette e 1 la fine della baguette. in questo modo i tagli
sono distribuiti in modo veramente casuale e il totale è sempre uno.
mettici del fois gras e vedi che funziona
Cool Chiaro, bella soluzione.
Mi pare di ricordare che in Programming Pearls c’erano un po’ di
problemi di questo tipo che avevano a che fare con generazione di
valori random.
Ummm… mi parli di pane, così all’ora di cena… Perfido!
baguette_length = 100
loaves = 10
cuts = Array.new(loaves - 1,0)
cuts.collect! do |cut|
rand(baguette_length) #?? ma la somma dei miei tagli supererà
il totale!
il valore casuale dato dal taglio non rappresenta la lunghezza della
fetta
che tagli, ma il punto della baguette in cui pratichi il taglio… dove 0
è
l’inizio della baguette e 1 la fine della baguette. in questo modo i
tagli
sono distribuiti in modo veramente casuale e il totale è sempre uno.
mettici del fois gras e vedi che funziona
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.