プログラミングコンテストチャレンジブックをPythonで書くっていう記事を以前に書きましたが、その時にひよこ3分07秒さんという人からコメントをもらってitertoolsを使った書き方を教えてもらいました。
リスト内包表記とitertools.productを使ってよりシンプルに書き直しました。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import itertools
def main():
n = int(raw_input('the number of cards: '))
m = int(raw_input('the sum: '))
k = [int(raw_input('k[%s]:' % num)) for num in range(n)]
for a, b, c,d in itertools.product(k, repeat=4):
if a + b + c + d == m:
print 'YES'
break
else:
print 'NO'
if __name__ == '__main__':
main()
すごいシンプルになりますね。以前に比べて明らかに美しくなった。
アフィリエイトでコンバージョンしたキーワードをApacheの生ログから抜き出す作業を自動化してるんだけど、そのスクリプトにも使える。
だいぶ前に作ったやつだから、かなりごちゃごちゃしてるし書き直すとスッキリするかも。
要するに総当たり系のアルゴリズムに使えるってことか。
この本は時間がある時に頭の体操みたいな感じでやると勉強になるし面白い。