Skip to content

Instantly share code, notes, and snippets.

@e8l
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save e8l/f10b9dc179a8d26d9c55 to your computer and use it in GitHub Desktop.
Save e8l/f10b9dc179a8d26d9c55 to your computer and use it in GitHub Desktop.
Paiza Online Hackathon Vol.4 lite

paiza Online Hackathon Lite 4 エンジニアでも恋がしたい!

https://paiza.jp/poh/enkoi

周りがワンライナーでがんばってたので、自分もやってみた感じ。 ただ一行で書いただけなので、そんなにワンライナーっぽくない。

ミッション1

print (lambda n: reduce((lambda a,b: a+b), map(int, [raw_input() for _ in xrange(0,n)])))(input());

ミッション2

print reduce((lambda a,b: a+b), [(lambda a: a[2] * (a[0] - a[1]) if a[0] > a[1] else 0)(x) for x in (lambda n: map((lambda a: map(int, a.split())), [raw_input() for i in xrange(0,n)]))(input())]);

ミッション3

print reduce( (lambda t,s: (lambda x,y: ( y if x < y else x, y))(t[0], t[1]-s[0]+s[1])), (lambda g: (lambda t,n: (lambda a: [(lambda b: (b, b))( sum(a[0:t-1]) ), (0, a[t-1])] + zip(a[0:n-t], a[t:n+1]))(map(int, [raw_input() for _ in xrange(0,n)])))(g[0],g[1]))(map(int, raw_input().split())))[0]

ミッション3のコードの解説的な

やってることを書き換えてみる

# 入力第一行読み込み
g = map(int, raw_input().split())

t = g[0]
n = g[1]

# n個のデータ読み込み
a = map(int, [raw_input() for _ in xrange(0,n)])

# 最初の答えの一歩手前
b = sum(a[0:t-1])

# タプルのリストを作る
# list_part1は、うまくreduceで計算を行うためのもの
list_part1 = [(b,b),(0,a[t-1])]

# list_part2の要素のタプルは
#     第一要素が前のt個の連続データの最初の値
#     第二要素が次のt個の連続データの最後の値
# が入っている
list_part2 = zip(a[0:n-t], a[t:n+1]))

list = list_part1 + list_part2

# 先の作ったタプルのリストをこのラムダ関数を用いてreduceすると
#     第一要素が今までで最大のt個の連続データの和
#     第二要素が前回計算したt個の連続データの和
# となるタプルが返る
# list_part1は1回目のreduceの結果で最初のt個の連続データの和を
# 統一した計算により求めるためのデータなのであった
ans_taple = reduce((lambda t,s: (lambda x,y: ( y if x < y else x, y))(t[0], t[1]-s[0]+s[1])), list)

print ans_taple[0]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment