唯物是真 @Scaled_Wurm

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

天下一プログラマーコンテスト2012 予選Bに参加 #klabtenka1 #AtCoder

A問題しか解けなかった。
B問題で爆死して、C問題は部分点のみで85位orz

あまりにもアレだったのでC問題は制限時間後に解いた。

A: 孫子算経 - 天下一プログラマーコンテスト2012 予選B | AtCoder

1以上127以下の範囲で、3で割るとa、5で割るとb、7で割るとc余る数を小さい順に答える。
forループで回して条件を満たすかチェックするだけ。

# -*- coding: utf-8 -*-
a, b, c = map(int, raw_input().split())

for i in xrange(1, 128):
    if i % 3 == a and i % 5 == b and i % 7 == c:
        print i

B: camel_case - 天下一プログラマーコンテスト2012 予選B | AtCoder

キャメルケース(camelCase)とスネークケース(snake_case)を相互変換するだけ……のはずなのだが何か条件を見落としているのかバグがあるのか動かなくて死亡。

# -*- coding: utf-8 -*-
a = list(raw_input())

i = 0

L = len(a)

head = 0
tail = L
for i in xrange(L):
    if a[i] == '_':
        head += 1
    else:
        break

for j in xrange(L - 1, -1, -1):
    if a[j] == '_':
        tail -= 1
    else:
        break



def isSnake(a, head, tail):
    S = a[head:tail]
    
    check = 0
    for i in S:
        if i == '_':
            check += 1
            if check >= 2:
                return False
        else:
            check = 0
    
    for i in "".join(S).split('_'):
        F = True
        for j in i:
            if not('0' <= j <= '9') and not('a' <= j <= 'z'):
                return False
            if '0' <= j <= '9' and F:
                return False
            F= False
    return True

def snakeToCamel(a, head, tail):
    i = 0
    while head <= i < tail:
        if a[i] == '_':
            a[i + 1] = a[i + 1].upper()
            a.pop(i)
            i -= 1
            tail -= 1
        i += 1
    print "".join(a)

def isCamel(a, head, tail):
    S = a[head:tail]

    check = 0
    for i in S:
        if 'A' <= i <= 'Z':
            check += 1
            if check >= 2:
                return False
        else:
            check = 0

    if '0' <= S[0] <= '9' or 'A' <= S[0] <= 'Z':
        return False
    for i in S:
        if not('0' <= i <= '9') and not('a' <= i <= 'z') and not('A' <= i <= 'Z'):
            return False
    return True

def camelToSnake(a, head, tail):
    i = head
    while head <= i < tail:
        if 'A' <= a[i] <= 'Z':
            a[i] = a[i].lower()
            a.insert(i, '_')
            tail -= 1
            i += 1
        i += 1
    print "".join(a)

if isSnake(a, head, tail):
    snakeToCamel(a, head, tail)
elif isCamel(a, head, tail):
    camelToSnake(a, head, tail)
else:
    print "".join(a)

C: 席が足りない - 天下一プログラマーコンテスト2012 予選B | AtCoder

社員の勤務時間が与えられて、必要な座席数を求める。
開始時間について貪欲にやれば解けるみたいですが、区間がオーバーラップするかの判定を間違えていて時間内には解き終わらず。

ところで退社時間<=35:59って……((((;゚Д゚))))

# -*- coding: utf-8 -*-

N = int(raw_input())

T = []

for i in xrange(N):
    s, e = raw_input().split()
    sh, sm = s.split(':')
    s = 60 * int(sh) + int(sm)
    eh, em = e.split(':')
    e = 60 * int(eh) + int(em)
    T.append((s, e))

T.sort(key = lambda x: x[0])


c = 0
while len(T) > 0:
    c += 1
    t = T.pop(0)
    h = t
    i = 0
    while i < len(T):
        if t[1] <= T[i][0] and T[i][1] - 24 * 60 <= h[0]:
            t = T.pop(i)
            i -= 1
        i += 1

print c