tl; dr5つの結果による除算から配列を作成したい:
20 => [5,5,5,5]
16 => [5,5,5,1]
7 => [5,2]
私の現在の実装は単純ですが大きすぎます。どうすれば簡単かつ短くできますか?
max_count = 5
total_count = input_value
count_array = []
div = total_count / max_count
mod = total_count % max_count
div.times { count_array << max_count }
count_array << mod unless mod == 0
total_count
。div.times { count_array << max_count }
です [max_count] * count_array
max_count = 5
[*[max_count] * (input_value / max_count), input_value % max_count] - [0]
max_count = 5
n, mod = input_value.divmod(max_count)
[*[max_count] * n, mod] - [0]
最後の行は次のように書くこともできます:
(Array.new(n) { max_count } << mod) - [0]
またはStefanがコメントで提案したように、Numeric#nonzeroを使用しますか?:
Array.new(n, max_count).push(*mod.nonzero?)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加