withopen('0054_poker.txt', 'r') as file: content = file.readlines()
ans = 0 definit(str): iford(str[0]) >= ord('2') andord(str[0]) <= ord('9'): returnord(str[0]) - ord('0') ifstr[0] == 'T': return10 ifstr[0] == 'J': return11 ifstr[0] == 'Q': return12 ifstr[0] == 'K': return13 ifstr[0] == 'A': return14 return -1 deflevel(card, color): straight = True for k inrange(1, 5): if card[k] != card[k - 1] + 1: straight = False if color[0] == color[4]: if straight and card[0] == 10: return10 elif straight: return9 if card[0] == card[3] or card[1] == card[4]: return8 if (card[0] == card[2] and card[3] == card[4]) or (card[0] == card[1] and card[2] == card[4]): return7 if color[0] == color[4]: return6 if straight: return5 if card[0] == card[2] or card[1] == card[3] or card[2] == card[4]: return4 pairs_count = 0 k = 0 while k < 4: if card[k] == card[k + 1]: pairs_count += 1 k += 1 k += 1 if pairs_count == 2: return3 if pairs_count == 1: return2 return1 defbeat(Alice, Bob): level_Alice = level(Alice[0], Alice[1]) level_Bob = level(Bob[0], Bob[1]) if level_Alice != level_Bob: return level_Alice > level_Bob if level_Alice == 6: k = 4 whileTrue: if Alice[0][k] != Bob[0][k]: return Alice[0][k] > Bob[0][k] k -= 1 A = [[], [], [], [], []] B = [[], [], [], [], []] for k inrange(2, 15): A[Alice[0].count(k)].append(k) B[Bob[0].count(k)].append(k) for k inrange(1, 5): A[k].sort(reverse = True) B[k].sort(reverse = True) k = 4 whileTrue: for i inrange(len(A[k])): if A[k][i] != B[k][i]: return A[k][i] > B[k][i] k -= 1 defwork(arr): global ans arr = arr.split() Alice = [[init(arr[k]) for k inrange(0, 5)], [arr[k][1] for k inrange(0, 5)]] Bob = [[init(arr[k]) for k inrange(5, 10)], [arr[k][1] for k inrange(5, 10)]] for k inrange(0, 2): Alice[k].sort() Bob[k].sort() # print(Alice) # print(Bob) if beat(Alice, Bob): ans += 1 for line in content: work(line) print(ans)
text = [] # 填入所给文件内容 key = [0, 0, 0] defwork(): id = 0 T = text.copy() for i inrange(len(T)): T[i] = chr(T[i] ^ key[id]) id += 1 ifid == 3: id = 0 str = '' for c in T: str += c withopen('output.txt', 'a') as f: for k inrange(0, 3): f.write(chr(key[k])) f.write('\n') f.write(str) f.write('\n') for a inrange(ord('a'), ord('z') + 1): key[0] = a for b inrange(ord('a'), ord('z') + 1): key[1] = b for c inrange(ord('a'), ord('z') + 1): key[2] = c work()
已知密钥求答案
1 2 3 4 5 6 7 8 9 10 11 12
text = [] # 填入所给文件内容 key = [ord('e'), ord('x'), ord('p')] id = 0 for i inrange(len(text)): text[i] = text[i] ^ key[id] id += 1 ifid == 3: id = 0 ans = 0 for x in text: ans += x print(ans)
import math import time import sympy START = time.time()
N = int(1e6) + 10 d = [0] * N primes = [] defSieve(n): d[1] = 1 for i inrange(2, n + 1): if d[i] == 0: d[i] = i primes.append(i) for x in primes: if x * i > n: break d[x * i] = x if(i % x == 0): break Sieve(int(1e4)) defcheck(a, b): return sympy.isprime(int(str(a) + str(b))) and sympy.isprime(int(str(b) + str(a))) edges = [[] for _ inrange(len(primes))] for i inrange(len(primes)): for j inrange(i + 1, len(primes)): if check(primes[i], primes[j]): edges[i].append(j) edges[j].append(i) print('Total nodes:', len(primes))
ans = int(1e18) val = [0, 0, 0, 0, 0] defdfs(dep): global ans, val if dep == 5: S = 0 for k inrange(5): S += primes[val[k]] print(val) ans = min(ans, S) print(ans) return for i inrange(len(primes)): if primes[i] == 5: continue if dep != 0and i <= val[dep - 1]: continue val[dep] = i flag = True for j inrange(0, dep): ifnot edges[i].count(val[j]): flag = False break if flag: dfs(dep + 1) dfs(0) print('Result =', ans)
# Return the continued fraction and minimal positive period # of a quadratic irrational (x + y * sqrt(n)) / z. import math defquadratic_irrational(x, y, z, n): p = x * z d = n * y * y * z * z q = z * z dd = math.floor(math.sqrt(n)) * y * z i = 0 a = [] used = dict() while (p, q) notin used: a.append((p + dd) // q) used[p, q] = i p = a[-1] * q - p q = (d - p * p) // q i += 1 return a, i - used[p, q]
ans = 0 for k inrange(1, 10000 + 1): ifint(math.sqrt(k)) ** 2 == k: continue if quadratic_irrational(0, 1, 1, k)[1] % 2 == 1: ans += 1 print(ans)