#PARA GRAFOS
def esCamino(GMA,cam):
if len(cam)<2:return True
if not GMA[cam[0]][cam[1]]:return False
return esCamino(GMA,cam[1:])
#Matrices
def prodpunto(v,w):
if not v:return 0
return v[0]*w[0]+prodpunto(v[1:],w[1:])
def esSubCadena(LL,L):
if not L:return True
if not LL:return False
if LL[0]==L[0]:return esSubCadena(LL[1:],L[1:])
return esSubCadena(LL[1:],L)
def combN(L, n):
if len(L) == n:
return [L]
if not n:
return [[]]
c = []
for i in combN(L[1:], n - 1): # COMBINACIONES DE UNA LISTA DE TAMAÑO N
c.append([L[0]] + i)
c += combN(L[1:], n)
return c
def comb(L):
if len(L) <= 1:return [L]
pers = []
for i in range(len(L)): # COMBINACIONES DE UNA LISTA
p = L[i]
p2 = L[:i] + L[i+1:]
for k in comb(p2):
pers.append([p] + k)
return pers
def mediana(lista):
lista = quick_sort(lista)
n = len(lista)
if n % 2 == 0: return (lista[n // 2 - 1] + lista[n // 2]) / 2
return lista[n // 2]
def moda(lista):
if len(lista) == 1:return lista[0]
lista = quick_sort(lista)
res, actual = lista[0], lista[0]
maximo,contador = 1, 1
for i in range(1, len(lista)):
if lista[i] == actual:
contador += 1
else:
if contador > maximo:
res = actual
maximo = contador
actual = lista[i]
contador = 1
return res
#CODIGOS OG
def es_pot2(n):
return n == (n & (-n))
# Ejemplos de uso:
print(es_pot2(4)) # True
print(es_pot2(5)) # False
print(es_pot2(16)) # True
print(es_pot2(18)) # False
def esPrimo(n):
if n==2:return True
if not n%2:return False
i=3
while i*i <= n:
if not n%i: return False
i +=2
return True
def RaizEntera(n):
return RE(1,n,n)
def RE(inf,sup,n):
if inf+1 == sup:return inf
m= inf+sup //2
if m*m< n:return RE(inf,m,n)
return RE(m,sup,n)
I1BBUkEgR1JBRk9TCgpkZWYgZXNDYW1pbm8oR01BLGNhbSk6CglpZiBsZW4oY2FtKTwyOnJldHVybiBUcnVlCglpZiBub3QgR01BW2NhbVswXV1bY2FtWzFdXTpyZXR1cm4gRmFsc2UKCXJldHVybiBlc0NhbWlubyhHTUEsY2FtWzE6XSkKCiNNYXRyaWNlcwoKZGVmIHByb2RwdW50byh2LHcpOgoJaWYgbm90IHY6cmV0dXJuIDAKCXJldHVybiB2WzBdKndbMF0rcHJvZHB1bnRvKHZbMTpdLHdbMTpdKQoKZGVmIGVzU3ViQ2FkZW5hKExMLEwpOgoJaWYgbm90IEw6cmV0dXJuIFRydWUKCWlmIG5vdCBMTDpyZXR1cm4gRmFsc2UKCWlmIExMWzBdPT1MWzBdOnJldHVybiBlc1N1YkNhZGVuYShMTFsxOl0sTFsxOl0pCglyZXR1cm4gZXNTdWJDYWRlbmEoTExbMTpdLEwpCgkKZGVmIGNvbWJOKEwsIG4pOgogICAgaWYgbGVuKEwpID09IG46CiAgICAgICAgcmV0dXJuIFtMXQogICAgaWYgbm90IG46CiAgICAgICAgcmV0dXJuIFtbXV0KICAgIGMgPSBbXQogICAgZm9yIGkgaW4gY29tYk4oTFsxOl0sIG4gLSAxKTogICMgQ09NQklOQUNJT05FUyBERSBVTkEgTElTVEEgREUgVEFNQcORTyBOCiAgICAgICAgYy5hcHBlbmQoW0xbMF1dICsgaSkKICAgIGMgKz0gY29tYk4oTFsxOl0sIG4pCiAgICByZXR1cm4gYwoKZGVmIGNvbWIoTCk6CiAgICBpZiBsZW4oTCkgPD0gMTpyZXR1cm4gW0xdCiAgICBwZXJzID0gW10KICAgIGZvciBpIGluIHJhbmdlKGxlbihMKSk6ICAjIENPTUJJTkFDSU9ORVMgREUgVU5BIExJU1RBCiAgICAgICAgcCA9IExbaV0KICAgICAgICBwMiA9IExbOmldICsgTFtpKzE6XQogICAgICAgIGZvciBrIGluIGNvbWIocDIpOgogICAgICAgICAgICBwZXJzLmFwcGVuZChbcF0gKyBrKQogICAgcmV0dXJuIHBlcnMKCgpkZWYgbWVkaWFuYShsaXN0YSk6CiAgICBsaXN0YSA9IHF1aWNrX3NvcnQobGlzdGEpCiAgICBuID0gbGVuKGxpc3RhKQogICAgaWYgbiAlIDIgPT0gMDogcmV0dXJuIChsaXN0YVtuIC8vIDIgLSAxXSArIGxpc3RhW24gLy8gMl0pIC8gMgogICAgcmV0dXJuIGxpc3RhW24gLy8gMl0KCgpkZWYgbW9kYShsaXN0YSk6CiAgICBpZiBsZW4obGlzdGEpID09IDE6cmV0dXJuIGxpc3RhWzBdCiAgICBsaXN0YSA9IHF1aWNrX3NvcnQobGlzdGEpCiAgICByZXMsIGFjdHVhbCA9IGxpc3RhWzBdLCBsaXN0YVswXQogICAgbWF4aW1vLGNvbnRhZG9yID0gMSwgMQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGxpc3RhKSk6CiAgICAgICAgaWYgbGlzdGFbaV0gPT0gYWN0dWFsOgogICAgICAgICAgICBjb250YWRvciArPSAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgY29udGFkb3IgPiBtYXhpbW86CiAgICAgICAgICAgICAgICByZXMgPSBhY3R1YWwKICAgICAgICAgICAgICAgIG1heGltbyA9IGNvbnRhZG9yCiAgICAgICAgICAgIGFjdHVhbCA9IGxpc3RhW2ldCiAgICAgICAgICAgIGNvbnRhZG9yID0gMQogICAgcmV0dXJuIHJlcwoJCgojQ09ESUdPUyBPRwpkZWYgZXNfcG90MihuKToKICAgIHJldHVybiBuID09IChuICYgKC1uKSkKCgojIEVqZW1wbG9zIGRlIHVzbzoKcHJpbnQoZXNfcG90Mig0KSkgICMgVHJ1ZQpwcmludChlc19wb3QyKDUpKSAgIyBGYWxzZQpwcmludChlc19wb3QyKDE2KSkgIyBUcnVlCnByaW50KGVzX3BvdDIoMTgpKSAjIEZhbHNlCgoKZGVmIGVzUHJpbW8obik6CglpZiBuPT0yOnJldHVybiBUcnVlCglpZiBub3QgbiUyOnJldHVybiBGYWxzZQoJaT0zCgl3aGlsZSBpKmkgPD0gbjoKCQlpZiBub3QgbiVpOiByZXR1cm4gRmFsc2UKCQlpICs9MgoJcmV0dXJuIFRydWUKCmRlZiBSYWl6RW50ZXJhKG4pOgoJcmV0dXJuIFJFKDEsbixuKQoJCmRlZiBSRShpbmYsc3VwLG4pOgoJaWYgaW5mKzEgPT0gc3VwOnJldHVybiBpbmYKCW09IGluZitzdXAgLy8yCglpZiBtKm08IG46cmV0dXJuIFJFKGluZixtLG4pCglyZXR1cm4gUkUobSxzdXAsbikKCgoKCg==