Skip to content

Latest commit

 

History

History
275 lines (186 loc) · 10.9 KB

README.md

File metadata and controls

275 lines (186 loc) · 10.9 KB

🚧 README customizado em construção ! 🚧

Algorithms

Índice
  1. Sobre o Projeto
  2. Começando
  3. Uso
  4. Contato
  5. Agradecimentos

Sobre o Projeto

Neste projeto resolvi problemas e otimizar algoritmos desenvolvendo a minha capacidade de implementar soluções para os mais diversos problemas do dia a dia!

Habilidades trabalhadas

  • 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.

Construido Com

  • Python
  • pytest

(voltar ao topo)

Começando

Instalação

  1. Clonar o repositorio

     git clone git@github.com:RenanFernandess/trybe-project-algorithms.git
    
  2. Entrar na pasta project-job-insights

     cd ./trybe-project-algorithms
    

Ambiente virtual

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.

  1. criar o ambiente virtual

     python3 -m venv .venv
    
  2. ativar o ambiente virtual

     source .venv/bin/activate
    
  3. 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.

Tests

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

(voltar ao topo)

Uso

  1. 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;
  2. 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.
  3. 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 ou False 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;
  4. 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;
  5. 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.

(voltar ao topo)

Contato

(voltar ao topo)

Agradecimentos

(voltar ao topo)