Ecco idiomaticish Rubino:
5.times do
puts (1..7).map { [0, 1].sample }.join
end
Diciamo scompattarlo:
5.times do...end
è abbastanza auto-esplicativo. Fai qualsiasi cosa tra do
e end
cinque volte.
(1..7)
genera un array con sette elementi. In realtà non ci importa cosa ci sia in questo momento. map
restituisce un nuovo array in cui ogni elemento è il risultato della chiamata di cosa c'è tra le parentesi. Quindi, sette volte chiameremo lo [0, 1].sample
e spremeremo i risultati in un array. Lo stesso sample
seleziona in modo casuale sia 0
o 1
. Infine, .join
trasforma una matrice in una stringa. Se avessimo detto .join('-')
, per esempio, avrebbe messo un trattino tra ogni elemento (1-0-0-1-1-1-0-1). Ma dal momento che non abbiamo specificato nulla, non mette nulla tra ogni elemento (10011101).
E ce l'hai.
Come altri hanno notato, per questo particolare problema è possibile fare cose più veloci e più brevi utilizzando il binario. Però non penso che questa sia la Ruby Way. Per quanto riguarda la velocità, "l'ottimizzazione prematura è la radice di tutti i mali", e se hai una violenta avversione al codice lento non dovresti codificare comunque Ruby. Per quanto riguarda la leggibilità, quella via potrebbe essere più breve, ma la modalità sopra è molto più chiara. "Oh, stiamo facendo qualcosa cinque volte, e stamperemo una sequenza di 7 sequenze casuali di 0 e 1 ... come una stringa". Sembra quasi inglese (se conosci la parola map (definizione tre)).
Fai stringa vuota. Generare un numero alla volta, ad esempio rand (0-1), e aggiungerlo alla stringa che era vuota all'inizio. Fatelo tutte le volte che volete le cifre. Non puoi trattare i numeri dei decimali in questo modo senza dire la lingua in un modo o nell'altro. Mi dispiace di non poter fare il codice per te - non ho installato un'implementazione ruby ... –
Hai cercato come funziona la funzione casuale? E sottrazione? E la terminazione del ciclo? –
Se è possibile stampare facilmente file binari, è possibile generare numeri da 0-127 e stampare il loro formato binario. – nhahtdh