Created
March 25, 2021 03:24
-
-
Save liviocunha/d96d58bd92eb7759eda79dbfa7dedc7e to your computer and use it in GitHub Desktop.
Challenge DataFinder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def solver(lista_entrada, int_a, int_b): | |
# Variáveis auxiliares que serão usadas nas iterações | |
contador_strings = 0 | |
repeticoes_de_a = 0 | |
repeticoes_de_b = 0 | |
# Início do 1º while | |
# len(lista_entrada) é a quantidade de elementos que possui a lista de strings e o contador_strings iniciou no 0 e na linha 41 | |
# é feito a incrementação. Portanto o while irá ser executado até iterar por todos os elementos/strings da lista_entrada | |
while contador_strings < len(lista_entrada): | |
# São variaveis boolenas para indicar as repetições dos caracteres conforme os inputs, estão sendo iniciadas como False | |
repetiu_a = False | |
repetiu_b = False | |
# Lista de controle pra ser usada para ir adicionando os caracteres da string já iterados | |
lista_verificados = [] | |
# Variavel i é uma auxiliar para indicar a quantidade de vezes de iterações do 2º while | |
i = 0 | |
# Início do 2º while | |
# Dessa vez a condição do while é a quantidade de caracteres que a string/elemento da lista possui | |
# lista_entrada[contador_strings] -> é o acesso ao elemento através de index. | |
# Então começa pelo 0 e vai até o último elemento da lista_entrada | |
while i < len(lista_entrada[contador_strings]): | |
# Condicional IF que verifica se o caractere existe na lista de caracteres já verificados | |
if lista_entrada[contador_strings][i] not in lista_verificados: | |
# Se não existe aqui é inserido o caractere da string na lista de caracteres verificados | |
lista_verificados.append(lista_entrada[contador_strings][i]) | |
# Variável auxiliar para contar as repetições dos caracteres verificados | |
contador_repeticoes = 0 | |
# Variável auxiliar para ser usado como índice no 3º while para acessar os elementos/caracteres da string | |
j = 0 | |
# Início do 3º while | |
# Aqui a condição do while também é a quantidade de elementos/caracteres da string | |
# O intuito desse while é para ir verificando elemento/caractere por elemento/caractere se há repeticão | |
while j < len(lista_entrada[contador_strings]): | |
# Então a Condicional IF é para verificar se o caractere é repetido | |
if lista_entrada[contador_strings][i] == lista_entrada[contador_strings][j]: | |
# se sim é incrementado +1 na variável auxiliar contador_repeticoes | |
contador_repeticoes += 1 | |
# variável auxiliar para garantir que o while será feito somente a quantidade | |
# de caracteres da string e também o += é um incremento | |
j += 1 | |
# IF condicional para ver se o contator_repeticoes do caractere é o mesmo do input int_a feito pelo usuário | |
if contador_repeticoes == int_a: | |
# Se sim transforma a variável repetiu_a booleana em True (lá em cima no começo do 1º while | |
# ele iniciou como False | |
repetiu_a = True | |
# IF condicional para ver se o contator_repeticoes do caractere é o mesmo do input int_b feito pelo usuário | |
elif contador_repeticoes == int_b: | |
# Se sim transforma a variável repetiu_b booleana em True (lá em cima no começo do 1º while | |
# ele iniciou como False | |
repetiu_b = True | |
# Aqui também é uma variável auxiliar para garantir que o 2º while irá percorrer somente a quantidade de | |
# elementos/caracteres da string | |
i += 1 | |
# Ainda dentro do 1º while depois de fazer todas as iterações dos elementos/caracteres da string, | |
# os blocos de código abaixo tem o intuito de contar as repeticoes_de_a e as repeticoes_de_b conforme as | |
# variáveis boleanas True repetiu_a e repetiu_b | |
if repetiu_a == True and repetiu_b == True: | |
repeticoes_de_a += 1 | |
repeticoes_de_b += 1 | |
elif repetiu_a == True: | |
repeticoes_de_a += 1 | |
elif repetiu_b == True: | |
repeticoes_de_b += 1 | |
# Depois de realizar todos os loops da string é feito a incrementação na variável da condição do 1º While | |
# e inicia o todo o processo novamente agora do próximo elemento/strings da lista_entrada | |
contador_strings += 1 | |
# Terminado os loops/while é feito a impressão o resultado das repeticões no terminal | |
print(f'Repeticoes de a={int_a}: {repeticoes_de_a}\nRepeticoes de b={int_b}: {repeticoes_de_b}') | |
# Retorno da função com a soma dos resultados (possivelmente para validar o teste) | |
return repeticoes_de_b + repeticoes_de_a | |
# Lista usada das strings | |
lista = ['mmnbvasfkjadfh', | |
'fajlgijaegejeg', | |
'uioereknvkndaa', | |
'glakejeelgkcvd', | |
'flakjwealjkglg', | |
'aabcdgageaegad', | |
'qwerrtyuyuiooe', | |
'qwerqwerqerwqe', | |
'pppopooiipppop', | |
'gaejgeagjjlakg', | |
'bbbiiiooaoaoao'] | |
# Variaveis dos números de input | |
int_a = 2 | |
int_b = 5 | |
# Chamada da função passando os 3 inputs | |
solver(lista, int_a, int_b) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment