uetennis’s diary

プログラミングについて学んだ事やライフハックについてかきます

Rubyの`transpose`とメイドさんと肉のハナマサ

0時から3時まで

どうやら私はtransposeから嫌われているようだ。 全然できない。 そんなことを考えながら、日報を読んだ! どうやら、[061] lsコマンド #5 | FJORD BOOT CAMP(フィヨルドブートキャンプ)

each_sliceだと余りにnilが入らないため、transposeを使うのに都合が悪かった。(上の例でいうと、["tea", nil, nil]になってほしかった) 調べたところActiveSupportのin_group_ofを使うといいと分かった。

なるほど~それを使おうと思ったら、

ls コマンドを作る | FJORD BOOT CAMP(フィヨルドブートキャンプ)

gemを使わずにRubyの標準ライブラリのみで実装してみてください。どうしてもgemに頼らざるを得なかった場合は提出時にその旨コメントしてください。

なんと!今はダメでした。けど、考え方はわかったぞ! 色々と手を動かした。どうやら、上手く行きそうだ! これでtranepose使えそうだ。

b = (1..10).map{|i| i.to_s.ljust(30)}
a = []
b.each_slice(3) do |x|
  a << x
end
if a[-1].size == 1
  a[-1].push(nil, nil)
else x[-1].size == 2
  a[-1].push(nil)
end
puts a.transpose.join(" ")

11時から15時まで

夜ふかししてたら、遅く起きた。午前中の勉強は諦めた。 秋葉原に買い物に行く。人が多い、メイドさんも多い。なるほど!今日は土曜日だ!人とメイドさんの多さで気づいた。 途中まで、涼しかったが日が照ってきて熱くなり、マスクが蒸れてきた。 100ショップに買い物行く途中に、メイドさんにたくさん声をかけられた。何度も「ごめんなさい」と言って、100ショップに向かった。忍者の格好したメイドさんに、声をかけられ、「ごめんなさい」と断ったら、「かたじけない」と言われた。ちょっと印象に残った。 100ショップ行った後、肉のハナマサに行った。 カレーのフレーク1kgと材料と気になってプロが使う納豆を買った。 「トクバイというアプリで肉のハナマサの最新情報をゲット」というポスターがあって、インストールした。

昼ご飯は、さつまいものカレーを作って食べた。

15時から19時まで

rubyで絶対pathについて調べた! Dir.glob()を使うときは、パスを絶対パスに変換してから – 山本隆の開発日誌

様々なディレクトリのパスを取得する/パスを加工する | まくまくRubyノート

ターミナルでやったが順番が違う。

まだ順番が違うみたいだな。。下記は失敗コード。

class LsCommand
  def call
    file_join
  end

  def transpose_test
    a = []
    a << test
    a.transpose
  end

  def file_join
    trans_pose.join("")
  end

  def trans_pose
    slice.transpose
  end

  def slice
    a = []
    just.each_slice(3) do |x|
      a << x
    end
    case
    when a[-1].size == 3
      # 何もしない
    when a[-1].size == 2
      a[-1].push(nil)
    when a[-1].size == 1
      a[-1].push(nil, nil)
    end
    a
  end

  def just
    a = []
    not_option.map do |x|
      a << x.ljust(24)
    end
    a
  end

  def not_option
    Dir.glob("*").sort
  end
end
puts LsCommand.new.call

本場のlsコマンド3列の時の文字数が24文字と気づいたのは良しとするか。

夕ご飯はインスタントで博多ラーメン食べた。お湯入れすぎで微妙な味だった。ラーメン食べながらハイキュー!!というアニメを観た。

23時から25時まで

transposeの理解が足りてないことに気づいた!行が14行あり、14の要素ずつほしいには下記の通りすればいいと気づけて良かった!

Array#transpose (Ruby 2.7.0 リファレンスマニュアル)

a = []
just.each_slice(14) do |x|
  a << x
end

やったー!each_slicewhileで、ActiveSupportin_group_of ぽい処理をすることができた。

a = %W(aa, bb, cc, dd)
p a.class
p a.size
b = []
a.each_slice(3) do |x|
  b << x
end
while b.size < 3
  b[-1].push(nil)
  break if b[-1].size == 3
end
p b
(m・_・bp) 1:09 ~/Desktop/vsnote2.0/kadai/lsコマンド % ruby memo.rb
Array
4
[["aa,", "bb,", "cc,"], ["dd", nil, nil]]

感想

結構すすんで良かった!明日はarlオプションを連携させたい。