問題
[9/27/2012] Challenge #101 [easy] (Non-repeating years) : dailyprogrammer
(年を表す)数字を桁ごとに見たとき、重複のないものだけを選ぶ問題。
たとえば1980から1987までの間で考えると、1がふたつある1981を除く(1980, 1982, 1983, 1984, 1985, 1986, 1987)が条件に当てはまり、7つあることになる。
ボーナス:1000から2013の間で重複している数字が最も長く連続している期間と、非重複数字が最も長く連続している期間を求める。
解答
文字列にset使えないと思い込んでた。ちゃんとドキュメント読まないから…
def func(x): numlist = map(int, list(str(x))) return len(set(numlist)) == len(numlist) if __name__ == "__main__": test_input = [1980, 1987+1] print filter(func, range(*test_input))
答え合わせ後の手直し。無駄を切り詰めれば一行でもそれほど見苦しくない…かな?
print filter(lambda x: len(set(str(x))) == len(str(x)), range(1980, 1987+1))
ボーナス
リンク先sch1zo氏のgroupbyで書く方法がいい。自分は最初なぜだかtakewhileかdropwhileを使うものだと思ってた。