`contents`はインデックス（順番）がキーになっているので、こういう場合は「配列の配列」で表現して添字でアクセスした方がデータとして奇麗かなあと思います :-)
```ruby
[{1=>"hello\n"}, {2=>"how\n"}, {1=>"aki\n"}, {1=>"san\n"}, {2=>"are\n"}, {3=>"you?\n"}]
→
[["hello\n", "how\n"], ["aki\n"], ["san\n", "are\n", "you?\n"]]
```

「配列の配列」で表現しておけば、そこから`max_lineno`も計算できる（`size`で`map`して`max`するとか）ので、繰り返し処理中から`if max_lineno < …`のところも無くせてすっきりできそう:bulb:
（今のコードだと、ファイルごとの行数を取りたいのに行毎に処理が走る感じになってしまっているというのも気になりポイントでした:monkey: ）
「配列の配列」を作れると、下の出力部分もシンプルにできそうな予感です :cat: