diff --git a/ls.rb b/ls.rb index 459d4a5..2abce11 100644 --- a/ls.rb +++ b/ls.rb @@ -1,56 +1,69 @@ # frozen_string_literal: true -items = [] +COLUMNS = 3 +files = [] -NUM_COLUMNS = 3 # 列幅の最大数 - -def main(items) - taken_items = take_items(items) - sliced_items = slice_items(taken_items) - sorted_items = sort_items(sliced_items) - display_items(sorted_items) +def run(files) + served = serve(files) + sliced = slice(served) + filled = fill(sliced) + arranged(filled) end -def take_items(items) - items.concat(Dir.glob('*')) +# def serve(files) +# Dir.glob('*').each do |file| +# files = file +# end +# end + +def serve(files) + files.concat(Dir.glob('*')) end -def slice_items(taken_items) - order_id = if (taken_items.size % NUM_COLUMNS).zero? - taken_items.size / NUM_COLUMNS.ceil # NUM_COLUMNSの倍数の時だけ、NUM_COLUMNSで割り込む - else - taken_items.size / NUM_COLUMNS.ceil + 1 # 最大NUM_COLUMNS列に収める - end - taken_items.each_slice(order_id).to_a +def slice(served) + element = if (served.size % COLUMNS).zero? + served.size / COLUMNS + else + served.size / COLUMNS + 1 + end + served.each_slice(element).to_a end -def sort_items(sliced_items) - if (0..NUM_COLUMNS).cover?(sliced_items.flatten.size) - sliced_items.flatten - else - max_size = sliced_items.map(&:size).max - sliced_items.each do |item| # サブ配列の要素数を揃える - item << nil while item.size < max_size - end +def fill(sliced) + array_size = sliced.map(&:size).max + sliced.each do |slice| + slice << '' while slice.size < array_size end - sliced_items.transpose + sliced.transpose end -def display_items(sorted_items) - max_word_count = sorted_items.flatten.compact.map(&:size).max - if (0..NUM_COLUMNS).cover?(sorted_items.flatten.size) - sorted_items.flatten.map do |item| - print item.to_s.ljust(max_word_count + 5) +def arranged(filled) + element2 = filled.flatten.map(&:size).max + filled.each do |arrange| + arrange.each do |arranged| + print arranged.ljust(element2 + 5) end puts - else - sorted_items.each do |items| - items.compact.each do |item| - print item.ljust(max_word_count + 5) - end - puts - end end end -main(items) +run(files) + +# ls.rb:13:11: W: [Correctable] Lint/UnusedMethodArgument: Unused method argument - files. If it's necessary, use _ or _files as an argument name to indicate that it won't be used. If it's unnecessary, remove it. You can also write as serve(*) if you want the method to accept any arguments but don't care about them. +# def serve(files) +# ls.rb:27:27: C: [Correctable] Style/SymbolProc: Pass &:size as an argument to map instead of a block. +# array_size = sliced.map { |array| array.size }.max +# ^^^^^^^^^^^^^^^^^^^^^^ +# ls.rb:34:1: C: Metrics/AbcSize: Assignment Branch Condition size for arranged is too high. [<5, 20, 6> 21.47/17] +# def arranged(filled) ... +# ^^^^^^^^^^^^^^^^^^^^ +# ls.rb:34:1: C: Metrics/MethodLength: Method has too many lines. [14/10] +# def arranged(filled) ... +# ^^^^^^^^^^^^^^^^^^^^ +# ls.rb:35:33: C: [Correctable] Style/SymbolProc: Pass &:size as an argument to map instead of a block. +# element2 = filled.flatten.map { |array| array.size }.max +# ^^^^^^^^^^^^^^^^^^^^^^ +# ls.rb:43:32: W: Lint/ShadowingOuterLocalVariable: Shadowing outer local variable - arrange. +# arrange.compact.each do |arrange| +# ^^^^^^^ +