水面下の夢

競プロやイラストに興味があります.メインブログがここ.同人サークル「かのらぶ」のページはこっち( https://yumechi0525.amebaownd.com ).ブログアイコンはYaQ(@8_9_00)さんから.

今日の競プロ(2015/05/13)

lambda式を書いて一行で回答する遊びにハマった(可読性が死ぬ)

Code Formula 2014 予選B B問題

問題

B: 11の倍数 - Code Formula 2014 予選B | AtCoder

回答

Submission #403470 - Code Formula 2014 予選B | AtCoder

奇数の桁と偶数の桁を足したものの合計をそれぞれ表示するだけなのですが….
まあ僕のテストが甘くてWAいっぱい出しましたね…(全然ダメ)

sumを使うことを前提にしたので,長さ1のものがエラーになったりしてました.
桁数が偶数なのか,奇数なのかでも処理変わっちゃったし….
うまくまとめられればよかったんですけどね.

s = list(map(int, list(input())))
if len(s) == 1:
    print(0, sum(s))
else:
    if len(s) % 2 == 1:
        print(sum(s[1::2]), sum(s[::2]))
    else:
        print(sum(s[::2]), sum(s[1::2]))

あとenumerate()使ってうまく計算する方法もあるみたい.これも試してみたいな,そのうち.

2. Built-in Functions — Python 3.4.3 documentation

Code Formula 2014 本選 A問題

問題

A: Code Formula 2015 - Code Formula 2014 本選 | AtCoder


回答

Submission #403611 - Code Formula 2014 本選 | AtCoder

結論から言えば,1行で入力されたa, bの値をかけて出力するプログラム.

というわけで,こうなりましたとさ.

print((lambda a: a[0] * a[1])(list(map(int, input().split()))))

可読性(笑)

Code Formula 2014 本選 B問題

問題

B: 3歩進んで2歩下がる - Code Formula 2014 本選 | AtCoder

回答

Submission #403618 - Code Formula 2014 本選 | AtCoder

入力された値nを見て,
偶数:n // 2
奇数:n // 2 + 3
を出力するだけである・・・.

というわけで,こうなりましたとさ.

print((lambda n: n // 2 + (0 if n % 2 == 0 else 3))(int(input())))

可読性(笑)
さすがに私もこんなに馬鹿ではないので,頭から+3して-2して… みたいな解き方はしません…


というわけで,今日も忙しかったので手抜き…
平日手抜きするのはいいけど,土日はガッツリ問題とかないとなあ….