more shit
This commit is contained in:
parent
9f338ba2d7
commit
c6b545836a
10 changed files with 309 additions and 32 deletions
84
akstest.py
Normal file
84
akstest.py
Normal file
|
@ -0,0 +1,84 @@
|
|||
'''
|
||||
cache = {}
|
||||
|
||||
def binomcoeffb(n,k):
|
||||
nom = 1
|
||||
denum = 1
|
||||
for i in range(n-k):
|
||||
nom *= (n-i)
|
||||
denum *= (i+1)
|
||||
v = nom//denum
|
||||
cache[(n,k)] = v
|
||||
return v
|
||||
|
||||
def binomcoeffc(n,k):
|
||||
if (n,k) in cache:
|
||||
return cache[(n,k)]
|
||||
if n == k or k == 0:
|
||||
return 1
|
||||
v = binomcoeffc(n-1,k-1) + binomcoeffc(n-1,k)
|
||||
cache[(n,k)] = v
|
||||
return v
|
||||
|
||||
def binomcoeff(n,k):
|
||||
try:
|
||||
v = binomcoeffc(n,k)
|
||||
except RuntimeError:
|
||||
v = binomcoeffb(n,k)
|
||||
return v
|
||||
|
||||
def binomcoeffi():
|
||||
l = [1,2,1]
|
||||
i = 3
|
||||
yield (i,l[1:-1])
|
||||
|
||||
while True:
|
||||
i += 1
|
||||
nl = [1]
|
||||
for j in range(len(l)-1):
|
||||
nl.append( l[j]+l[j+1] )
|
||||
nl.append(1)
|
||||
l = nl
|
||||
yield (i,l[1:-1])
|
||||
|
||||
def is_prime(n):
|
||||
if n <= 1:
|
||||
return False
|
||||
for n
|
||||
bc = binomcoeff(n,k)
|
||||
r = bc % n
|
||||
# print("%d %% %d = %d" % (bc,n,r))
|
||||
if r != 0:
|
||||
return False
|
||||
return True
|
||||
'''
|
||||
class PrimeGenerator:
|
||||
def __init__(self):
|
||||
self.coeffs = [1,1]
|
||||
self.prime = 1
|
||||
|
||||
def nextPrime(self):
|
||||
self.step()
|
||||
while not self.check():
|
||||
self.step()
|
||||
return self.prime
|
||||
|
||||
def step(self):
|
||||
l = [1]
|
||||
for j in range(len(self.coeffs)-1):
|
||||
l.append(self.coeffs[j] + self.coeffs[j+1])
|
||||
l.append(1)
|
||||
self.coeffs = l
|
||||
self.prime += 1
|
||||
|
||||
def check(self):
|
||||
for i in range(1,len(self.coeffs)//2+1):
|
||||
if self.coeffs[i] % self.prime != 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
pg = PrimeGenerator()
|
||||
|
||||
for i in range(10001):
|
||||
print("%d: %d" % (i,pg.nextPrime()) )
|
20
back2black.py
Normal file
20
back2black.py
Normal file
|
@ -0,0 +1,20 @@
|
|||
from sys import stdout as out
|
||||
|
||||
p = {}
|
||||
for i in range(1,91):
|
||||
p[i] = 0
|
||||
|
||||
for i in range(2,91):
|
||||
n = i
|
||||
while n <= 90:
|
||||
p[n]+=1
|
||||
n += i
|
||||
|
||||
for i in range(9):
|
||||
for j in range(10):
|
||||
if p[i*10+j+1] % 2 == 0:
|
||||
out.write("o")
|
||||
else:
|
||||
out.write(" ")
|
||||
out.write("\n")
|
||||
|
43
binomial.py
43
binomial.py
|
@ -1,34 +1,13 @@
|
|||
def pascal(n):
|
||||
if n == 0:
|
||||
return [1]
|
||||
p = [1,1]
|
||||
for i in range(n-1):
|
||||
pn = [1]
|
||||
for j in range(len(p)-1):
|
||||
pn.append(p[j]+p[j+1])
|
||||
pn.append(1)
|
||||
p = pn
|
||||
return p
|
||||
def binomcoeff(n,k):
|
||||
nom = 1
|
||||
denum = 1
|
||||
for i in range(n-k):
|
||||
nom *= (n-i)
|
||||
denum *= (i+1)
|
||||
v = nom//denum
|
||||
return v
|
||||
|
||||
def binomial(n):
|
||||
i = n
|
||||
j = 0
|
||||
for c in pascal(n):
|
||||
yield (c,i,j)
|
||||
i -= 1
|
||||
j += 1
|
||||
def E(n,k):
|
||||
return binomcoeff(2*n+k,n)*binomcoeff(n+k,n)//2
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Form: (x+y)^n")
|
||||
x = float(input("Insert x:"))
|
||||
y = float(input("Insert y:"))
|
||||
n = int(input("Insert n:"))
|
||||
|
||||
assert(n>0)
|
||||
res = 0
|
||||
s = []
|
||||
for (c,i,j) in binomial(n):
|
||||
s.append("%d*(%.2f)^%d*(%.2f)^%d" % (c,x,i,y,j))
|
||||
res += c * x**i * y**j
|
||||
print(" + ".join(s))
|
||||
print("Result: %f" % res)
|
||||
print(E(1,2), E(2,1), E(2,2), E(3,1))
|
||||
|
|
30
check_prime.py
Normal file
30
check_prime.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
from sys import argv
|
||||
|
||||
def binomcoeff(n,k):
|
||||
nom = 1
|
||||
denum = 1
|
||||
for i in range(n-k):
|
||||
nom *= (n-i)
|
||||
denum *= (i+1)
|
||||
v = nom//denum
|
||||
return v
|
||||
|
||||
def is_prime(n):
|
||||
if n <= 1:
|
||||
return False
|
||||
for k in range(1,n):
|
||||
bc = binomcoeff(n,k)
|
||||
r = bc % n
|
||||
# print("%d %% %d = %d" % (bc,n,r))
|
||||
if r != 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
if len(argv) > 1:
|
||||
p = int(argv[1])
|
||||
if is_prime(p):
|
||||
print("%d is a prime" % p)
|
||||
else:
|
||||
print("%d is not a prime" % p)
|
||||
else:
|
||||
print("%s <number>" % argv[0])
|
29
crc3.py
Normal file
29
crc3.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
from math import log, floor
|
||||
|
||||
tobin = lambda v: v>0 and tobin(v>>1).lstrip('0')+str(v&1) or '0'
|
||||
|
||||
def calcremainder(v,coeff):
|
||||
n = floor(log(coeff,2))
|
||||
v = v << n
|
||||
r = v
|
||||
while (r>>n) > 0:
|
||||
m = floor(log(r,2))
|
||||
p = coeff<<(m-n)
|
||||
r = r ^ p
|
||||
return v,r
|
||||
|
||||
def create(b,coeff=0b1011):
|
||||
v,r = calcremainder(b,coeff)
|
||||
return v+r
|
||||
|
||||
def check(b,coeff=0b1011):
|
||||
_,r = calcremainder(b,coeff)
|
||||
return r == 0
|
||||
|
||||
a = int("11010011101100",2)
|
||||
|
||||
print( "V:" + tobin( a ) )
|
||||
c = create(a)+1
|
||||
print("CRC-Data: " + tobin( c ) )
|
||||
|
||||
print("Correct?: " + ( check(c) and "Yes" or "No"))
|
30
goatdoor.py
Normal file
30
goatdoor.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
from random import shuffle, randint
|
||||
|
||||
result = { "swap": 0, "not_swap": 0 }
|
||||
|
||||
doors = [ 0, 0, 1]
|
||||
door_indices = list(range(3))
|
||||
|
||||
for i in range(500):
|
||||
shuffle(doors)
|
||||
shuffle(door_indices)
|
||||
door_chosen, door_opened, door_swap = door_indices
|
||||
if doors[door_opened] == 1:
|
||||
door_swap, door_opened = door_opened, door_swap
|
||||
|
||||
if doors[door_swap] == 1:
|
||||
result["swap"] += 1
|
||||
elif doors[door_chosen] == 1:
|
||||
result["not_swap"] += 1
|
||||
else:
|
||||
print("WTF?")
|
||||
break
|
||||
|
||||
p100 = result["swap"] + result["not_swap"]
|
||||
|
||||
p_swap = result["swap"]*100/p100
|
||||
|
||||
p_not_swap = result["not_swap"]*100/p100
|
||||
|
||||
print("Swap door\t: %.2f%%" % p_swap)
|
||||
print("Don't swap door\t: %.2f%%" % p_not_swap)
|
26
johnsbeauty.py
Normal file
26
johnsbeauty.py
Normal file
|
@ -0,0 +1,26 @@
|
|||
def countchars(s):
|
||||
chars = list(map(chr,range(ord('a'),ord('z')+1)))
|
||||
counts = {}
|
||||
for c in s.lower():
|
||||
if c not in chars:
|
||||
continue
|
||||
if c not in counts:
|
||||
counts[c] = 1
|
||||
else:
|
||||
counts[c] += 1
|
||||
|
||||
keys = [ (c,counts[c]) for c in counts ]
|
||||
keys.sort(key=lambda c: -c[1])
|
||||
return keys
|
||||
|
||||
def maximumbeauty(s):
|
||||
clist = countchars(s)
|
||||
maxbeauty = 0
|
||||
beauty = 26
|
||||
for c, count in clist:
|
||||
maxbeauty += count * beauty
|
||||
beauty -= 1
|
||||
return maxbeauty
|
||||
|
||||
for s in ["ABbCcc","Good luck in the Facebook Hacker Cup this year!","Ignore punctuation, please :)", "Sometimes test cases are hard to make up.","So I just go consult Professor Dalves"]:
|
||||
print("%s: %d" % (s, maximumbeauty(s)))
|
24
piart.py
Normal file
24
piart.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
import svgwrite as svg
|
||||
import random
|
||||
|
||||
def randomcolor():
|
||||
r = random.randint(100,200)
|
||||
g = random.randint(100,200)
|
||||
b = random.randint(100,200)
|
||||
|
||||
return "#%02X%02X%02X" % (r,g,b)
|
||||
|
||||
dg = svg.Drawing('piart.svg', size=(1920,1080), profile="full")
|
||||
|
||||
#Background
|
||||
bg = dg.add(dg.g(id='background', fill='#2C2E2F'))
|
||||
bg.add(dg.rect(insert=(0,0),size=(u'100%',u'100%'),rx=0,ry=0))
|
||||
|
||||
#circle
|
||||
circle = dg.add(dg.g(id='circle'))
|
||||
for x in range(1,111):
|
||||
for y in range(1,62):
|
||||
circle.add(dg.circle(center=(10+5+x*17,10+5+y*17),r=5,fill=randomcolor()))
|
||||
|
||||
dg.save()
|
||||
|
2
piart.svg
Normal file
2
piart.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 324 KiB |
53
spr.py
Normal file
53
spr.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
A = "A"
|
||||
B = "B"
|
||||
C = "C"
|
||||
#D = "D"
|
||||
E = "E"
|
||||
F = "F"
|
||||
|
||||
nodes = [A,B,C,E,F]
|
||||
|
||||
edges = {
|
||||
(A,B,3),
|
||||
(A,C,4),
|
||||
# (B,D,5),
|
||||
(B,E,2),
|
||||
# (C,D,1),
|
||||
# (D,E,2),
|
||||
# (D,F,4),
|
||||
(E,F,6)
|
||||
}
|
||||
|
||||
def getadjacent(node, edges):
|
||||
adjacent = set()
|
||||
for (s,t,l) in edges:
|
||||
if s == node:
|
||||
adjacent.add( (t,l) )
|
||||
elif t == node:
|
||||
adjacent.add( (s,l) )
|
||||
return adjacent
|
||||
|
||||
|
||||
def spr(s,t, nodes, edges):
|
||||
nodes = set(nodes)
|
||||
m = { s:(0,[s])}
|
||||
S = set([s])
|
||||
S2 = set(S)
|
||||
while S < nodes:
|
||||
for s in set(S2):
|
||||
S2.remove( s )
|
||||
l,p = m[s]
|
||||
for (ad,sl) in getadjacent(s, edges):
|
||||
if ad not in S:
|
||||
m[ad] = (l+sl,p+[ad])
|
||||
else:
|
||||
ad_l,_ = m[ad]
|
||||
if ad_l > l+sl:
|
||||
m[ad] = (l+sl,p+[ad])
|
||||
S.add( ad )
|
||||
S2.add( ad )
|
||||
return m[t]
|
||||
|
||||
|
||||
print( spr(A,F, nodes, edges) )
|
||||
|
Loading…
Reference in a new issue