# frozen_string_literal: true COLUMNS = 3 files = [] def run(files) served = serve(files) sliced = slice(served) filled = fill(sliced) arranged(filled) end # def serve(files) # Dir.glob('*').each do |file| # files = file # end # end def serve(files) files.concat(Dir.glob('*')) end 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 fill(sliced) array_size = sliced.map(&:size).max sliced.each do |slice| slice << '' while slice.size < array_size end sliced.transpose end def arranged(filled) element2 = filled.flatten.map(&:size).max filled.each do |arrange| arrange.each do |arranged| print arranged.ljust(element2 + 5) end puts end end 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| # ^^^^^^^