2010-01-01から1年間の記事一覧

Problem 68

ものすごく適当に作った.当たりをつけた.多分大きい数字は外.なので上位5つは外.[6,7,8,9,10]だろうと. で中身をぐちょぐちょと[1,2,3,4,5]で廻して答えがあれば多分それだ!(とりあえず答えが出るか試すという適当さ)16桁とか17桁って10が中にあるか…

Problem 34

しばらく時間かかるんだよなぁ.けどこの問題に気合を入れる気合が…. def factorial(n): if n < 0:return None if n == 0:return 1 return n*factorial(n-1) def sumfacto(a): return sum([factorial(int(x)) for x in str(a)]) print sum([x for x in xran…

Problem 33

where i left off. 綺麗なことはどうでもいいんです! def gcd(m,n): if n > m: k = m m = n n = k if n == 1:return m if not m % n:return n return gcd(n,m%n) def mul(lis): return eval('*'.join(map(str,lis))) def remove(a,b): if a==b:return False…

Problem 79

飛んだり戻ったり.頭で解くと楽なんだけど,ソースに落とし込むと途端に難しくなった.納得が行かないソースになったけどとりあえずあとで晒す.多分今回のケースに強く依存している.まず解答をどう求めるか?について.色々あるらしい.トポロジカルソー…

Problem 99

またしても飛ぶけど from math import log;print max([(float(l.rstrip().split(',')[1])* log(int(l.rstrip().split(',')[0])),i+1) for i,l in enumerate(open('base_exp.txt'))])[1] なにかlogを使う方法あったよなーと.ぐぐったら出てきた.桁数の求め…

Problem 54

順番が飛ぶけど最近解いて楽しかったので.Pokerの勝利判別をどうするかが問題です. まず役の判別を実装させた.テキスト情報がブタばかりなので案外適当でも答えは出せる.でも面白かったので長くなったけどわりとがっつり定義した.長いので分けて載せて…

Problem 32

31についてはDPなり再帰なりなんなりで解けるけど,汚い解答だったので飛ばす.綺麗なのは見つけたけど…苦手みたいだなぁ. def pan(a,b): t = str(a)+str(b)+str(a*b) if '0' in t: return 0 if len(t) == len(set(t)) == 9: return a*b return 0 print sum…

Problem 30

うみねこのなく頃にループ?戻った?隔週でみると話がわけわかめw死んだ人が生きてるのは不気味.おまもりひまりまで頑張ろう. は!アニメを見てたら時間が… print sum(x for x in xrange(1000,6 * 9**5) if x == sum([i**5 for i in map(int,str(x))])) …

Problem 29

print len(set([a ** b for a in xrange(2,101) for b in xrange(2,101)])) 問題の難易度の落差は相変わらずだなぁ.もっとスマートなやり方があるんでしょうが100x100くらいビビらずに一発で計算させてからsetでuniq的な使い方する方が速い気がする.

Problem 28

舞himeがシュールすぎるw さてと本題. nx = lambda x: 4 * x ** 2 - 6 * x + 6 print sum([nx(x) for x in xrange(3,1002,2)]) + 1 lambda使う必要がどこにあるの?特に無いけど,みやすくなるよ! 式の求め方は真ん中の以外に注目と右上.1,9,25...1**…

Problem 27

考えると頭痛い.問題の意味が今一わからない. def cnt_prime(a,b): cnt = 0 while is_prime(cnt*cnt + a * cnt + b): cnt += 1 return (cnt,a,b) bs = set(es(10**3)) cnt,a,b = max([cnt_prime(a,b) for b in bs for a in xrange(-999,1000,2)]) print a*…

Problem 26

def recurring(d): a = 10 remainder = {} while 1: while d > a: a *= 10 a %= d if a == 0: return 0 if a in remainder.keys(): return len(remainder.keys()) - remainder[a] else: remainder[a] = len(remainder.keys()) print max([recurring(t) for t…

Problem 25

なんかカッコいい解き方があるみたいだけど, lis = [1,1] while len(str(lis[-1])) < 1000: lis.append(lis[-1] + lis[-2]) print len(lis) シンプル・イズ・ベスト.というかそこら辺なものか?w from math import ceil,log,sqrt print ceil((1000 - 1 + …

Problem 24

Permutationを使う必要がありますよね. def facto(n): ans = 1 for i in xrange(1,n+1): ans *= i return ans x = 10 ** 6 -1 k ='' ans = [0,1,2,3,4,5,6,7,8,9] while len(ans) > 0: t = facto(len(ans) - 1) g = x / t p = ans[g] ans.remove(p) x %= t …

Problem 23

上手くできなかった.俺のオリジナルじゃないけど, from math import sqrt def is_abundant(n): total = 1 if is_prime(n): return False for l in xrange(2,int(sqrt(n))+1): if not n % l: total += l if n / l != l: total += n / l if total > n: retur…

Problem 22

わーいテキストファイルがもらえる! a = sorted(open('names.txt').read().replace('"',"").split(',')) print sum([(a.index(x)+1)*sum([ord(n) - ord('A') + 1 for n in x]) for x in a]) あっさりしているけどord()とindex()が決め手.同じ名前が入って…

Problem 21

友愛数ですね.友愛… 判定させるのを書いてみた. def is_amicable(num): from math import sqrt k = 1 p = 1 for i in xrange(2,int(sqrt(num))+1): if not num % i: k += i if i != num / i: k += num / i if k == num: return False for i in xrange(2,in…

Problem 20

おおかみかくしが終わる…. sum([int(p) for p in str(eval('*'.join([str(x) for x in xrange(1,101)])))]) さっきから eval('*'.join([str(x) for x in something])) みたいなのが多いなぁ.sum()みたいな感じでmul()として定義しておくと便利かも?

Problem 19

あ,面倒な感じだ.過去のソースあったからちょっと綺麗にして先行くかって…何やっているのか分からないwwww $B=i5i(BC$B8@8l(BQ&A(15) なにかちがう….そうだツェラーの公式!そうそうこのアルゴリズムをつかったんだった. 折角だから両方試してみ…

Problem 18

17については1000までの文字に置き換えるのも工夫する必要があるんですが….工夫しても書かないといけないし.spell自信ないし.解いたソースも無いのでパスです. values = [[int(value) for value in line.rstrip().split(' ')]for line in open('tri.txt'…

Problem 16

print sum([int(x) for x in str(2**10**3)]) インタプリタでできたので…. 邪道ですけどね./10とか%10とか使えってことなんでしょうけど.

Problem 15

こんな感じの問題割と最近,たけしのコマ大にもでたよね.大学入試だったかな?組合せ問題ですね. def ncr(n,r): if r > n: return 0 if r == n: return n num = eval('*'.join([str(x) for x in xrange(r+1,n+1)])) den = eval('*'.join([str(x) for x in …

Problem 14

大抵過去のソースより短く,(すっきり)するか速くなるんだけど(あるいは両方)今回のだけは力を入れてたこともあって,全然改良できなかった….lambdaいれてみたんだけど結果遅くなったし.(短くなって良いかなぁとは思ったんだけど)関数呼び出しと同じ…

Problem 13

print str(sum([int(p.rstrip()) for p in open('13.txt')]))[0:10] 今回もテキストにコピーしました.なんかそのままコピーだと改行が悪さするんだよねぇ.

Problem 12

from math import sqrt def div(a): num = 0 for m in range(1,int(sqrt(a))+1): if not a % m: num +=2 return num i = 1 limit = 500 count = 0 tri = 1 while (count < limit): i += 1 tri += i if not tri % 510510: count = div(tri) print tri 少し卑…

Problem 11

雨がやまない… def search_max(fields,x,y): k =[0] if x + 3 < len(fields[y]): gome =[str(fields[y][x+p]) for p in range(4)] k.append( eval('*'.join(gome))) if y - 3 >=0: gome = [str(fields[y-p][x+p]) for p in range(4)] k.append( eval('*'.joi…

Problem 10

def es(n): n /= 2 plis = [2] chk = [True for i in xrange(n)] for i in xrange(n): if chk[i]: p = i * 2 + 3 for j in xrange(i+p,n,p): chk[j] = False for i in xrange(n): if chk[i]: plis.append(i * 2 + 3) return plis print sum(es(2*10**6)) こ…

Problem 9

print [a*b*c for c in xrange(3,1000) for b in xrange(2,c) for a in xrange(1000-b-c,1000-b-c+1) if c*c == b*b +a*a][0] aにいれないで2変数のみで…とは思う.

Problem 8

aに数列を1行でぶちこみました.長過ぎなので載せません. a = str(a) print max([eval('*'.join(a[i:i+5])) for i in xrange(len(a) - 5)]) evalって便利だなぁ.

Problem 7

Problem 3の素数をgeneratorを使おう!と思っていたので丁度いい.さて使い方がよくわからないので調べてみた. 4 TopCoder: Python - generatorで素数生成 これ凄く短くて良いね!と思ったのもつかの間.遅いです.よく見てみたら, ifilter(lambda x: x%pr…