ダイブプロフィール分析その2。前回は体内窒素量の算出に挑戦してみましたが、今回は浮上速度違反の検出に挑戦してみます。今回のほうがかなり簡単ですね。順序間違えた。

プログラム。

#!/usr/bin/ruby

ALERT_SPEED = 9

profile = {}
File.readlines(ARGV[0]).each {|s|
  rec = s.split(/\s*,\s*/)
  profile[rec[0].to_i] = rec[1].to_f
}
ptime = 0
pdepth = 0
profile.keys.sort.each {|time|
  depth = profile[time]
  speed = (depth - pdepth) / (time - ptime) * -60
  ptime = time
  pdepth = depth
  if speed > ALERT_SPEED
    puts "#{time/60}:#{time%60} (#{depth}m) #{speed}m/min"
  end
}

これに前回と同様、「経過時間(秒)、水深(m)」のCSVデータを食わせます。そうすると、毎分9m以上の浮上を(サンプルポイント単位で)検出し、時間、水深、浮上速度を表示します。

サンプルは前回と同じく、先日の安良里ボートです。

結果。

14:30 (22.3m) 9.6m/min
37:0 (3.7m) 10.8m/min
48:35 (1.1m) 10.8m/min