CodeIQでの結城浩さんのTicketGobble問題。自分のCodeを確認してみる。

プログラム言語はruby。お手軽だもん。取り敢えずデータを読み込んで、何かしてる。覚えてる限りでは、国、出発日付、帰国日付をデータ化して、日付を見て国と国を繋げてる。ハッシュなデータを作ってるのか。んでもって組み合わせて行く。

最初にどこの国へ行くかは大事だから、それも選んでリスト化している。同じようにリストの最後の国候補も組み合わせの終了条件?として要りそうなのでこれもリスト化している。つまり、出発国リストから一つ選んで、そこからハッシュみながら次ぎ行けるとこを選んで、最後の国候補リストにあればそこで終わって枚数数えて更新。そのうち大きいのでてくるやんね。

すっかり忘れてるけどまあこんな感じ。

tary=[]
clst=[]
open("/Users/XXXXX/...../ProgramingProblem/ticketgobble/tickets.txt") {|file|
#open("/Users/XXXXX/...../ProgramingProblem/ticketgobble/ticketsmini.txt") {|file|      <-これは結城さんのより少し大きいテストデータを読む場合。こんな風に残してるからソースは汚い。
#open("/Users/XXXXX/...../ProgramingProblem/ticketgobble/five.txt") {|file|      
  while tkt = file.gets
    tkt.chomp!
    ctr=tkt.split(" ")[0]
    sdy=tkt.split(" ")[1].split("-")[0]
    sdd=((sdy.split("/")[0].to_i) -1)*40+sdy.split("/")[1].to_i  <---結城さんは月に100掛けてたけど僕は40掛けてた。
    gdy=tkt.split(" ")[1].split("-")[1]
    gdd=((gdy.split("/")[0].to_i) -1)*40+gdy.split("/")[1].to_i
    tary<<[sdd,gdd,ctr,tkt.split(" ")[1]]
    clst<  end
}
tary.sort!
#p tary.sort_by{|c| c[1]}
$pairhsh={}
$pairhsh.default=[]

tary.each{|lnd|
  dum=40*11+31
  tary.each{|nlnd|
    if nlnd[0]>lnd[1]
 if dum>nlnd[1]
   dum=nlnd[1]
 end
end
  }
  tary.each{|nlnd|
    if nlnd[0]>lnd[1] and nlnd[0]    $pairhsh[lnd[2]]=$pairhsh[lnd[2]]+[nlnd[2]]
 end
  }
}
#p $pairhsh
#p clst
slst=clst.clone
$glst=[]
clst.each{|cty|
  if $pairhsh[cty]==[]
 $glst< else
  $pairhsh[cty].each{|ncty|
   slst.delete(ncty)
    }
end
}
p slst
p $glst
p clst
cstp={}
cstp.default=0
slst.each{|c|
  cstp[c]=1
}
p cstp
cnt=1
gcnt=0
max=0
while cnt>0 and gcnt<30 do
gcnt=gcnt+1
cnt=0
clst.each{|c|
  if cstp[c]>0
 if max  max=cstp[c]
end
 $pairhsh[c].each{|cc|
 if cstp[cc]  cstp[cc]=cstp[c]+1
 if max  max=cstp[cc]
end
cnt=cnt+1
end
}
end
}
p cstp
p [cnt,max,gcnt]
end
ansl=[]
tary.sort_by{|c| c[1]}.each{|tc|
  ansl<<[tc[2],cstp[tc[2]]]
}
p ansl

この記事が気に入ったらサポートをしてみませんか?