これが慣用的なRubyです:
5.times do
puts (1..7).map { [0, 1].sample }.join
end
それを開梱しましょう:
5.times do...end
かなり自明です。do
とend
5回の間で何でもします。
(1..7)
7つの要素を持つ配列を生成します。現在、実際に何が含まれているのかは気にしません。map
各要素が中括弧の間にあるものを呼び出した結果である新しい配列を返します。したがって、7回呼び出し[0, 1].sample
て、結果を配列に絞り込みます。もちろん、それsample
自体はランダムにまたはのいずれ0
かを選択します1
。最後.join
に、配列を文字列に変換します。たとえば.join('-')
、たとえば、各要素の間にハイフンを入れます(1-0-0-1-1-1-0-1)。ただし、何も指定しなかったため、各要素(10011101)の間に何も配置されません。
そして、あなたはそれを持っています。
他の人が指摘しているように、この特定の問題では、バイナリを使用することで、より速く、より短いことを行うことができます。しかし、これはRubyWayではないと思います。速度に関しては、「時期尚早の最適化はすべての悪の根源です」。スローコードを激しく嫌う場合は、とにかくRubyをコーディングするべきではありません。読みやすさに関しては、その方法は短いかもしれませんが、上記の方法ははるかに明確です。「ああ、私たちは5回何かをしている、そしてそれは7もの長さ...0と1のランダムなシーケンス...文字列として出力するだろう」。それはほとんど英語のように読めます(あなたが単語マップ(定義3)を知っているなら)。