Subscribed unsubscribe Subscribe Subscribe

本当はSetじゃなくて

Ruby

昨日の続き.

そもそもこの問題ではどのファイルもアルファベット順にソート済みと期待できそう.そうであればsetもハッシュも作る必要はなくて,単に比較元のファイルを読み出しつつ,その他のファイルのパッケージ名と比較するのが一番速いと思う.なんだか似たような問題がSICPの集合のところで出てきたような気がしないでもない.

で,それを作ろうと思ったのだけれど,Rubyで外部イテレータを使う方法がわからないので擬似コードで書く.

IO.readlines(ARGV[0]).foreach do |pkg|
  case pkg <=> 比較対象のパッケージ名
  when -1
    print "not included"
    比較対象のイテレータを進めてもう一回比較 # どうやるの?
  when 0
    print "included"
    どちらのイテレータも進める # どうやるの?
  when 1
    次のpkg # 比較元にないパッケージが含まれているということなのでパス
end

こんな感じ? よくわからない.

メモメモ

  • {}じゃなくてdo endの方が一般的っぽい?
  • IO.readlinesというのがあるらしい.
  • ブロックの評価順序がよくわからない.openとかreadlinesはすべてreadしてからブロックを適用するの? それともHaskellみたいに必要な分しかreadしないの?
  • Rubyの外部イテレータ調べよう
  • 誰かコード書いてください.