Recursos-LCC

Um arquivo de todo material que consegui reunir, pertinente ao curso de LCC da UM.

View on GitHub

LA2 | Torneio 5 (2020/2021) | Número


"""
Implemente uma função que dados 0 < n <= 9 e k >= 0 devolva o menor número 
com exactamente duas ocorrências de todos os digitos entre 1 e n,
estando essas duas ocorrências à distância 1+k uma da outra.
"""


def distCerta(n,k,ls,i,oc,x):
    if len(oc[x]) == 0:
        return True
    if len(oc[x]) >= 2:
        return False
        
    return abs(oc[x][0] - i) == x+k

def valid(n,k,ls,i, oc):
    return True
    
def extensions(n,k,ls,i, oc):
    return [x for x in range(1,n+1) if distCerta(n,k,ls,i,oc,x)]
    
def search(n, k, ls, i, oc):
    if i == n*2:
        return valid(n,k,ls,i, oc)
        
    for x in extensions(n,k,ls,i, oc):
        ls.append(x)
        oc[x].append(i)
        if search(n,k,ls,i+1, oc):
            return True
        oc[x].pop()
        ls.pop()
    return False

def numero(n,k):
    ls = []
    oc = {}
    for x in range(1,n+1):
        oc[x] = []
    if search(n,k,ls,0, oc):
        return int("".join(map(str, ls)))


Testes

# 1
n = 3
k = 1
> Resultado = 231213

# 2
n = 4
l = 0
> Resultado = 11342324

retroceder