"내 신부와 소꿉친구가 너무 수라장"에서 배우는 원라이너
배경
파이썬 역수년이지만, 평상시는 lambda나 reduce나 map함수는 별로 사용하지 않는다.
모처럼이므로 paiza에서 지금하고있는 "내 신부와 소꿉친구가 수라장 너무"
파이썬의 원라이너 묶음으로 풀어서 공부해 보자!
원라이너란?
여러 줄을 모아서 한 줄로 씁니다. 쓰면 즐거워진다 ʅ(◔౪◔ ) ʃ
# 偶数の合計を出力
r = 0
for x in xrange(100):
if x % 2 == 0:
r += x
print r
> 2450
# ワンライナーで偶数の合計を出力
print sum([x for x in xrange(100) if x % 2 == 0])
> 2450
1문제
문제 문장은 이것입니다.
문자열에서 홀수 문자만 추출하여 인쇄하면 좋을 것 같습니다.
# まずは普通に解いてみる
input_lines = raw_input()
result = ''
count = 1
for s in input_lines:
if count % 2 == 1:
result += s
count +=1
print result
OneLine으로 만들기 위해 사용할 수있는 함수를 조사해보십시오.
# 変数のrを利用しない方法だと、1文字ずつのListにして連結すればよさそうだ
print ''.join(['o', 'h', 'a', 'y', 'o'])
> ohayo
# 変数count邪魔すぎい...
# djangoのforloop counterみたいに自動でカウントできる関数ないか調べてみたら
# enumerateを使うと良いみたいだ。
for idx, x in enumerate(xrange(100, 103)):
print idx, x
>0 100
>1 101
>2 102
# 以上の関数を使って変数2つを消す
l = []
for idx, x in enumerate(raw_input()):
if idx % 2 == 0:
l.append(x)
print ''.join([str(_l) for _l in l])
# for文をOneLineにする
l = []
[l.append(x) for idx, x in enumerate(raw_input()) if idx % 2 == 0]
print ''.join([str(_l) for _l in l])
# lを使わないように書き換えると完成!
print ''.join([s for i, s in enumerate(raw_input()) if i % 2 == 0])
안전 테스트 케이스 통과
가독성이 굉장히 나쁘다. 유지하고 싶지 않은 프로그램이 완성
2문제
문제 문장은 이것입니다.
줄 바꿈으로 구분 된 텍스트를 매주 요약하면 좋을 것 같습니다.
# まずは普通に解いてみる
from collections import defaultdict
d = defaultdict(int)
for i in xrange(int(raw_input())):
d[i % 7] += int(raw_input())
for key in d:
print d[key]
그리고 포장
1시간 생각해도 방법이 나오지 않는다. . . 내 OneLine 힘은 이 정도인가. . .
raw_input()로 취득할 수 있는 값이 1행째가 파일 전체의 행수로
2 행째 이후가 요약해야 할 가치이므로 어떻게 취급해야할지 고민
# default dictなしに書き換える
l = [0 for x in xrange(7)]
for i in xrange(int(raw_input())):
l[i % 7] += int(raw_input())
print '\n'.join([str(x) for x in l])
# lambda式使うために、リストの初期化を廃止してif,elseで書いてみる
from collections import defaultdict
l= []
for i in xrange(int(raw_input())):
if i >= 7:
l[i % 7] += int(raw_input())
else:
l.append(int(raw_input()))
print '\n'.join([str(x) for x in l])
# raw_input()部分を分離して考えるために、その部分だけOneLineにする
l = [int(raw_input()) for x in xrange(int(raw_input()))]
# zipとiterで1次元配列を7区切りの2次元配列にする
# 変換前: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
# 変換後: [(1, 2, 3, 4, 5, 6, 7), (8, 9, 10, 11, 12, 13, 14)]
l = [int(raw_input()) for x in xrange(int(raw_input()))]
seven = zip(*[iter(l)]*7)
# zipで行と列を反転する
# 変換前: [(1, 2, 3, 4, 5, 6, 7), (8, 9, 10, 11, 12, 13, 14)]
# 変換後: [(1, 8), (2, 9), (3, 10), (4, 11), (5, 12), (6, 13), (7, 14)]
l = [int(raw_input()) for x in xrange(int(raw_input()))]
seven = zip(*[iter(l)]*7)
r = zip(*seven)
# 出力
print '\n'.join([str(sum(_r)) for _r in r])
# これをとりまとめると。
print '\n'.join([str(sum(_r)) for _r in zip(*zip(*[iter([int(raw_input()) for x in xrange(int(raw_input()))])]*7))])
안전 테스트 케이스 통과
자신을 혼란시키는 raw_input() 부분을, 과감히 1행으로 쓴 곳이 브레이크스루.
그 후는 술술 풀었습니다. 난해한 요소를 분리해 생각하는 것이 소중한 것 같습니다.
지금까지 iter 함수는 한 번도 사용한 적이 없었습니다만, 이런 사용법이군요.
파이썬 내장 함수 을 처음으로 제대로 읽었습니다.
Reference
이 문제에 관하여("내 신부와 소꿉친구가 너무 수라장"에서 배우는 원라이너), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/haminiku/items/f69eed20610662b03af7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# まずは普通に解いてみる
input_lines = raw_input()
result = ''
count = 1
for s in input_lines:
if count % 2 == 1:
result += s
count +=1
print result
# 変数のrを利用しない方法だと、1文字ずつのListにして連結すればよさそうだ
print ''.join(['o', 'h', 'a', 'y', 'o'])
> ohayo
# 変数count邪魔すぎい...
# djangoのforloop counterみたいに自動でカウントできる関数ないか調べてみたら
# enumerateを使うと良いみたいだ。
for idx, x in enumerate(xrange(100, 103)):
print idx, x
>0 100
>1 101
>2 102
# 以上の関数を使って変数2つを消す
l = []
for idx, x in enumerate(raw_input()):
if idx % 2 == 0:
l.append(x)
print ''.join([str(_l) for _l in l])
# for文をOneLineにする
l = []
[l.append(x) for idx, x in enumerate(raw_input()) if idx % 2 == 0]
print ''.join([str(_l) for _l in l])
# lを使わないように書き換えると完成!
print ''.join([s for i, s in enumerate(raw_input()) if i % 2 == 0])
가독성이 굉장히 나쁘다. 유지하고 싶지 않은 프로그램이 완성
2문제
문제 문장은 이것입니다.
줄 바꿈으로 구분 된 텍스트를 매주 요약하면 좋을 것 같습니다.
# まずは普通に解いてみる
from collections import defaultdict
d = defaultdict(int)
for i in xrange(int(raw_input())):
d[i % 7] += int(raw_input())
for key in d:
print d[key]
그리고 포장
1시간 생각해도 방법이 나오지 않는다. . . 내 OneLine 힘은 이 정도인가. . .
raw_input()로 취득할 수 있는 값이 1행째가 파일 전체의 행수로
2 행째 이후가 요약해야 할 가치이므로 어떻게 취급해야할지 고민
# default dictなしに書き換える
l = [0 for x in xrange(7)]
for i in xrange(int(raw_input())):
l[i % 7] += int(raw_input())
print '\n'.join([str(x) for x in l])
# lambda式使うために、リストの初期化を廃止してif,elseで書いてみる
from collections import defaultdict
l= []
for i in xrange(int(raw_input())):
if i >= 7:
l[i % 7] += int(raw_input())
else:
l.append(int(raw_input()))
print '\n'.join([str(x) for x in l])
# raw_input()部分を分離して考えるために、その部分だけOneLineにする
l = [int(raw_input()) for x in xrange(int(raw_input()))]
# zipとiterで1次元配列を7区切りの2次元配列にする
# 変換前: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
# 変換後: [(1, 2, 3, 4, 5, 6, 7), (8, 9, 10, 11, 12, 13, 14)]
l = [int(raw_input()) for x in xrange(int(raw_input()))]
seven = zip(*[iter(l)]*7)
# zipで行と列を反転する
# 変換前: [(1, 2, 3, 4, 5, 6, 7), (8, 9, 10, 11, 12, 13, 14)]
# 変換後: [(1, 8), (2, 9), (3, 10), (4, 11), (5, 12), (6, 13), (7, 14)]
l = [int(raw_input()) for x in xrange(int(raw_input()))]
seven = zip(*[iter(l)]*7)
r = zip(*seven)
# 出力
print '\n'.join([str(sum(_r)) for _r in r])
# これをとりまとめると。
print '\n'.join([str(sum(_r)) for _r in zip(*zip(*[iter([int(raw_input()) for x in xrange(int(raw_input()))])]*7))])
안전 테스트 케이스 통과
자신을 혼란시키는 raw_input() 부분을, 과감히 1행으로 쓴 곳이 브레이크스루.
그 후는 술술 풀었습니다. 난해한 요소를 분리해 생각하는 것이 소중한 것 같습니다.
지금까지 iter 함수는 한 번도 사용한 적이 없었습니다만, 이런 사용법이군요.
파이썬 내장 함수 을 처음으로 제대로 읽었습니다.
Reference
이 문제에 관하여("내 신부와 소꿉친구가 너무 수라장"에서 배우는 원라이너), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/haminiku/items/f69eed20610662b03af7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# まずは普通に解いてみる
from collections import defaultdict
d = defaultdict(int)
for i in xrange(int(raw_input())):
d[i % 7] += int(raw_input())
for key in d:
print d[key]
# default dictなしに書き換える
l = [0 for x in xrange(7)]
for i in xrange(int(raw_input())):
l[i % 7] += int(raw_input())
print '\n'.join([str(x) for x in l])
# lambda式使うために、リストの初期化を廃止してif,elseで書いてみる
from collections import defaultdict
l= []
for i in xrange(int(raw_input())):
if i >= 7:
l[i % 7] += int(raw_input())
else:
l.append(int(raw_input()))
print '\n'.join([str(x) for x in l])
# raw_input()部分を分離して考えるために、その部分だけOneLineにする
l = [int(raw_input()) for x in xrange(int(raw_input()))]
# zipとiterで1次元配列を7区切りの2次元配列にする
# 変換前: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
# 変換後: [(1, 2, 3, 4, 5, 6, 7), (8, 9, 10, 11, 12, 13, 14)]
l = [int(raw_input()) for x in xrange(int(raw_input()))]
seven = zip(*[iter(l)]*7)
# zipで行と列を反転する
# 変換前: [(1, 2, 3, 4, 5, 6, 7), (8, 9, 10, 11, 12, 13, 14)]
# 変換後: [(1, 8), (2, 9), (3, 10), (4, 11), (5, 12), (6, 13), (7, 14)]
l = [int(raw_input()) for x in xrange(int(raw_input()))]
seven = zip(*[iter(l)]*7)
r = zip(*seven)
# 出力
print '\n'.join([str(sum(_r)) for _r in r])
# これをとりまとめると。
print '\n'.join([str(sum(_r)) for _r in zip(*zip(*[iter([int(raw_input()) for x in xrange(int(raw_input()))])]*7))])
자신을 혼란시키는 raw_input() 부분을, 과감히 1행으로 쓴 곳이 브레이크스루.
그 후는 술술 풀었습니다. 난해한 요소를 분리해 생각하는 것이 소중한 것 같습니다.
지금까지 iter 함수는 한 번도 사용한 적이 없었습니다만, 이런 사용법이군요.
파이썬 내장 함수 을 처음으로 제대로 읽었습니다.
Reference
이 문제에 관하여("내 신부와 소꿉친구가 너무 수라장"에서 배우는 원라이너), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/haminiku/items/f69eed20610662b03af7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)