0x19f (Shinya Kato) の日報

主にプログラミング関連の話をします

6/21 OSわからん

OS自作入門』をやっているのだけれど, 各回でのコードの差分を追うのが結構しんどい. こういうのは思考停止で写経したいタイプなので, 前回までの自分で書いたコードと配布されているコードを見比べながら書き足している. 毎度忘れてしまうので, その時のシェルコマンドをメモ.

  1. 配布されているファイルをリネーム
    find ./ -type f | grep '\(\.c\|\.h\|\.nas\)' | xargs -n1 -Ifname mv fname fname.old
  2. 前回のディレクトリからファイルをコピー
    find 前回のディレクトリ -type f | grep '\(\.c\|\.h\|\.nas\)' | xargs -n1 -Ifname cp fname ./
  3. 今いるディレクトリからリネームしていたファイルを削除
    find ./ -type f | grep '\.old' | xargs -n1 rm

find, grep, xargsだけでファイルに対して一括で操作ができるのでとても便利. 特にxargsの-Iは覚えておくと表現できるもの増えるのでオススメ.

ちなみに本編の進捗自体はまだ7日目なのでアレ. 慣れない単語が多すぎるので少しづつメモをとっている. 自分で整理しながら勉強するなんてかなり久しぶり.

 

AOJ-ICPC

  • みさわさんの根付き木 | Aizu Online Judge
    構文解析してツリーを取り出して、取り出したツリーを合成して、それをまた文字列表現に直すのが少し面倒.
  • Step Aerobics | Aizu Online Judge

  • You Are the Judge | Aizu Online Judge
    正答数の降順, ペナルティの昇順, チームIDの昇順でソート. std::pairは便利だなぁ.

  • 夏合宿の朝は早い | Aizu Online Judge
    強連結成分分解して, 各人が他の人からモーニグコールされるかどうかを調べる. 連結成分毎に, 
    (1) 参照されていない人がある場合はその人たちが全員起きればOKなので, それらすべてが起きられる確率をかけ合わせる.
    (2) 全要素が参照されている時は閉路になっている(?)ので誰か一人が起きていればOK, つまり(1 - 全員が寝坊する確率)をかけ合わせる.
    ちなみに, 強連結成分分解にUnion Findを使うのって一般的なんでしょうか?

 

あと、DBスペ受かりました.

 

OSAの中間、解答と書いたこと全然違ったわ. ウケる(真顔).