Boas Vindas ao Repositório do Projeto Algorithms

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
  1. Para clonar a aplicação:
git clone git@github.com:georgia-rocha/algorithms.git
  1. Para entrar no diretório do projeto:
 cd algorithms
  1. Para criar um ambiente virtual para o projeto:
python3 -m venv .venv && source .venv/bin/activate
  1. Instale as dependências:
python3 -m pip install -r dev-requirements.txt
  1. 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.

Requisitos 100%

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:
  1. Retorna a quantidade de estudantes presentes para uma entrada específica;
  2. Retorna None se em permanence_period houver alguma entrada inválida;
  3. Retorna None se target_time recebe um valor vazio;
  4. 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
  1. O teste rejeita implementações que invertem a lógica de "par ou ímpar";
  2. O teste rejeita implementações que não aplicam a regra de índice positivo válido;
  3. O teste rejeita implementações que aplicam ordenação ao invés de inversão;
  4. O teste rejeita implementações que não validam o tipo das entradas;
  5. O teste aprova implementações corretas.
3 - Palíndromos (Recursividade)
  • O código foi feito dentro do arquivo challenges/challenge_palindromes_recursive.py.
  1. Retorna True se a palavra passada por parâmetro for um palíndromo;
  2. Retorna False se a palavra passada por parâmetro não for um palíndromo;
  3. 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.
  1. Retorna True se as palavras passadas por parâmetro forem anagramas;
  2. Retorna False se as palavras passadas por parâmetro não forem anagramas;
  3. Retorna False se alguma das palavras passadas por parâmetro for uma string vazia;
  4. A função se comporta como no máximo O(n log n), ou seja, com complexidade assintótica linearítmica.
  5. 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.
  1. Retorna o númaro repetido se a função receber como parâmetro uma lista com números repetidos;
  2. Retorna False se a função não receber nenhum parâmetro;
  3. Retorna False se a função receber como parâmetro uma string;
  4. Retorna False se a função receber como parâmetro uma lista sem números repetidos;
  5. Retorna False se a função receber como parâmetro apenas um valor;
  6. Retorna False se a função receber como parâmetro um número negativo;
  7. 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.
  1. Retorna True se a palavra passada como parâmetro for um palíndromo, executando uma função iterativa;
  2. Retorna False se a palavra passada como parâmetro não for um palíndromo, executando uma função iterativa;
  3. Retorna False se nenhuma palavra for passada como parâmetro, executando uma função iterativa ;
  4. A função se comporta como no máximo O(n), ou seja, com complexidade assintótica linear.