Desafio Kaprekar

405 palavras 2 páginas
#DESAFIO - KAPREKAR
#RAFAEL MANTELLATTO FERNANDES - mantellatto@gmail.com import sys

def ordenar(num, m): #Criando funcao que vai tratar a ordenacao lista = [] #Criando lista vazia while (num != 0): #Enquanto n for diferente de 0 num,res = divmod(num,10) #Usando a funcao divmod (quociente/resto) para extrair os digitos do inteiro lista.append(res) #Adicionando resto na lista while (len(lista) < m): #Enquanto a quantidade de digitos for menor que 4 lista.append(0) #Incrementando 0 para deixar o inteiro com 4 digitos lista.sort() #Ordenando a lista do menor pro maior menor = int(''.join(map(str,lista))) #Convertendo lista para string e depois para inteiro lista.reverse() #Ordenando a lista do maior pro menor maior = int(''.join(map(str,lista))) #Convertendo lista para string e depois para inteiro return maior,menor #Essas variaveis vao ser utilizadas na funcao main

# verifica se o numero gerado (da lista v) eh o menor numero de algum numero de kaprekar
# se for, insere o resultado (numero de kaprekar) no set result def verify(v, result): menor = int(''.join(map(str,v))) # pega o menor elemento, informado diretamente # inverte para pegar o menor numero v.reverse() maior = int(''.join(map(str,v))) # "desinverte" a lista para nao precisar copiar v.reverse() n = maior - menor if (n != 0): # verifica nao eh um numero com digitos iguais (maior2, menor2) = ordenar(n, len(v)) # busca o maior e menor desse numero if (n == (maior2 - menor2)): # se a diferenca for igual, eh um numero de kaprekar result.add(n)

# generate:
# v => lista com os elementos atuais (na primeira iteracao deve ser tudo zero)
# c => em qual posicao de v estamos gerando o intervalo
# start => a partir de qual numero deve iniciar a gerar
# result => set de retorno (passado via argumento apenas para facilitar)
#
# chamar da seguinte forma:
# v = [0, 0, ..., 0]
# result = generate(v) def generate(v, c = 0, start = 0, result =

Relacionados