#!/usr/bin/ruby $scale = 10; # 実行ログの "*** " で始まる行をスペースで区切って配列に格納 # # task_log = [ # ["***", "Task-30", "is", "started", "on", "mint73.10109", "at", "172"], # ["***", "Task-42", "is", "started", "on", "mint77.10109", "at", "179"], # ["***", "Task-39", "is", "started", "on", "mint99.10109", "at", "179"], # ["***", "Task-35", "is", "started", "on", "mint70.10109", "at", "181"], # ["***", "Task-36", "is", "started", "on", "mint71.10109", "at", "182"] # ] task_log = Array.new while l = $stdin.gets do if l =~ /^\*\*\* / task_log << l.chomp.sub(/\.$/, "").split(/ /) end end # タスク名をキーに [開始時刻, 終了時刻] という配列をハッシュに格納 # tasks_rerult = { # "Task-3"=>[448, 630], # "Task-10"=>[375, 463], # "Task-54"=>[372, 429], # "Task-21"=>[293, 297], # "Task-32"=>[195, 298], # "Task-43"=>[191, 423] # } tasks_result = Hash.new task_log.each{|t| tasks_result.store(t[1], [-1,-1]) if !tasks_result.include?(t[1]) if t[3] == "started" tasks_result[t[1]][0] = t[7].to_i #printf "%s started at %d\n", t[1], t[7].to_i elsif t[3] == "finished" tasks_result[t[1]][1] = t[7].to_i end } # ガントチャート出力 # 1文字 $scale ミリ秒換算で " " または "*" を表示 tasks_result.each{|key,value| print key, "\t:" before_task_time = (value[0] / $scale).to_i calculate_time = ((value[1]-value[0]+$scale) / $scale).to_i before_task_time.times{ print " " } calculate_time.times{ print "*" } print "\n" }