唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

AtCoder Beginner Contest #001 oooo

とりあえず参加してみた、一応全部解けて12位でした

そういえば全体の正解者数とか見られるんですね

感想としては、大量のif文とか浮動小数点の誤差とかで頭がおかしくなりました
初心者向けにはヒントとかが出てくるようにしたりするのがいいような(だいたい解けない時は早い時間でやることがなくなるので

A: 積雪深差 - AtCoder Beginner Contest #001 | AtCoder

標準入力から2つの数値を読み込んで差を答える

# -*- coding: utf-8 -*-
import sys
import collections

a = int(raw_input())
b = int(raw_input())


print a - b

B: 視程の通報 - AtCoder Beginner Contest #001 | AtCoder

書いてある複雑な条件を実装するだけ
入力がメートルなのに、条件はキロメートルだったりしてめんどくさい

# -*- coding: utf-8 -*-
import math
import sys
import datetime

m = int(raw_input())

if m < 100:
    print '00'
elif 100 <= m <= 5000:
    print str(m / 100).zfill(2)
elif 6000 <= m <= 30000:
    print str(m / 1000 + 50)
elif 35000 <= m <= 70000:
    print str((m / 1000 - 30) / 5 + 80)
elif 70000 <= m:
    print 89

C: 風力観測 - AtCoder Beginner Contest #001 | AtCoder

定数と条件分岐が多い、とても面倒な条件を実装する
浮動小数点の誤差に注意

条件分岐の部分にfor文を使ったりしたけど、あまりきれいに書けなかった

# -*- coding: utf-8 -*-
import math
import sys
import datetime

deg, dis = map(int, raw_input().split())

direction = 'N'
seed_d = [11.25, 33.75, 56.25, 78.75, 101.25, 123.75, 146.25, 168.75, 191.25, 213.75, 236.25, 258.75, 281.25, 303.75, 326.25, 348.75]
cond_d = [(seed_d[i], seed_d[i + 1]) for i in xrange(len(seed_d) - 1)]
name_d ='NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW'.split(' ')

for i, k in enumerate(cond_d):
    l, u = k
    if l <= deg / 10.0 + 0.000001 < u:
        direction = name_d[i]

seed_p = [0.0, 0.3, 1.6, 3.4, 5.5, 8.0, 10.8, 13.9, 17.2, 20.8, 24.5, 28.5, 32.7]
cond_p = [(seed_p[i], round(seed_p[i + 1] - 0.1, 1)) for i in xrange(len(seed_p) - 1)]

power = 12
for i, k in enumerate(cond_p):
    l, u = k
    if l <= round(dis / 60.0 + 0.000001, 1) <= u:
        power = i

if power == 0:
    print 'C', 0
else:
    print direction, power

D: 感雨時刻の整理 - AtCoder Beginner Contest #001 | AtCoder

雨の降り始めと降り終わりの時間(5分刻みにまとめる必要がある)が与えられて、雨が降っている時間の範囲を時系列順にすべて答える
ただし、2つの範囲が重なっているときは1つにまとめる

いもす法っぽく(?)雨の降り始めと降り終わりを別の配列に記録してやった
11時60分と12時00分を別扱いにしてる的な間違いで1ミス

# -*- coding: utf-8 -*-
import math
import sys
import datetime

raw_input()

history = set()
for line in sys.stdin:
    start, end = line.strip().split('-')
    start = int(start[:2]) * 60 + int(start[2:])
    start = start / 5 * 5
    end = int(end[:2]) * 60 + int(end[2:])
    end = (end + 4) / 5 * 5
    history.add((start, end))
#    print start, end

raining = [0] * (2405 / 5)

for s, e in history:
    s = s / 5
    e = e / 5
    raining[s] += 1
    raining[e] -= 1

L = len(raining)
acc = 0
for i in xrange(L):
    if acc == 0 and raining[i] != 0:
        head = i * 5
    acc += raining[i]
    if acc == 0 and raining[i] != 0:
        print '{:04d}-{:04d}'.format(head / 60 * 100 + (head % 60), (i * 5) / 60 * 100 + ((i * 5) % 60))

解説

解説が公開されているみたいです

-->