Este projeto implementei alguns dos principais algoritmos de busca e ordenação com Python, com o intuito de resolver e otimizar algoritmos. Os algoritmos foram implementados do zero, sem o uso de bibliotecas externas, para solucionar diversos problemas propostos.
Para Clonar e Testar a Aplicação
- Para clonar a aplicação:
git clone git@github.com:georgia-rocha/algorithms.git
- Para entrar no diretório do projeto:
cd algorithms
- Para criar um ambiente virtual para o projeto:
python3 -m venv .venv && source .venv/bin/activate
- Instale as dependências:
python3 -m pip install -r dev-requirements.txt
- Executar os testes:
python3 -m pytest
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/nome_do_arquivo.py
Caso precise executar apenas uma função de testes basta executar o comando:
python3 -m pytest -k nome_da_func_de_tests
Se desejar rodar os testes de um arquivo específico, execute com -x nome_do_arquivo
python -m pytest -x tests/test_jobs.py
Para executar um teste específico de um arquivo, basta executar o comando:
python -m pytest -x tests/nome_do_arquivo.py::test_nome_do_teste
Se quiser saber mais sobre a instalação de dependências com pip
, veja esse artigo.
1 - Número de estudantes estudando no mesmo horário (Algoritmo de busca):
- O código foi feito dentro do arquivo challenges/challenge_study_schedule.py.
- É verificado pelo avaliador se:
- 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;
- A função se comporta como no máximo O(n), ou seja, com complexidade assintótica linear.
2 - Criptografia de inversões (Testes)
- Esse teste se chama test_encrypt_message, e ele garante que a função de criptografia encrypt_message respeitar uma lógica específica
- O teste rejeita implementações que invertem a lógica de "par ou ímpar";
- O teste rejeita implementações que não aplicam a regra de índice positivo válido;
- O teste rejeita implementações que aplicam ordenação ao invés de inversão;
- O teste rejeita implementações que não validam o tipo das entradas;
- O teste aprova implementações corretas.
3 - Palíndromos (Recursividade)
- O código foi feito dentro do arquivo challenges/challenge_palindromes_recursive.py.
- 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.
4 - Anagramas (Algoritmo de ordenação)
- O código foi feito dentro do arquivo challenges/challenge_anagrams.py.
- 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;
- A função se comporta como no máximo O(n log n), ou seja, com complexidade assintótica linearítmica.
- Retorna True se as palavras passadas forem anagramas sem diferenciar maiúsculas e minúsculas.
5 - Encontrando números repetidos (Algoritmo de busca)
- O código foi feito dentro do arquivo challenge_find_the_duplicate.py.
- Retorna o númaro repetido 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;
- A função se comporta como no máximo O(n log n), ou seja, com complexidade assintótica linearítmica.
6 - Palíndromos (Iteratividade)
- O código foi feito dentro do arquivo challenge_palindromes_iterative.py.
- Retorna True se a palavra passada como parâmetro for um palíndromo, executando uma função iterativa;
- Retorna False se a palavra passada como parâmetro não for um palíndromo, executando uma função iterativa;
- Retorna False se nenhuma palavra for passada como parâmetro, executando uma função iterativa ;
- A função se comporta como no máximo O(n), ou seja, com complexidade assintótica linear.