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
この記事が気に入ったらサポートをしてみませんか?