Project Euler 22, 23
22番
テキストファイルの名前を並び替えてスコア計算
pythonでテキスト分解するのは結構簡単
sort()もかなり便利
#!/usr/bin/env python # -*- coding: utf-8 -*- line = open('names.txt').read() itemList = line[:-1].split(',') newitemList = map(lambda x: x.strip(" \" "),itemList) newitemList.sort() score = 0 iterate = 0 for item in newitemList: iterate += 1 subscore = 0 for j in item: subscore += (ord(j) - 64) subscore *= iterate score += subscore print score
23番
2つの過剰数の和で表せない整数の和
過剰数かどうかは前回の関数を使いまわした
時間は22秒とちょっとかかってしまった...なんかうまい方法ないかなあ
#!/usr/bin/env python # -*- coding: utf-8 -*- def yakusu(num): row_num = num yakusu_list = [] sosu = 2 while num != 1: sosu_count = 0 while num % sosu == 0: sosu_count += 1 num /= sosu if sosu_count > 0: yakusu_list.append((sosu,sosu_count)) sosu += 1 insu_wa = 1 for i in map(lambda x: (x[0]**(x[1]+1)-1)/(x[0]-1),yakusu_list): insu_wa *= i return insu_wa - row_num kajyo = [] for i in range(1,28124): if i < yakusu(i): kajyo.append(i) kajyo_wa_list = [] for i in kajyo: for j in kajyo: if i + j < 28124: kajyo_wa_list.append(i+j) print sum(range(1,28124)) - sum(set(kajyo_wa_list))