Índice
Neste projeto resolvi problemas e otimizar algoritmos desenvolvendo a minha capacidade de implementar soluções para os mais diversos problemas do dia a dia!
- Lógica;
- Capacidade de interpretação de problemas;
- Capacidade de interpretação de um código legado;
- Capacidade de otimizar a resolução de problemas e;
- Resolver problemas/Otimizar algoritmos sob pressão.
-
Clonar o repositorio
git clone git@github.com:RenanFernandess/trybe-project-algorithms.git
-
Entrar na pasta project-job-insights
cd ./trybe-project-algorithms
O Python oferece um recurso chamado de ambiente virtual, onde permite sua máquina rodar sem conflitos, diferentes tipos de projetos com diferentes versões de bibliotecas.
-
criar o ambiente virtual
python3 -m venv .venv
-
ativar o ambiente virtual
source .venv/bin/activate
-
instalar as dependências no ambiente virtual
python3 -m pip install -r dev-requirements.txt
Com o seu ambiente virtual ativo, as dependências serão instaladas neste ambiente. Quando precisar desativar o ambiente virtual, execute o comando
deactivate
. Lembre-se de ativar novamente quando voltar a trabalhar no projeto.
Para executar os testes certifique-se de que você está com o ambiente virtual ativado.
Executar os testes
python3 -m pytest
Mais comandos
O arquivo pyproject.toml
já configura corretamente o pytest. Entretanto, caso você tenha problemas com isso e queira explicitamente uma saída completa, o comando é:
python3 -m pytest -s -vv
Caso precise executar apenas um arquivo de testes basta executar o comando:
python3 -m pytest tests/nomedoarquivo.py
Caso precise executar apenas uma função de testes basta executar o comando:
python3 -m pytest -k nome_da_func_de_tests
Para executar um teste específico de um arquivo, basta executar o comando:
python3 -m pytest tests/nomedoarquivo.py::test_nome_do_teste
-
study_schedule()
study_schedule(permanence_period: list[(1, 2)], target_time: int)
-
Ex:
# estudante 1 2 3 4 5 6 permanence_period = [(2, 2), (1, 2), (2, 3), (1, 5), (4, 5), (4, 5)] study_schedule(permanence_period, 5) # saída: 3, pois a quarta, a quinta e a sexta pessoa estudante ainda estavam estudando nesse horário. study_schedule(permanence_period, 4) # saída: 3, pois a quinta e a sexta pessoa estudante começaram a estudar nesse horário e a quarta ainda estava estudando. study_schedule(permanence_period, 3) # saída: 2, pois a terceira e a quarta pessoa estudante ainda estavam estudando nesse horário. study_schedule(permanence_period, 2) # saída: 4, pois a primeira, a segunda, a terceira e a quarta pessoa estudante estavam estudando nesse horário. study_schedule(permanence_period, 1) # saída: 2, pois a segunda e a quarta pessoa estudante estavam estudando nesse horário.
-
Retornos
- Retorna a
quantidade de estudantes
presentes para uma entrada específica; - Retorna
None
se em permanence_period houver alguma entrada inválida; - Retorna
None
se target_time recebe um valor vazio;
- Retorna a
-
-
is_palindrome_recursive()
A função irá determinar se uma palavra é um palíndromo ou não. A função irá receber uma string de parâmetro e o retorno será um booleano, True ou False.is_palindrome_recursive(word: str, low_index=0)
Mas o que é um palíndromo?
Um palíndromo é uma palavra, frase ou número que mantém seu sentido mesmo sendo lido de trás para frente. Por exemplo, "ABCBA".
-
Ex:
is_palindrome_recursive("ANA") # saída: True is_palindrome_recursive("SOCOS") # saída: True is_palindrome_recursive("COXINHA") # saída: False is_palindrome_recursive("AGUA") # saída: False
-
Retornos
- Retorna
True
se a palavra passada por parâmetro for um palíndromo; - Retorna
False
se a palavra passada por parâmetro não for um palíndromo; - Retorna
False
se nenhuma palavra for passada por parâmetro.
- Retorna
-
-
is_anagram()
O algoritmo que consiga comparar duas strings, ordená-las e identificar se uma é um anagrama da outra. Ou seja, sua função irá receber duas strings de parâmetro e o retorno da função será uma tupla() com a primeira string ordenada, a segunda string ordenada e um booleano,
True
ouFalse
representando se são anagramas.is_anagram(first_string, second_string)
O algoritmo considera letras maiúsculas e minúsculas como iguais durante a comparação das entradas, ou seja, ser case insensitive.
Mas o que é um anagrama?
"Um anagrama é uma espécie de jogo de palavras criado com a reorganização das letras de uma palavra ou expressão para produzir outras palavras ou expressões, utilizando todas as letras originais exatamente uma vez."
-
Ex:
is_anagram("amor", "roma") # saída: ('amor', 'amor', True) # Explicação: Nesse caso a palavra 'amor' ordenada continua 'amor' e 'roma' ordenado vira 'amor, além disso a função é True, pois a palavra "roma" é um anagrama de "amor". is_anagram("pedra", "perda") # saída: ('adepr', 'adepr', True) # Explicação: Nesse caso o retorno também é True. Na palavra "pedra", trocamos o "d" de lugar com o "r" e formamos "perda", sendo assim um anagrama e temos as duas strings ordenadas. is_anagram("Amor", "Roma") # saída: ('amor', 'amor', True) # Explicação: Nesse caso o retorno da função é True, pois a palavra "Roma" é um anagrama de "Amor" independente da letra "R" e "A" serem maiúsculas. is_anagram("coxinha", "empada") # saída: ('achinox', 'aademp', False) # exemplo em que não existe um anagrama
-
Retornos
- Retorna
True
se as palavras passadas por parâmetro forem anagramas; - Retorna
False
se as palavras passadas por parâmetro não forem anagramas; - Retorna
False
se alguma das palavras passadas por parâmetro for uma string vazia;
- Retorna
-
-
find_duplicate()
Dada um array de números inteiros contendo n + 1 inteiros, chamado de nums, em que cada inteiro está no intervalo [1, n].find_duplicate(nums: int)
-
Ex:
nums = [1, 3, 4, 2, 2] find_duplicate(nums) # saída: 2 nums = [3, 1, 3, 4, 2] find_duplicate(nums) # saída: 3 nums = [1, 1] find_duplicate(nums) # saída: 1 nums = [1, 1, 2] find_duplicate(nums) # saída: 1 nums = [3, 1, 2, 4, 6, 5, 7, 7, 7, 8] find_duplicate(nums) # saída: 7
-
Retornos
- Retorna o número repetivo se a função receber como parâmetro uma lista com números repetidos;
- Retorna
False
se a função não receber nenhum parâmetro; - Retorna
False
se a função receber como parâmetro uma string; - Retorna
False
se a função receber como parâmetro uma lista sem números repetidos; - Retorna
False
se a função receber como parâmetro apenas um valor; - Retorna
False
se a função receber como parâmetro um número negativo;
-
-
is_palindrome_iterative()
Resolva o mesmo problema apresentado no requisito 2 - Palíndromos, porém dessa vez utilizando a solução iterativa.is_palindrome_iterative(word: str)
-
Ex:
is_palindrome_iterative("ANA") # saída: True is_palindrome_iterative("SOCOS") # saída: True is_palindrome_iterative("COXINHA") # saída: False is_palindrome_iterative("AGUA") # saída: False
-
Retornos
- Retorna
True
se a palavra passada por parâmetro for um palíndromo; - Retorna
False
se a palavra passada por parâmetro não for um palíndromo; - Retorna
False
se nenhuma palavra for passada por parâmetro.
- Retorna
-
- Renan Fernandes - Linkedin - renzinestuods@gmail.com