ls
This commit is contained in:
parent
86ffd14ae8
commit
0ff33d2496
1 changed files with 52 additions and 39 deletions
91
ls.rb
91
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|
|
||||
# ^^^^^^^
|
||||
|
||||
|
|
Loading…
Reference in a new issue