【Python】AtCoder Beginner Contest 001
初執筆!
このブログは、筆者のPC Lifeを綴るものです。
しばらくは、pythonの練習目的で最近取り組んでいる「AtCoder Contest」の過去問の解答例を挙げていこうと思っています。
まずは、 2013/10/12 に開催された AtCoder Beginner Contest 001 です。
A - 積雪深度
問題文:
ある時刻の積雪深 H1 と その 1 時間前の積雪深 H2 が与えられます。この時、この 1 時間の積雪深差 H1 − H2 の値を計算して出力してください。My解答:
詳細 -->https://abc001.contest.atcoder.jp/submissions/3019855要点解説:
特になし。初めてのコードだったので、今見るともっと簡単に書けるなぁと思います。
B - 視程の通報
問題文:
気象情報は、世界中に様々な形で流れています。そのひとつの地上実況気象通報式 (SYNOP) では、視程 (肉眼で物体がはっきりと確認できる最大の距離) を、次の規則に従って、VVという値 (通報式) に変換して報じます。1. 0.1km 未満: VVの値は 00 とする。
2. 0.1km 以上 5km 以下:距離 (km) を 10 倍した値とする。1 桁の場合は上位に 0 を付す。
例えば、2,000m =2.0km ならば、VVは 20 である。同じく、200mの場合VVは 02 である。
3. 6km 以上 30km 以下:距離 (km) に 50 を足した値とする。
例えば、15,000m =15km ならば、VVは 65 である。
4. 35km 以上 70km 以下:距離 (km) から 30 を引いて 5 で割った後、80 を足した値とする。
例えば、40,000m =40km ならば、VVは 82 である。
5. 70km より大きい:VVの値は 89 とする。
いま、あなたに視程の距離をメートルで与えるので、上記のルールに従って計算されるVVを出力するプログラムを作成してください。
なお、VVは必ず(上位の 0 を含めて)2桁の整数であり、上記のルールに従って計算した時に整数にならないような入力や、上記の範囲に入らない入力 (例:5km より大きく 6km 未満) などはありません。
My解答:
詳細 -->https://abc001.contest.atcoder.jp/submissions/3019930要点解説:
w = "%02d" % (m*10)
は何をしているのかというと、C言語でいうprintfみたいな事をしています。つまり、 【"%02d"】の【d】の部分に、【m*10】が代入されたものがwに格納されています。
その際、【02】の命令によって、「2桁表示で、もし1桁で足りないときは、十の位を0で埋めてね」という指令を出しています。
一般的に書くと以下の様になります。
C - 風力観測
問題文:
ある風向風速計は、風向の角度と風程を 1 分毎に自動で記録してくれます。風向の角度というのは真北を 0 度とし、そこから時計回りに風の吹いてくる方向を定めたものです。気象観測等では全体を等しく 16 分割した 16 方位が用いられます。
16 方位と角度は、以下の表のように対応します。…《長いので割愛》C: 風力観測 - AtCoder Beginner Contest 001 | AtCoder
My解答:
詳細 -->https://abc001.contest.atcoder.jp/submissions/3022153要点解説:
見て気付いちゃった人もいるかもしれませんが、なんとこのコード…acceptされていません!笑58のテストケースの中で1ケースだけエラーが発生するという悲しい結果になったので、デバッグは諦めました。だいたい合っているので!!
もし、コードの不十分な箇所に気付いた方はご一報下さい!