Added solutions for N=50-60
parent
fab507d468
commit
073423a316
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
#longest consecutive sum of primes that is a prime itself <x
|
||||
def primes(x):
|
||||
#pra stevila do xa
|
||||
nums=[True]*x
|
||||
primes=[2]
|
||||
i=3
|
||||
while i<x:
|
||||
if nums[i-1]==True:
|
||||
primes.append(i)
|
||||
j=i*2
|
||||
while j<x:
|
||||
nums[j-1]=False
|
||||
j+=i
|
||||
i+=2
|
||||
sums=[]
|
||||
prime=0
|
||||
m=1
|
||||
for i in primes:
|
||||
sums=list(map(lambda x: x+i,sums))
|
||||
sums.append(i)
|
||||
a=-2
|
||||
while abs(a)<=len(sums):
|
||||
try:
|
||||
if nums[sums[a]-1]==True and abs(a)>m:
|
||||
prime=sums[a]
|
||||
m=abs(a)
|
||||
except:
|
||||
sums=sums[a+1:]
|
||||
break
|
||||
a-=1
|
||||
return prime
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(primes(10**6))
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def primes(x,y):
|
||||
#pra stevila do xa
|
||||
nums=[True]*x
|
||||
primes=[2]
|
||||
i=3
|
||||
roots={}
|
||||
dig=1
|
||||
poss=[]
|
||||
while i<x:
|
||||
if i>=10**dig:
|
||||
if poss:
|
||||
poss=[n for n in poss if len(n)==y]
|
||||
if poss:
|
||||
return min(map(min, poss))
|
||||
dig+=1
|
||||
roots={}
|
||||
if nums[i-1]==True:
|
||||
n=str(i)
|
||||
roll=[]
|
||||
for r in set(n):
|
||||
j=0
|
||||
while n[j]!=r:
|
||||
j+=1
|
||||
roll.extend(dig_replacement([n[:j]+"*",n[:j+1]],n[j+1:],r))
|
||||
for j in roll:
|
||||
l=roots.setdefault(j,[])
|
||||
l.append(i)
|
||||
if len(l)==y:
|
||||
poss.append(l)
|
||||
primes.append(i)
|
||||
j=i*2
|
||||
while j<x:
|
||||
nums[j-1]=False
|
||||
j+=i
|
||||
i+=2
|
||||
return False
|
||||
|
||||
def dig_replacement(starts,end,num):
|
||||
i=0
|
||||
while i<len(end):
|
||||
if end[i]==num:
|
||||
return dig_replacement([j+end[:i]+"*" for j in starts]+[j+end[:i+1] for j in starts],end[i+1:],num)
|
||||
i+=1
|
||||
return [j+end for j in starts][:-1]
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(primes(2 * 10**6, 8))
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def perm():
|
||||
#najde najmasno stevilo katerega produkti z 1..6 so permutacije
|
||||
a=100
|
||||
b=166
|
||||
while True:
|
||||
i=a
|
||||
while i<=b:
|
||||
count=1
|
||||
roll=i*2
|
||||
while sorted(str(i))==sorted(str(roll)) and count<6:
|
||||
count+=1
|
||||
roll+=i
|
||||
if count==6:
|
||||
return i
|
||||
i+=1
|
||||
a*=10
|
||||
b=(b*10)+6
|
||||
return False
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(perm())
|
|
@ -0,0 +1,92 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def final():
|
||||
r=block_to_list("data/054_poker.txt")
|
||||
count=0
|
||||
for i in r:
|
||||
if compet(i[0],i[1]):
|
||||
count+=1
|
||||
return count
|
||||
|
||||
def compet(x,y):
|
||||
a=pok_hand(x)
|
||||
b=pok_hand(y)
|
||||
av=[n for n in a]
|
||||
bv=[n for n in b]
|
||||
av.sort()
|
||||
bv.sort()
|
||||
i=1
|
||||
while i<=len(av) and i<=len(bv):
|
||||
if av[-i]!=bv[-i]:
|
||||
if av[-i]>bv[-i]:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
for n in range(len(a[av[-i]])):
|
||||
if a[av[-i]][n]!=b[bv[-i]][n]:
|
||||
if a[av[-i]][n]>b[bv[-i]][n]:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
i+=1
|
||||
|
||||
def block_to_list(fn):
|
||||
result=[]
|
||||
with open(fn) as f:
|
||||
for line in f:
|
||||
s=line.split(" ")
|
||||
result.append([s[:5],s[5:9]+[s[9][:2]]])
|
||||
return result
|
||||
|
||||
def pok_hand(x):
|
||||
v={'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'T':10,'J':11,'Q':12,'K':13,'A':14}
|
||||
suit=[n[1] for n in x]
|
||||
val=[v[n[0]] for n in x]
|
||||
high_com={1:sorted(val,reverse=True)}
|
||||
if len(set(suit))==1:
|
||||
#flush
|
||||
high_com[6]=[0]
|
||||
if len(set(val))<5:
|
||||
d={i:0 for i in set(val)}
|
||||
for i in val:
|
||||
d[i]+=1
|
||||
for k,v in d.items():
|
||||
if v>1:
|
||||
if v==2:
|
||||
#pair
|
||||
if not(2 in high_com):
|
||||
high_com[2]=[k]
|
||||
else:
|
||||
high_com[2].append(k)
|
||||
elif v==3:
|
||||
#tris
|
||||
high_com[4]=[k]
|
||||
elif v==4:
|
||||
#four of kind
|
||||
high_com[8]=[k]
|
||||
if (2 in high_com) and len(high_com[2])==2:
|
||||
#two pairs
|
||||
high_com[3]=sorted(high_com[2],reverse=True)
|
||||
del high_com[2]
|
||||
elif (2 in high_com) and (4 in high_com):
|
||||
#full house
|
||||
high_com[7]=[high_com[4],high_com[2][0]]
|
||||
del high_com[4]
|
||||
del high_com[2]
|
||||
elif sorted(val)==list(range(sorted(val)[0],sorted(val)[0]+5)):
|
||||
if 6 in high_com:
|
||||
del high_com[6]
|
||||
if sorted(val)[0]==10:
|
||||
#royal_flush
|
||||
high_com[10]=[0]
|
||||
else:
|
||||
#staright flsuh
|
||||
high_com[9]=[sorted(val)[-1]]
|
||||
else:
|
||||
#straight
|
||||
high_com[5]=[sorted(val)[-1]]
|
||||
return high_com
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(final())
|
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def lychrel(x):
|
||||
ly=[]
|
||||
i=1
|
||||
while i<x:
|
||||
num=i
|
||||
count=0
|
||||
while count<50:
|
||||
num=num+analogize(digitize(num)[::-1])
|
||||
if pal_check(num):
|
||||
break
|
||||
count+=1
|
||||
else:
|
||||
ly.append(i)
|
||||
i+=1
|
||||
return ly
|
||||
|
||||
def analogize(x):
|
||||
i=0
|
||||
num=0
|
||||
while i<len(x):
|
||||
num+=x[i]*(10**i)
|
||||
i+=1
|
||||
return num
|
||||
|
||||
def pal_check(x):
|
||||
d=digitize(x)
|
||||
if d==d[::-1]:
|
||||
return True
|
||||
return False
|
||||
|
||||
def digitize(x):
|
||||
if x<10:
|
||||
return [x]
|
||||
return [x%10]+digitize(x//10)
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(len(lychrel(10**4)))
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def power(x):
|
||||
#brute force, ni glih nek algo.. jbg, deluje
|
||||
a=2
|
||||
maxim=0
|
||||
while a<x:
|
||||
b=1
|
||||
while b<x:
|
||||
k=sum(digitize(a**b))
|
||||
if k>maxim:
|
||||
maxim=k
|
||||
b+=1
|
||||
a+=1
|
||||
return maxim
|
||||
|
||||
def digitize(x):
|
||||
if x<10:
|
||||
return [x]
|
||||
return [x%10]+digitize(x//10)
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(power(100))
|
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
def decrypt():
|
||||
#genereta tri mestni kluc (mozne so samo male crke)
|
||||
#decrypta podano besedilo enc_text in ga vrze v percentege
|
||||
#ce je vec kot 50% besed angleskih ga doda na list results
|
||||
eng=text()
|
||||
results=[]
|
||||
with open("data/059_cipher.txt") as f:
|
||||
r=f.read()
|
||||
enc_text=list(map(int,r.split(",")))
|
||||
key=[]
|
||||
for a in range(97,123):
|
||||
for b in range(97,123):
|
||||
for c in range(97,123):
|
||||
dec_text=""
|
||||
for char in range(0,len(enc_text)-2,3):
|
||||
if enc_text[char]^a in range(0, 128):
|
||||
dec_text+=chr(enc_text[char]^a)
|
||||
if enc_text[char+1]^b in range(0, 128):
|
||||
dec_text+=chr(enc_text[char+1]^b)
|
||||
if enc_text[char+2]^c in range(0, 128):
|
||||
dec_text+=chr(enc_text[char+2]^c)
|
||||
if percentege(dec_text.upper().split(" "),eng)>50:
|
||||
results.append(dec_text)
|
||||
key.append([a,b,c])
|
||||
return results[0]
|
||||
|
||||
def text():
|
||||
with open("data/098_words.txt") as f:
|
||||
r=f.read()
|
||||
r=r.split('","')
|
||||
r[0]=r[0][1:]
|
||||
r[-1]=r[-1][:-1]
|
||||
return r
|
||||
|
||||
def percentege(x,y):
|
||||
#x je besedilo, y je list vecine ang besed, vrne ujemanje obeh v %
|
||||
total=0
|
||||
for i in x:
|
||||
if i in y:
|
||||
total+=1
|
||||
return (float(total)/len(x))*100
|
||||
|
||||
if __name__ == '__main__':
|
||||
text = decrypt()
|
||||
print(sum(map(ord, text)))
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
|||
36,22,80,0,0,4,23,25,19,17,88,4,4,19,21,11,88,22,23,23,29,69,12,24,0,88,25,11,12,2,10,28,5,6,12,25,10,22,80,10,30,80,10,22,21,69,23,22,69,61,5,9,29,2,66,11,80,8,23,3,17,88,19,0,20,21,7,10,17,17,29,20,69,8,17,21,29,2,22,84,80,71,60,21,69,11,5,8,21,25,22,88,3,0,10,25,0,10,5,8,88,2,0,27,25,21,10,31,6,25,2,16,21,82,69,35,63,11,88,4,13,29,80,22,13,29,22,88,31,3,88,3,0,10,25,0,11,80,10,30,80,23,29,19,12,8,2,10,27,17,9,11,45,95,88,57,69,16,17,19,29,80,23,29,19,0,22,4,9,1,80,3,23,5,11,28,92,69,9,5,12,12,21,69,13,30,0,0,0,0,27,4,0,28,28,28,84,80,4,22,80,0,20,21,2,25,30,17,88,21,29,8,2,0,11,3,12,23,30,69,30,31,23,88,4,13,29,80,0,22,4,12,10,21,69,11,5,8,88,31,3,88,4,13,17,3,69,11,21,23,17,21,22,88,65,69,83,80,84,87,68,69,83,80,84,87,73,69,83,80,84,87,65,83,88,91,69,29,4,6,86,92,69,15,24,12,27,24,69,28,21,21,29,30,1,11,80,10,22,80,17,16,21,69,9,5,4,28,2,4,12,5,23,29,80,10,30,80,17,16,21,69,27,25,23,27,28,0,84,80,22,23,80,17,16,17,17,88,25,3,88,4,13,29,80,17,10,5,0,88,3,16,21,80,10,30,80,17,16,25,22,88,3,0,10,25,0,11,80,12,11,80,10,26,4,4,17,30,0,28,92,69,30,2,10,21,80,12,12,80,4,12,80,10,22,19,0,88,4,13,29,80,20,13,17,1,10,17,17,13,2,0,88,31,3,88,4,13,29,80,6,17,2,6,20,21,69,30,31,9,20,31,18,11,94,69,54,17,8,29,28,28,84,80,44,88,24,4,14,21,69,30,31,16,22,20,69,12,24,4,12,80,17,16,21,69,11,5,8,88,31,3,88,4,13,17,3,69,11,21,23,17,21,22,88,25,22,88,17,69,11,25,29,12,24,69,8,17,23,12,80,10,30,80,17,16,21,69,11,1,16,25,2,0,88,31,3,88,4,13,29,80,21,29,2,12,21,21,17,29,2,69,23,22,69,12,24,0,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,67,80,10,10,80,7,1,80,21,13,4,17,17,30,2,88,4,13,29,80,22,13,29,69,23,22,69,12,24,12,11,80,22,29,2,12,29,3,69,29,1,16,25,28,69,12,31,69,11,92,69,17,4,69,16,17,22,88,4,13,29,80,23,25,4,12,23,80,22,9,2,17,80,70,76,88,29,16,20,4,12,8,28,12,29,20,69,26,9,69,11,80,17,23,80,84,88,31,3,88,4,13,29,80,21,29,2,12,21,21,17,29,2,69,12,31,69,12,24,0,88,20,12,25,29,0,12,21,23,86,80,44,88,7,12,20,28,69,11,31,10,22,80,22,16,31,18,88,4,13,25,4,69,12,24,0,88,3,16,21,80,10,30,80,17,16,25,22,88,3,0,10,25,0,11,80,17,23,80,7,29,80,4,8,0,23,23,8,12,21,17,17,29,28,28,88,65,75,78,68,81,65,67,81,72,70,83,64,68,87,74,70,81,75,70,81,67,80,4,22,20,69,30,2,10,21,80,8,13,28,17,17,0,9,1,25,11,31,80,17,16,25,22,88,30,16,21,18,0,10,80,7,1,80,22,17,8,73,88,17,11,28,80,17,16,21,11,88,4,4,19,25,11,31,80,17,16,21,69,11,1,16,25,2,0,88,2,10,23,4,73,88,4,13,29,80,11,13,29,7,29,2,69,75,94,84,76,65,80,65,66,83,77,67,80,64,73,82,65,67,87,75,72,69,17,3,69,17,30,1,29,21,1,88,0,23,23,20,16,27,21,1,84,80,18,16,25,6,16,80,0,0,0,23,29,3,22,29,3,69,12,24,0,88,0,0,10,25,8,29,4,0,10,80,10,30,80,4,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,86,80,35,23,28,9,23,7,12,22,23,69,25,23,4,17,30,69,12,24,0,88,3,4,21,21,69,11,4,0,8,3,69,26,9,69,15,24,12,27,24,69,49,80,13,25,20,69,25,2,23,17,6,0,28,80,4,12,80,17,16,25,22,88,3,16,21,92,69,49,80,13,25,6,0,88,20,12,11,19,10,14,21,23,29,20,69,12,24,4,12,80,17,16,21,69,11,5,8,88,31,3,88,4,13,29,80,22,29,2,12,29,3,69,73,80,78,88,65,74,73,70,69,83,80,84,87,72,84,88,91,69,73,95,87,77,70,69,83,80,84,87,70,87,77,80,78,88,21,17,27,94,69,25,28,22,23,80,1,29,0,0,22,20,22,88,31,11,88,4,13,29,80,20,13,17,1,10,17,17,13,2,0,88,31,3,88,4,13,29,80,6,17,2,6,20,21,75,88,62,4,21,21,9,1,92,69,12,24,0,88,3,16,21,80,10,30,80,17,16,25,22,88,29,16,20,4,12,8,28,12,29,20,69,26,9,69,65,64,69,31,25,19,29,3,69,12,24,0,88,18,12,9,5,4,28,2,4,12,21,69,80,22,10,13,2,17,16,80,21,23,7,0,10,89,69,23,22,69,12,24,0,88,19,12,10,19,16,21,22,0,10,21,11,27,21,69,23,22,69,12,24,0,88,0,0,10,25,8,29,4,0,10,80,10,30,80,4,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,86,80,36,22,20,69,26,9,69,11,25,8,17,28,4,10,80,23,29,17,22,23,30,12,22,23,69,49,80,13,25,6,0,88,28,12,19,21,18,17,3,0,88,18,0,29,30,69,25,18,9,29,80,17,23,80,1,29,4,0,10,29,12,22,21,69,12,24,0,88,3,16,21,3,69,23,22,69,12,24,0,88,3,16,26,3,0,9,5,0,22,4,69,11,21,23,17,21,22,88,25,11,88,7,13,17,19,13,88,4,13,29,80,0,0,0,10,22,21,11,12,3,69,25,2,0,88,21,19,29,30,69,22,5,8,26,21,23,11,94
|
Loading…
Reference in New Issue