AtCoder Beginner Contest 001 C – 風力観測 をPython3で解く

Share

AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。

出典:
AtCoder Beginner Contest 001 C – 風力観測

小数誤差を出さないように取り扱う問題。特に四捨五入まで絡んでくると、Pythonでの丸め処理は単純な四捨五入ではないので、意外と面倒な処理が必要になる。

ここでは、入力はすべて整数であることを利用して、整数での比較に落とし込んで回答してある。

# AtCoder Beginner Contest 001 C - 風力観測
# https://atcoder.jp/contests/abc001/tasks/abc001_3
# tag: 誤差 愚直

# 割と愚直にやっていくだけ。
# 小数誤差を回避する一番簡単な方法は、
# 整数のまま比較してやること。

from bisect import bisect_right
def main():
    deg ,dis = map(int, input().split())

    dirs = [
        'N', 'NNE', 'NE', 'ENE',
        'E', 'ESE', 'SE', 'SSE',
        'S', 'SSW', 'SW', 'WSW',
        'W', 'WNW', 'NW', 'NNW'
    ]

    wind_dir = dirs[((deg+112) // 225) % 16]

    # 境界値は、予め 0.05 を引いて 60 を掛けてやるような形にする。
    # 最初から最後まで整数で取り扱うこと。
    dat = [
        0, 3, 16, 34, 55, 80, 108, 139, 172, 208, 245, 285, 327
    ]
    thresholds = [(v*10 - 5) * 6 // 10 for v in dat]

    wind_class = bisect_right(thresholds, dis) - 1

    if wind_class == 0:
        wind_dir = 'C'

    print(wind_dir, wind_class)

main()

Share

コメントを残す

メールアドレスが公開されることはありません。