<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matheus 🇧🇷</title>
    <description>The latest articles on DEV Community by Matheus 🇧🇷 (@mpfdev).</description>
    <link>https://dev.to/mpfdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F437905%2F1da53683-99bc-486f-8ecb-8bbc445ada12.jpg</url>
      <title>DEV Community: Matheus 🇧🇷</title>
      <link>https://dev.to/mpfdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mpfdev"/>
    <language>en</language>
    <item>
      <title>CS61A: Projeto Hog (Parte 2)</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Mon, 16 Oct 2023 12:10:47 +0000</pubDate>
      <link>https://dev.to/mpfdev/cs61a-projeto-hog-parte-2-13al</link>
      <guid>https://dev.to/mpfdev/cs61a-projeto-hog-parte-2-13al</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;O curso CS 61A da Universidade da Califórnia, Berkeley, é um curso de introdução à ciência da computação. Ele busca fornecer uma base sólida em programação, abordando conceitos fundamentais de estruturas de dados, algoritmos e paradigmas de programação. O curso é conhecido por sua ênfase em Python como a linguagem principal de programação e pela abordagem prática e desafiadora.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Fase 1: Problema 2
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Implemente &lt;code&gt;boar_brawl&lt;/code&gt;, que recebe a pontuação do jogador &lt;code&gt;player_score&lt;/code&gt; e a pontuação do oponente &lt;code&gt;opponent_score&lt;/code&gt;, e retorna o número de pontos feitos pelo &lt;strong&gt;Boar Brawl&lt;/strong&gt; quando o jogador joga 0 dados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Boar Brawl&lt;/strong&gt;: Jogador que rola pontuação zero do dado pontua três vezes a diferença absoluta entre o digito das dezenas da pontuação do oponente e o dígito da unidade da pontuação do jogador, ou 1, o que for maior. Se a pontuação do jogador for de dígito único (menor do que 10), o dígito das dezenas do jogador será 0.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exemplos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Exemplo 1&lt;/em&gt;: 

&lt;ul&gt;
&lt;li&gt;A pontuação atual do jogador é de &lt;code&gt;21&lt;/code&gt; pontos e a da oponente é de &lt;code&gt;46&lt;/code&gt; pontos, e o jogador da rodada escolher rodar nenhum dado (zero dados).&lt;/li&gt;
&lt;li&gt;O dígito das dezenas da pontuação do oponente é &lt;code&gt;4&lt;/code&gt; e o dígito das unidades do jogador é &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Então, o jogador ganha &lt;code&gt;3 * abs(4 - 1) = 9&lt;/code&gt; pontos.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Exemplo 2&lt;/em&gt;:

&lt;ul&gt;
&lt;li&gt;A pontuação atual do jogador é de &lt;code&gt;45&lt;/code&gt; pontos e o oponente é de &lt;code&gt;52&lt;/code&gt; pontos, o jogador da rodada escolhe rodar nenhum dado (zero dados).&lt;/li&gt;
&lt;li&gt;O dígito das dezenas da pontuação é &lt;code&gt;5&lt;/code&gt; e o das unidades do jogador é &lt;code&gt;5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Então, &lt;code&gt;3 * abs(5 - 5) = 0&lt;/code&gt;, o jogador ganhará &lt;code&gt;1&lt;/code&gt; ponto.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Exemplo 3&lt;/em&gt;:

&lt;ul&gt;
&lt;li&gt;A pontuação atual do jogador é de &lt;code&gt;2&lt;/code&gt; pontos e a do oponente é de &lt;code&gt;5&lt;/code&gt; pontos, o jogador da rodada escolhe rodar nenhum dado (zero dados).&lt;/li&gt;
&lt;li&gt;O dígito das dezenas do oponente é &lt;code&gt;0&lt;/code&gt; e o dígito das unidades do jogador é &lt;code&gt;2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Então, o jogador ganha &lt;code&gt;3 * abs(0 - 2) = 6&lt;/code&gt; pontos.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Dica importante!&lt;/strong&gt;&lt;br&gt;
Don't assume that scores are below 100. Write your &lt;code&gt;boar_brawl&lt;/code&gt; function so that it works correctly for any non-negative score.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Solução
&lt;/h3&gt;

&lt;p&gt;A solução deste desafio é puramente matemática, e passa pelo entendimento das operações &lt;code&gt;//&lt;/code&gt; e &lt;code&gt;%&lt;/code&gt;, e da manipulação dos termos chamados &lt;code&gt;resto&lt;/code&gt; e &lt;code&gt;quociente&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O operando &lt;code&gt;//&lt;/code&gt; retorna o &lt;code&gt;quociente&lt;/code&gt; de uma divisão.&lt;br&gt;
O operando &lt;code&gt;%&lt;/code&gt; retorna o &lt;code&gt;resto&lt;/code&gt; de uma divisão.&lt;/p&gt;

&lt;p&gt;Segue na imagem abaixo uma representação melhor do uso destes operandos:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7oFfujoN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nsn9qlc4d1m1fle3h8oj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7oFfujoN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nsn9qlc4d1m1fle3h8oj.png" alt="três operações de divisão" width="586" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A partir daí, eu já posso olhar para os exemplos dados pela atividade para elaborar o algoritmo a ser utilizado para a solução desta fase do projeto.&lt;/p&gt;

&lt;p&gt;Então, olhando para o &lt;em&gt;Exemplo 1&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pontuação do jogador é &lt;code&gt;21&lt;/code&gt; pontos, quero o valor do seu dígito das unidades que é &lt;code&gt;1&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Pontuação do oponente é &lt;code&gt;46&lt;/code&gt; pontos, quero o valor do seu dígito das dezenas que é &lt;code&gt;4&lt;/code&gt;;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quais operações devo fazer, usando apenas a divisão para extrair os números que quero na proposta deste desafio. Deixei uma pista na divisão do 15 ÷ 10.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se eu realizar a operação &lt;code&gt;21 ÷ 10&lt;/code&gt; e procurar pelo o seu resto, vou obter &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Se eu realizar a operação &lt;code&gt;46 ÷ 10&lt;/code&gt; e procurar pelo o seu quociente, vou obter &lt;code&gt;4&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Excelente!&lt;/p&gt;

&lt;p&gt;Mas e nas situações que o valor da pontuação for &lt;code&gt;maior do que 100&lt;/code&gt;? Igual ao colocado na terceira representação de divisão da imagem acima.&lt;/p&gt;

&lt;p&gt;Vamos para mais uma imagem para a representação deste caso:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZjMOPqEa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3x5pmnp5k7dyyi648mhr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZjMOPqEa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3x5pmnp5k7dyyi648mhr.png" alt="duas operações de divisão" width="482" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Observamos que para o caso da pontuação do jogador, onde se busca o dígito das unidades, &lt;code&gt;nada se altera&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Para o caso da pontuação do oponente, precisamos realizar duas operações.

&lt;ul&gt;
&lt;li&gt;Primeiro buscamos o seu &lt;code&gt;quociente&lt;/code&gt; através do operador &lt;code&gt;//&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Com o seu &lt;code&gt;quociente&lt;/code&gt;, repetimos a operação mas agora buscando o seu &lt;code&gt;resto&lt;/code&gt; através do operador &lt;code&gt;%&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A partir do entendimento do problema e da criação da solução, podemos então ir para a parte do código e testar para ver se atende todos os casos possíveis.&lt;/p&gt;

&lt;p&gt;Solução em Python:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dmOC1G5C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n3mk18p8t2beitfbzm8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dmOC1G5C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n3mk18p8t2beitfbzm8a.png" alt="Solução em Python" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aprovado em todos os testes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gMEVnAu3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/00jtcss4409nl3g27puc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gMEVnAu3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/00jtcss4409nl3g27puc.png" alt="Casos de Teste aprovados" width="573" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;A partir do momento que se entende o padrão, utilizar a ferramenta da &lt;strong&gt;linguagem de programação&lt;/strong&gt; é o processo mais fácil da atividade. Este desafio testou muito mais a utilização de operações matemáticas para encontrar a sua solução e manter a lógica de pontuação do 'Jogo do Hog', através deste sistema &lt;strong&gt;Boar Brawl&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Espero que a explicação esteja clara e ajude a quem está começando. Nos vemos na próxima!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>python</category>
    </item>
    <item>
      <title>CS61A: Projeto HOG (Parte 1)</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Fri, 13 Oct 2023 22:07:12 +0000</pubDate>
      <link>https://dev.to/mpfdev/cs61a-projeto-hog-parte-1-54bl</link>
      <guid>https://dev.to/mpfdev/cs61a-projeto-hog-parte-1-54bl</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;O curso CS 61A da Universidade da Califórnia, Berkeley, é um curso de introdução à ciência da computação. Ele busca fornecer uma base sólida em programação, abordando conceitos fundamentais de estruturas de dados, algoritmos e paradigmas de programação. O curso é conhecido por sua ênfase em Python como a linguagem principal de programação e pela abordagem prática e desafiadora.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esta publicação vai focar no primeiro projeto desta disciplina que é chamado 'O jogo de Hog'. Eu confesso que não conhecia este jogo até começar a fazer este desafio, continuo não tendo o jogado mas compreendi as regras que são explicadas na &lt;a href="https://cs61a.org/proj/hog/"&gt;página do projeto&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ainda não terminei de fazer este desafio, então vou publicar meus sucessos, dúvidas e dificuldades como forma de estudo e buscar trabalhar em cima da minha comunicação também. O projeto está divido em fases e cada fase possui uma série de problemas a serem solucionados.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase 1: Problema 1
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Implemente a função &lt;code&gt;roll_dice&lt;/code&gt; em &lt;code&gt;hog.py&lt;/code&gt;. Esta função recebe dois argumentos: um número inteiro positivo chamado &lt;code&gt;num_rolls&lt;/code&gt; recebendo o número de vezes que o dado será rolado e uma função &lt;code&gt;dice&lt;/code&gt;. Esta função retornará o número de pontos ao rolar o dado aquele número de vezes em uma rodada: será tanto a soma de suas saídas ou 1 (&lt;em&gt;Sow Sad&lt;/em&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sow Sad&lt;/strong&gt;. Se qualquer resultado do dado lançado for 1, a pontuação do jogador na rodada será &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exemplos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Exemplo 1&lt;/em&gt;: O jogador da rodada joga o dado 7 vezes, 5 destas são 1. A pontuação do turno será &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Exemplo 2&lt;/em&gt;: O jogador da rodada joga o dado 4 vezes, em todas são 3. Como Sow Sad não ocorreu, a pontuação do turno ao jogador será de &lt;code&gt;12&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Solução
&lt;/h3&gt;

&lt;p&gt;Uma dica importante fornecida na descrição do problema é a seguinte:&lt;/p&gt;

&lt;p&gt;"You should call &lt;code&gt;dice()&lt;/code&gt; exactly &lt;code&gt;num_rolls&lt;/code&gt; times in the body of &lt;code&gt;roll_dice&lt;/code&gt;."&lt;/p&gt;

&lt;p&gt;A primeira abordagem que me veio à mente ao olhar para os exemplos foi utilizar as condicionais para verificar se o valor de algum dos dados é igual a 1 e, caso positivo, retornar 1.&lt;/p&gt;

&lt;p&gt;No entanto, essa abordagem enfrenta um desafio que vai em direção oposta a &lt;strong&gt;dica importante&lt;/strong&gt; fornecida na descrição do problema. No momento que o laço repetitivo encontrar o valor, interromperá o laço, ou seja, impedirá que a função &lt;code&gt;dice()&lt;/code&gt; seja chamada exatamente &lt;code&gt;num_rolls&lt;/code&gt; vezes, como exigido pelo problema.&lt;/p&gt;

&lt;p&gt;Uma alternativa que encontrei foi a utilização de uma flag (valor booleano).  Quando um valor igual a 1 é encontrado em uma jogada, a flag é definida como verdadeira. O loop continua rodando o número de vezes especificado em num_rolls.&lt;/p&gt;

&lt;p&gt;Após o término do loop, outra condicional pode ser usada para determinar o valor da resposta, que será 1 se a flag for verdadeira (indicando que ocorreu o &lt;strong&gt;Sow Sad&lt;/strong&gt;), ou o valor acumulado das jogadas, caso contrário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vDPyUgtc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lokuc51ikf1fum641gka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vDPyUgtc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lokuc51ikf1fum641gka.png" alt="Solução" width="401" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Trocar um &lt;code&gt;for _ in range()&lt;/code&gt; por um &lt;code&gt;while&lt;/code&gt; foi um marco para mim na solução deste desafio, e a utilização de flags para indicar a ocorrência de uma ação tornou o código mais claro.&lt;/p&gt;

&lt;p&gt;Quero buscar falar de cada problema que for fazendo e aprimorar minha capacidade de solucionar problemas, espero que isto ajude a quem buscar fazer este curso.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>cs61a</category>
      <category>python</category>
    </item>
    <item>
      <title>30 dias de Cybersegurança: Os sete primeiros dias de descobertas</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Thu, 07 Sep 2023 19:44:24 +0000</pubDate>
      <link>https://dev.to/mpfdev/30-dias-de-cyberseguranca-os-sete-primeiros-dias-de-descobertas-51gn</link>
      <guid>https://dev.to/mpfdev/30-dias-de-cyberseguranca-os-sete-primeiros-dias-de-descobertas-51gn</guid>
      <description>&lt;p&gt;Olá! Este texto busca sintetizar os aprendizados destes sete primeiros dias de desafios propostas pela comunidade &lt;a href="https://www.instagram.com/meninadecybersec/"&gt;Menina de Cybersec&lt;/a&gt;, cujo objetivo é, segundo a própria comunidade: "A ideia dessa série de desafios é fazer com que você conheça o mundo de cibersegurança, profissionais, livros, podcasts e quem sabe, encontre a área dos sonhos."&lt;/p&gt;

&lt;p&gt;Tento colocar aqui em algumas palavras esta área que venho buscando acrescentar diariamente aos meus estudos, e propor para os que estejam também curiosos a se juntar a esta comunidade no Discord.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aviso: Embora numa oportunidade eu tenha feito o &lt;strong&gt;treinamento intensivo&lt;/strong&gt; da &lt;a href="https://febrabantech.febraban.org.br/eventos/cyber-academy"&gt;FEBRABAN&lt;/a&gt; em parceria com a Accenture Brasil, eu considerei o começo desta atividade da comunidade Menina de CyberSec como se estivesse começando do zero. Visto como uma série de desafios para me auxiliar no aprendizado deste setor que me vem despertando um grande interesse e alvo de estudos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos começar!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conhecendo Cybersecurity
&lt;/h2&gt;

&lt;p&gt;No primeiro dia, começamos nossa jornada explorando um ponto de partida interessante para segmentar os dois lados da mesma moeda no campo da cibersegurança: a segurança defensiva e a segurança ofensiva. Não sendo uma melhor ou pior do que a outra, são duas áreas complementares que buscam o trabalho constante de atualização e compartilhamento de experiências para otimizar suas tarefas e rotinas.&lt;/p&gt;

&lt;p&gt;O desafio proposto pela comunidade envolve a leitura e a prática dentro da plataforma TryHackMe, que abrange conteúdos relacionados a essas duas áreas de segurança cibernética e oferece atividades para aprofundar o conhecimento. O que foi muito positivo neste primeiro dia é conhecer também os cargos disponíveis em ambas as frentes de segurança, bem como o escopo de atividades relacionadas a cada uma.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Segurança Ofensiva&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A segurança ofensiva está fortemente relacionada à descoberta de vulnerabilidades. Esta é uma área onde busca-se identificar fragilidades em diferentes aplicações e tecnologias por meio de testes. Um dos cargos mais comuns nesse campo é o de pentester.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Segurança Defensiva&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em contraste com a segurança ofensiva, a segurança defensiva é responsável por detectar e interromper ataques. Essa área envolve monitoramento constante e análise para identificar anomalias e se manter atualizada, já que novas formas de ataque e tecnologias são descobertas todos os dias. Um cargo comum nessa área é o de analista de segurança.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conhecendo a Segurança Ofensiva
&lt;/h2&gt;

&lt;p&gt;Neste dia, aprofundamos nossa compreensão da segurança ofensiva, um campo que requer uma abordagem única. É fundamental adotar a mentalidade do "pensar fora da caixa" para identificar vulnerabilidades antes que aqueles com intenções maliciosas o façam.&lt;/p&gt;

&lt;p&gt;Uma citação notável que encapsula essa abordagem é: "Para vencer um hacker, você precisa se comportar como um hacker."&lt;/p&gt;

&lt;p&gt;Durante este processo de aprendizagem, também iniciamos uma atividade prática em um ambiente de laboratório. Nessa experiência, você terá seu primeiro contato com a linha de comando, com o objetivo final de obter uma mensagem secreta. Este é o começo da jornada na exploração das táticas e técnicas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conhecendo a Segurança Defensiva
&lt;/h2&gt;

&lt;p&gt;No outro lado da moeda, temos o campo que se dedica a defender a rede de uma organização e seus sistemas, monitorando e identificando potenciais ameaças. Este campo é frequentemente representado pelo SOC (Security Operations Center), o departamento responsável pelo monitoramento proativo e resposta a incidentes de segurança.&lt;/p&gt;

&lt;p&gt;O SOC desempenha um papel crítico na proteção de ativos digitais, identificando atividades suspeitas e agindo rapidamente para mitigar ameaças. É um ambiente dinâmico onde os profissionais de segurança trabalham para manter a integridade das operações da organização.&lt;/p&gt;

&lt;p&gt;Até este ponto, podemos perceber que a cibersegurança é bem interessante, abordando tanto a ofensiva quanto a defensiva. Entender os diferentes níveis de ataques e as estratégias para combatê-los é uma jornada que promete desafios a cada dia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Os Pilares de Segurança da Informação
&lt;/h2&gt;

&lt;p&gt;Ao adentrar o mundo da cibersegurança, somos apresentados a um novo termo fundamental nesta série de desafios: o CID, que representa Confidencialidade, Integridade e Disponibilidade. Esses três pilares são a base da segurança da informação e são essenciais para proteger os ativos digitais de qualquer organização.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Confidencialidade&lt;/strong&gt;: Como o próprio nome diz respeito à garantia de que as informações sensíveis e os dados críticos sejam acessíveis apenas por pessoas autorizadas. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integridade&lt;/strong&gt;: A integridade concentra-se em manter a precisão e a integridade dos dados ao longo do tempo. Isso significa garantir que os dados não sejam alterados de forma não autorizada, e assim permaneçam confiáveis. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Disponibilidade&lt;/strong&gt;: A disponibilidade se refere à acessibilidade dos dados e serviços quando são necessários. Em outras palavras, os dados e sistemas críticos devem estar disponíveis e funcionando para os usuários &lt;strong&gt;sempre&lt;/strong&gt; quando necessário. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recapitulação da Primeira Semana
&lt;/h2&gt;

&lt;p&gt;Um dos momentos mais marcantes desta primeira semana foi a minha percepção pessoal de que termos como &lt;strong&gt;Red Team&lt;/strong&gt; ou &lt;strong&gt;Blue Team&lt;/strong&gt; não representam inimigos que competem entre si para vencer. Pelo contrário, eles são como duas partes complementares e interligadas, colaborando para promover a progressão e a melhoria contínua dos sistemas, aplicações, tecnologias e a segurança geral de uma organização.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Red Team&lt;/strong&gt;: O Red Team desempenha um papel fundamental ao atuar como o "atacante" que testa e identifica vulnerabilidades em sistemas e redes. Essa equipe desafia o status quo e ajuda a identificar pontos fracos antes que pessoas com intenções maliciosas o façam.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blue Team&lt;/strong&gt;: O Blue Team, por sua vez, é a equipe de defesa, encarregada de monitorar e proteger os sistemas contra ameaças. Eles respondem aos desafios apresentados pelo Red Team e trabalham para fortalecer a postura de segurança da organização.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A cooperação entre essas duas equipes é crucial para a cibersegurança eficaz de qualquer organização. Em vez de serem adversários, eles compartilham um objetivo comum: proteger os ativos digitais e garantir a continuidade das operações.&lt;/p&gt;




&lt;p&gt;Vamos para a próxima semana!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Guia para Iniciantes: Criando uma API com Node.js, PostgreSQL e Padrão MVC</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Tue, 22 Aug 2023 23:05:11 +0000</pubDate>
      <link>https://dev.to/mpfdev/guia-para-iniciantes-criando-uma-api-com-nodejs-postgresql-e-padrao-mvc-4027</link>
      <guid>https://dev.to/mpfdev/guia-para-iniciantes-criando-uma-api-com-nodejs-postgresql-e-padrao-mvc-4027</guid>
      <description>&lt;p&gt;&lt;em&gt;Introdução&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Este artigo de hoje, está mais para uma guia de introdução para a construção de uma API utilizando as tecnologias mencionadas no título: &lt;code&gt;Node.JS&lt;/code&gt;, &lt;code&gt;PostgreSQL&lt;/code&gt; e utilizando o &lt;code&gt;padrão MVC&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Não tive a pretensão de escrever um guia completo, procurei escrever de uma maneira que eu gostaria de ter encontrado quando comecei a estudar, sem ter todas as respostas, mas que me indicassem um norte de onde seria o próximo passo para estudar e aprofundar.&lt;/p&gt;

&lt;p&gt;Este guia busca isso, ser menos teórico, quando comparado a publicações anteriores, e mais aplicação prática. Assim como, estou aceitando correções, pois também estou aprendendo e compartilhando como eu mesmo faço.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Este artigo é parte de uma síntese de anotações soltas sobre desenvolvimento web e do Bootcamp que estou fazendo atualmente em desenvolvimento full stack.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Então, vamos começar!&lt;/p&gt;

&lt;h2&gt;
  
  
  Passo 1: Configuração do Projeto
&lt;/h2&gt;

&lt;p&gt;Primeiro, é necessário configurar o ambiente de desenvolvimento e nos certificamos de que possuímos o &lt;code&gt;Node.Js&lt;/code&gt; instalado em nosso sistema operacional. Para isto, verifique se o &lt;code&gt;Node.Js&lt;/code&gt; com o seguinte comando em seu terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se o &lt;code&gt;Node.Js&lt;/code&gt; estiver instalado, aparecerá a versão correspondente. Se não, não tem problema. Basta instalar o &lt;code&gt;Node.Js&lt;/code&gt; seguindo as instruções no &lt;a href="https://nodejs.org/en"&gt;site oficial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em seguida, crie uma pasta onde será armazenado o seu projeto. No meu caso, nomearei a pasta de &lt;code&gt;projdesafio&lt;/code&gt; pois estou dando prosseguimento ao projeto relacionado a um desafio feito no &lt;a href="https://www.atlanticoavanti.com.br/bootcamp"&gt;Bootcamp da Atlantico Avanti&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Em seu terminal, digite o seguinte comando para a criação de uma pasta:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# mkdir nome_da_pasta&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;projdesafio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Navegue até a pasta criada usando o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cd nome_da_pasta&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;projdesafio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Agora, dentro da pasta, é hora de &lt;strong&gt;iniciar o projeto em Node.Js&lt;/strong&gt;, com o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao executar este último comando, será criado um arquivo &lt;code&gt;package.json&lt;/code&gt; com valores padrões. Este arquivo é essencial para projetos em &lt;code&gt;Node.Js&lt;/code&gt;, pois contém informações sobre os projetos, dependências, scripts personalizados (olá &lt;a href="https://nodemon.io/"&gt;nodemon&lt;/a&gt;!) e outros.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O gerenciador de pacotes fornecerá um método para instalar novas dependências (também chamadas de "pacotes"), gerenciar onde os pacotes são armazenados em seu sistema de arquivos e oferecer recursos para que você possa publicar seus próprios pacotes.&lt;/p&gt;

&lt;p&gt;Em teoria, você pode não precisar de um gerenciador de pacotes e poderia baixar e armazenar manualmente as dependências do seu projeto, mas um gerenciador de pacotes lidará automaticamente com a instalação e desinstalação dos pacotes. Se você não usasse um, teria que lidar manualmente com isso.&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Package_management"&gt;mdn web docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;No diretório &lt;code&gt;projdesafio&lt;/code&gt;, crie um arquivo chamado &lt;code&gt;app.js&lt;/code&gt;. E assim, estará nossa estrutura de arquivos até aqui:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;projdesafio/
├── app.js
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Agora vamos instalar o &lt;code&gt;Express&lt;/code&gt; como uma dependência do nosso projeto. Abra o seu terminal e introduza este comando para a instalação:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a instalação, aparecerá uma nova chamada &lt;code&gt;node_modules&lt;/code&gt; dentro da sua pasta. Em breve, vamos começar a a configurar o nosso arquivo &lt;code&gt;app.js&lt;/code&gt; para utilizar o Express e começar a construir a nossa API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;projdesafio/
├── node_modules/
│   ├── ... &lt;span class="o"&gt;(&lt;/span&gt;dependências instaladas&lt;span class="o"&gt;)&lt;/span&gt;
├── app.js
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 2: Configurando o Banco de Dados
&lt;/h2&gt;

&lt;p&gt;Perfeito!&lt;/p&gt;

&lt;p&gt;Vamos continuar agora para a parte do banco de dados. No projeto do &lt;a href="https://www.atlanticoavanti.com.br/bootcamp"&gt;Bootcamp&lt;/a&gt; eu estarei partindo do principio que você conhece tanto as partes DDL quanto DML em SQL.&lt;/p&gt;

&lt;p&gt;Caso não tenha ideia do que estou falando, segue esta publicação onde abordei estes assuntos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/matt1cs/entendendo-a-relacao-entre-sql-dml-e-ddl-fundamentos-de-banco-de-dados-23bi"&gt;Entendendo a Relação entre SQL, DML e DDL: Fundamentos de Banco de Dados&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O Banco de Dados já está criado com esta tabela a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- tabela cliente&lt;/span&gt;
&lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="n"&gt;Cliente&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;serial&lt;/span&gt; &lt;span class="k"&gt;primary&lt;/span&gt; &lt;span class="k"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;cpf&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="k"&gt;unique&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- tabela certidao&lt;/span&gt;
&lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="n"&gt;Certidao&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;serial&lt;/span&gt; &lt;span class="k"&gt;primary&lt;/span&gt; &lt;span class="k"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;cliente_id&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="k"&gt;references&lt;/span&gt; &lt;span class="n"&gt;Cliente&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;data_emissao&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;hora_emissao&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;validade&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;codigo_validacao&lt;/span&gt; &lt;span class="nb"&gt;boolean&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta é só uma parte, como esta publicação só tem o intuito de apresentar &lt;strong&gt;inicialmente&lt;/strong&gt; e não se aprofundará sobre outros aspectos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No diretório &lt;code&gt;projdesafio&lt;/code&gt;, abra o terminal e instale o pacote &lt;code&gt;pg&lt;/code&gt;, que vai nos permitir termos uma interface com o banco de dados &lt;code&gt;PostgreSQL&lt;/code&gt; em nossa aplicação &lt;code&gt;Node.Js&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;pg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Em seguida, crie uma pasta chamada &lt;code&gt;config&lt;/code&gt;, é esta pasta que será usada para armazenar as configurações com o nosso banco de dados.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;projdesafio/
├── node_modules/
│   ├── ... &lt;span class="o"&gt;(&lt;/span&gt;dependências instaladas&lt;span class="o"&gt;)&lt;/span&gt;
├── config/
├── app.js
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Dentro da pasta &lt;code&gt;config&lt;/code&gt;, crie um arquivo chamado &lt;code&gt;db.js&lt;/code&gt;. Este arquivo conterá o código para estabelecer conexão com o &lt;code&gt;PostgreSQL&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Pool&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Configurações do banco de dados&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Pool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;altere_para_seu_usuario&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;localhost&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;altere_para_o_seu_banco_de_dados&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;altere_para_a_sua_senha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5432&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Porta padrão do PostgreSQL&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Exportando para usarmos posteriomente&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usamos o &lt;code&gt;module.exports&lt;/code&gt; para permitir que outras partes da aplicação posteriormente possam utilizar estas configurações para acessar o banco de dados.&lt;/p&gt;

&lt;p&gt;Desta forma, posteriormente, outros módulos poderão obter uma conexão com o banco de dados, e assim realizar as operações &lt;code&gt;SQL&lt;/code&gt; necessárias da nossa API.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assim agora se encontrar a nossa estrutura de pastas e arquivos:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;projdesafio/
├── node_modules/
│   ├── ... &lt;span class="o"&gt;(&lt;/span&gt;dependências instaladas&lt;span class="o"&gt;)&lt;/span&gt;
├── config/
│   ├── db.js
├── app.js
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 3: Estrutura MVC
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Apesar de muitas pessoas considerarem essa sigla como um padrão de design de interface, na verdade ele &lt;strong&gt;é um padrão de arquitetura de software responsável por contribuir na otimização da velocidade entre as requisições feitas pelo comando dos usuários&lt;/strong&gt;.   &lt;/p&gt;

&lt;p&gt;Com quase 50 anos de formulação, a arquitetura MVC é dividida em três componentes essenciais: Model, Controller e View.&lt;br&gt;
&lt;a href="https://blog.lewagon.com/pt-br/skills/o-que-e-padrao-mvc/"&gt;Le wagon - O que é MVC?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Como neste projeto aqui se trata apenas de uma API sem interface gráfica, a pasta &lt;code&gt;views&lt;/code&gt; ficará vazia, mas será criadas apenas para fins de documentação desta publicação.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No diretório &lt;code&gt;projdesafio&lt;/code&gt;, crie três pastas: &lt;code&gt;models&lt;/code&gt;, &lt;code&gt;controllers&lt;/code&gt;, &lt;code&gt;views&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;models controllers views
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Estrutura de pastas e arquivos do projeto até então:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;projdesafio/
├── node_modules/
│   ├── ... &lt;span class="o"&gt;(&lt;/span&gt;dependências instaladas&lt;span class="o"&gt;)&lt;/span&gt;
├── config/
│   ├── db.js
├── models/
├── controllers/
├── views/
├── app.js
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 4: Modelagem de Dados
&lt;/h2&gt;

&lt;p&gt;Vamos começar pela criação do modelo na pasta &lt;code&gt;models&lt;/code&gt;, seguindo o padrão MVC. Criaremos duas funções realizando &lt;strong&gt;funções SQL&lt;/strong&gt; para interagir com o banco de dados.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;getAllClients (buscar todos os clientes)&lt;/li&gt;
&lt;li&gt;createNewClient(adicionar novo cliente)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No diretório &lt;code&gt;projdesafio/models&lt;/code&gt;, crie um arquivo chamado &lt;code&gt;ClienteModel.js&lt;/code&gt;. Abra o arquivo &lt;code&gt;ClienteModel.js&lt;/code&gt; e importe a configuração com o banco de dados e implemente as funções e consultas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../config/db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Importe a configuração do banco de dados&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cliente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;getAllClients&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SELECT * FROM Cliente&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="na"&gt;createNewClient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;INSERT INTO Cliente (nome, cpf) VALUES ($1, $2) RETURNING *&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Cliente&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exportando o módulo como  &lt;code&gt;Cliente&lt;/code&gt;, agora podemos acessar quando criarmos os nossos controladores para acessar o banco de dados, realizar as &lt;code&gt;funções SQL&lt;/code&gt; e implementar as operações da nossa API.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aqui está a estrutura até então do nosso projeto:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;projdesafio/
├── node_modules/
│   ├── ... &lt;span class="o"&gt;(&lt;/span&gt;dependências instaladas&lt;span class="o"&gt;)&lt;/span&gt;
├── config/
│   ├── db.js
├── models/
│   ├── ClienteModel.js
├── controllers/
├── views/
├── app.js
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Isso tudo aqui é muito básico e eu ainda estou aprendendo também. Pode expandir, adicionar validações, tratamento de erros e outras funcionalidades.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Passo 5: Criando Controladores
&lt;/h2&gt;

&lt;p&gt;Seguindo vamos para a criação dos controladores que irão manipular as ações relacionadas ao modelo &lt;code&gt;Cliente&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Controladores&lt;/code&gt; fazem a intermediação entre as requisições HTTP e os Models.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No diretório &lt;code&gt;projdesafio/controllers&lt;/code&gt;, crie um arquivo chamado &lt;code&gt;clienteController.js&lt;/code&gt;. Abra o arquivo &lt;code&gt;clienteController.js&lt;/code&gt; e importe o modelo criado anteriormente:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ClienteModel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../models/ClienteModel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Importe o modelo&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clienteController&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;getAllClients&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clients&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ClienteModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAllClients&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clients&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Erro ao obter lista de clientes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="na"&gt;createNewClient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cpf&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ClienteModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createNewClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Erro ao criar novo cliente.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;clienteController&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A partir daqui, podemos configurar o nosso &lt;code&gt;app.js&lt;/code&gt; usando os controladores para definir as rotas e quais ações correspondentes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aqui está a estrutura até então do nosso projeto:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;projdesafio/
├── node_modules/
│   ├── ... &lt;span class="o"&gt;(&lt;/span&gt;dependências instaladas&lt;span class="o"&gt;)&lt;/span&gt;
├── config/
│   ├── db.js
├── models/
│   ├── ClienteModel.js
├── controllers/
│   ├── clienteController.js
├── views/
├── app.js
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 6: Integração de Controladores e Modelos
&lt;/h2&gt;

&lt;p&gt;Abra o nosso arquivo &lt;code&gt;app.js&lt;/code&gt; e vamos começar importando as dependências necessárias, incluindo a configuração com o banco de dados, o &lt;code&gt;express&lt;/code&gt; e o controlador.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./config/db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clienteController&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./controllers/clienteController&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//Instância do Express&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Porta para o servidor, por exemplo a 3000&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;//Middleware para tratar os dados no formato JSON&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/clientes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clienteController&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAllClients&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Rota para obter todos os clientes&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/clientes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clienteController&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createNewClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Rota para adicionar um novo cliente&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Servidor na porta &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 7: Testando a API
&lt;/h2&gt;

&lt;p&gt;Vamos testar a nossa API utilizando o &lt;code&gt;Postman&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Testando a rota &lt;code&gt;GET&lt;/code&gt; para listar todos os clientes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;1- Servidor precisa estar em execução, assim como o banco de dados&lt;span class="p"&gt;;&lt;/span&gt;
2- Crie uma nova requisição no Postman&lt;span class="p"&gt;;&lt;/span&gt;
3- Selecione o método HTTP como GET&lt;span class="p"&gt;;&lt;/span&gt;
4- Insira a URL: http://localhost:3000/api/clientes
5- Clique em Send &lt;span class="o"&gt;(&lt;/span&gt;Enviar&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Testando a rota &lt;code&gt;POST&lt;/code&gt; para criar um novo cliente:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;1- Crie uma nova requisição no Postman&lt;span class="p"&gt;;&lt;/span&gt;
2- Selecione o método HTTP como POST&lt;span class="p"&gt;;&lt;/span&gt;
4- Insira a URL: http://localhost:3000/api/clientes
5- Na seção Body, selecione raw e escolha o formato JSON.
6- Insira os dados no formato JSON:
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"nome"&lt;/span&gt;: &lt;span class="s2"&gt;"Blue"&lt;/span&gt;,
  &lt;span class="s2"&gt;"cpf"&lt;/span&gt;: &lt;span class="s2"&gt;"12345678901"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
7- Clique em Send &lt;span class="o"&gt;(&lt;/span&gt;Enviar&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;Postman&lt;/code&gt; enviará as requisições para o nosso servidor local e você verá as respostas da API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Parabéns! Terminamos nosso guia de introdução aqui, e fica para você continuar estudando, implementando e melhorando a aplicação.&lt;/p&gt;

&lt;p&gt;A partir daí, você consegue estabelecer um CRUD (criar, ler, atualizar e deletar), seguindo o mesmo fluxo de informação de um módulo para outro, utilizando &lt;code&gt;Node.Js&lt;/code&gt;, &lt;code&gt;PostgreSQL&lt;/code&gt; e o padrão de &lt;code&gt;arquitetura MVC&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Desvendando as Diferenças: APIs, Web Services, SOAP e HTTP Simplificados</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Fri, 11 Aug 2023 11:48:52 +0000</pubDate>
      <link>https://dev.to/mpfdev/desvendando-as-diferencas-apis-web-services-soap-e-http-simplificados-4230</link>
      <guid>https://dev.to/mpfdev/desvendando-as-diferencas-apis-web-services-soap-e-http-simplificados-4230</guid>
      <description>&lt;p&gt;&lt;em&gt;Introdução&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Neste artigo irei explorar sobre as APIs (Interfaces de Programação de Aplicativos) que desempenham este papel intermediário para que diferentes sistemas se comuniquem. &lt;/p&gt;

&lt;p&gt;No entanto, o universo da APIs é cercado de terminologias que, as vezes, pode tornar a compreensão complexa, com termos como API interna, API externa, Web API, Web Services, SOAP, HTTP e etc. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Este artigo é parte de uma síntese de anotações soltas sobre desenvolvimento web e do Bootcamp que estou fazendo atualmente em desenvolvimento full stack.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Então, vamos começar!&lt;/p&gt;

&lt;h2&gt;
  
  
  APIs: A Base da Interconexão
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Uma API (&lt;em&gt;Application Programming Interface&lt;/em&gt;) é um conjunto de características e regras existentes em uma aplicação que possibilitam interações com essa através de um software - ao contrário de uma interface de usuário humana. A API pode ser entendida como um simples contrato entre a aplicação que a fornece e outros itens, como outros componentes do software, ou software de terceiros. &lt;a href="https://developer.mozilla.org/pt-BR/docs/Glossary/API"&gt;mdn web docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;É importante entender que as APIs servem como pontes entre sistemas e aplicativos, servindo para a troca de informações de forma padronizada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cardápio de restaurante como a API
&lt;/h3&gt;

&lt;p&gt;Desta maneira, vamos pensar numa situação de um cardápio de restaurante. Imagina que você é um cliente (software) e deseja fazer a solicitação de um item do menu (dados) do restaurante (sistema ou aplicativo).&lt;/p&gt;

&lt;p&gt;Em vez de você entrar na cozinha e fazer o pedido diretamente aos cozinheiros (código interno do restaurante), você olha para o cardápio (API) que lista os pratos disponíveis para a sua requisição.&lt;/p&gt;

&lt;p&gt;Assim como no cardápio terá o detalhamento de cada item como: prato, preço, ingredientes e como fazer o pedido; A API define as regras para que um software faça a solicitação para um sistema ou aplicativo.&lt;/p&gt;

&lt;p&gt;Ou seja, a API permite que você, como cliente/usuário, possa fazer a solicitação dos dados e/ou funcionalidades de uma aplicação ou sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais tipos de API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Pública&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A API é disponibilizada para todos. Terceiros podem desenvolver aplicações que interajam com a sua API e isso pode se tornar uma fonte de inovação. &lt;a href="https://www.redhat.com/pt-br/topics/api/what-are-application-programming-interfaces"&gt;Red hat&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Também conhecida como API Externa, estas são projetadas para permitir que diferentes aplicativos ou sistemas interajam uns com os outros, mesmo que não tenham sido desenvolvidas pela mesma equipe ou organização.&lt;/p&gt;

&lt;p&gt;Utilizando o mesmo contexto do restaurante, vamos imaginar agora que o restaurante decide oferecer um serviço de entrega.&lt;/p&gt;

&lt;p&gt;O restaurante não pode deslocar um atendendo para ficar entregando comida todo o tempo. Então o restaurante passa a fornecer uma lista dos itens disponíveis (dados) com todas as informações necessárias como preço e o endereço de entrega.&lt;/p&gt;

&lt;p&gt;Desta maneira, a API externa permite que o serviço de entrega acesse as informações de forma padronizada, para que possam buscar os pedidos e entregar a comida corretamente.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Privada&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A API é usada apenas internamente. Isso oferece às empresas um maior controle. &lt;a href="https://www.redhat.com/pt-br/topics/api/what-are-application-programming-interfaces"&gt;Red hat&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Também conhecida como API Interna, estas são projetadas para comunicação interna entre diferentes módulos de um mesmo sistema ou de uma organização. Essas APIs permitem dividir o código, promovendo a reutilização de código, simplificação e melhorar o gerenciamento sobre os serviços internos da organização.&lt;/p&gt;

&lt;p&gt;No contexto do restaurante, vamos pensar agora que possui diversos departamentos diferentes, sendo estes a própria cozinha, o caixa e o atendimento, por exemplo. Estes departamentos precisam se comunicar de maneira organizada para que não gere ruídos e garanta que os pedidos sejam atendidos corretamente.&lt;/p&gt;

&lt;p&gt;Desta maneira, usa-se uma API Interna para a comunicação. Após o cliente fazer um pedido, o atendendo alimenta o sistema de pedidos (API interna) onde o cozinheiro consegue saber o momento que tem que começar a preparar o prato solicitado pelo cliente.&lt;/p&gt;

&lt;p&gt;Essa troca de informação dentro de um restaurante, sem envolver o cliente, representa a ação de uma API interna.&lt;/p&gt;

&lt;h2&gt;
  
  
  Web Services vs. Web APIs: Definindo o Contexto
&lt;/h2&gt;

&lt;p&gt;Existe uma confusão sobre estes dois termos, tanto &lt;em&gt;Web API&lt;/em&gt; quanto &lt;em&gt;Web Services&lt;/em&gt;, pois frequentemente lemos ou escutamos as pessoas usando estes termos de forma intercambiável, mas existe nuances entre esses dois conceitos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Web API&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma Web API é considerada uma API externa. Sendo esta um tipo específico de API que utilizada os protocolos da web para fornecer serviços/recursos pela internet.&lt;/p&gt;

&lt;p&gt;As Web APIs são acessíveis de forma remota por meio da internet, ou seja, permite que aplicativos, sistemas e serviços se comuniquem e interajam com elas.&lt;/p&gt;

&lt;p&gt;Desta maneira, muitas vezes, as Web APIs tendem a ter seu foco em fornecer acesso a dados específicos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Web Service&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Web Service é um sistema de software que suporta interações interoperáveis de máquina para máquina por meio de uma rede. Ele possui uma interface descrita em um formato processável por máquina (especificamente, Linguagem de Definição de Serviço da Web, ou WSDL).&lt;/p&gt;

&lt;p&gt;Web Services desempenham uma tarefa específica ou um conjunto de tarefas. Um Web Service é descrito usando uma notação XML padrão e formal, chamada descrição de serviço, que fornece todos os detalhes necessários para interagir com o serviço, incluindo formatos de mensagem (que detalham as operações), protocolos de transporte e localização.&lt;a href="https://www.ibm.com/docs/en/cics-ts/5.1?topic=services-what-is-web-service"&gt;IBM&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;É um termo que &lt;em&gt;inclui&lt;/em&gt; as Web APIs, mas também abrange outros protocolos de comunicação, incluindo aqueles que não são baseados em HTTP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resumindo
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;Web API&lt;/th&gt;
&lt;th&gt;Web Service&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Protocolo Comum&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Geralmente usa HTTP/HTTPS&lt;/td&gt;
&lt;td&gt;Pode usar vários protocolos, incluindo SOAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Formatos de Dados&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JSON ou XML&lt;/td&gt;
&lt;td&gt;Pode usar JSON, XML, SOAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Estilo de Arquitetura&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pode ser RESTful ou não&lt;/td&gt;
&lt;td&gt;Pode ser SOAP-based ou RESTful&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Acessibilidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Acessível via URLs&lt;/td&gt;
&lt;td&gt;Acessível via URLs (em REST) ou ponto de extremidade (em SOAP)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Segurança&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Autenticação por tokens, chaves de API&lt;/td&gt;
&lt;td&gt;Pode usar WS-Security (SOAP) ou outras abordagens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Todos os Web Services são Web APIs, mas nem todos as Web APIs são Web Services;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SOAP vs. HTTP: Escolhendo a Abordagem
&lt;/h2&gt;

&lt;p&gt;A escolha &lt;strong&gt;sempre&lt;/strong&gt; depende de fatores como: necessidades específicas do projeto, do levantamento de requisitos, da preferência da equipe, por exemplo.&lt;/p&gt;

&lt;p&gt;Vamos falar sobre os pontos relevantes na consideração de cada uma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SOAP&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;O SOAP é um protocolo elaborado para facilitar a chamada remota de funções via Internet, permitindo que dois programas se comuniquem de uma maneira tecnicamente muito semelhante à invocação de páginas Web.  &lt;a href="http://www.linhadecodigo.com.br/artigo/38/soap-e-webservices.aspx"&gt;linhadecodigo&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Segurança e confiabilidade;&lt;/li&gt;
&lt;li&gt;Integração entre sistemas heterogêneos;&lt;/li&gt;
&lt;li&gt;Contratos formais.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Em uma situação hipotética onde a segurança e a confiabilidade do seu serviço é primordial, por exemplo, lidando com informações sensíveis, como as financeiras, você pode optar pelo uso do SOAP para garantir robustez em segurança, como criptografia e autenticação. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTTP&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Protocolo amplamente utilizada para a troca de dados na internet. Muitas Web APIs são construídas sobre o HTTP, usando seus métodos como: GET, POST, PUT e DELETE, e com os dados em formato JSON.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Simplicidade;&lt;/li&gt;
&lt;li&gt;Performance;&lt;/li&gt;
&lt;li&gt;Comunicação pela Internet.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Dado uma segunda situação hipotética onde existe uma urgência na agilidade sobre a implementação e o foco está na simplicidade e no desempenho, o uso de HTTP usando RESTful pode ser o mais aconselhável. É um cenário onde a troca de dados é praticamente entre um aplicativo &lt;em&gt;mobile&lt;/em&gt; e um servidor na internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Muito dos assuntos aqui foram tratados de forma simples e generalista, a fim de tentar sintetizar todas essas terminologias e conceitos numa perspectiva de desenvolvimento. &lt;/p&gt;

&lt;p&gt;Buscar entender como todos esses termos estão situados no mesmo conjunto de ideias é importante para sua melhor compreensão nos seus estudos.&lt;/p&gt;

&lt;p&gt;Fico por aqui e deixo minhas últimas publicações para caso queira acompanhar outros assuntos que estou estudando e compartilhando no momento.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bootcamp da Atlântico Avanti&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/matt1cs/entendendo-a-relacao-entre-sql-dml-e-ddl-fundamentos-de-banco-de-dados-23bi"&gt;Entendendo a Relação entre SQL, DML e DDL: Fundamentos de Banco de Dados&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Tecnólogo em ADS: Estrutura de Dados&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/matt1cs/explorando-as-fundamentais-estruturas-de-dados-recursao-2p6g"&gt;Explorando as Fundamentais Estruturas de Dados: Recursão&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/matt1cs/explorando-as-fundamentais-estruturas-de-dados-algoritmos-de-ordenacao-50ml"&gt;Explorando as Fundamentais Estruturas de Dados: Algoritmos de Ordenação&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre o Autor
&lt;/h2&gt;

&lt;p&gt;Meu gosto pela escrita se entrelaça com a vontade de compartilhar o que estou aprendendo ao longo desse percurso. Acredito que cada artigo é uma oportunidade não apenas de solidificar meu conhecimento, mas também de oferecer insights valiosos a outros aprendizes.&lt;/p&gt;

&lt;p&gt;Minha esperança é que essas contribuições não apenas auxiliem quem busca conhecimento, mas também me impulsionem na busca por novas oportunidades e desafios na indústria de desenvolvimento de software.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Explorando as Fundamentais Estruturas de Dados: Recursão</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Wed, 09 Aug 2023 11:18:59 +0000</pubDate>
      <link>https://dev.to/mpfdev/explorando-as-fundamentais-estruturas-de-dados-recursao-2p6g</link>
      <guid>https://dev.to/mpfdev/explorando-as-fundamentais-estruturas-de-dados-recursao-2p6g</guid>
      <description>&lt;p&gt;&lt;em&gt;Introdução&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Vamos retomar nossa jornada de explorar os fundamentos de estrutura de dados e algoritmos. Na última publicação, mencionei sobre o uso da técnica recursiva para o uso de um método de ordenação, e agora vamos nos aprofundar sobre recursão.&lt;/p&gt;

&lt;p&gt;Essa série de publicações seguem meus estudos nesta disciplina de Estrutura de Dados do tecnólogo que estou fazendo, para acompanhar o que foi tratado até aqui, seguem os links das publicações anteriores.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/matt1cs/explorando-as-fundamentais-estruturas-de-dados-uma-introducao-4n84"&gt;Explorando as Fundamentais Estruturas de Dados: Uma Introdução&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/matt1cs/explorando-as-fundamentais-estruturas-de-dados-algoritmos-de-ordenacao-50ml"&gt;Explorando as Fundamentais Estruturas de Dados: Algoritmos de Ordenação&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos começar!&lt;/p&gt;

&lt;h2&gt;
  
  
  Entendendo a Recursão
&lt;/h2&gt;

&lt;p&gt;Começando pelo começo, começar a usar recursão é difícil.&lt;/p&gt;

&lt;p&gt;Uma forma de pensar sobre recursão é como se fosse uma função que chama ela mesmo até resolver um problema proposto. Isto envolver a utilização de um &lt;strong&gt;Caso BASE&lt;/strong&gt;. E o caso base é o momento onde o problema é resolvido.&lt;/p&gt;

&lt;p&gt;Explicando tudo isto, vamos para um dos exemplos mais comum a respeito de recursão, calcular o somatório de números inteiros positivos no intervalo de [1, n].&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kb8luvHB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xpei7e3x9d4ibkxtyhi3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kb8luvHB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xpei7e3x9d4ibkxtyhi3.png" alt="Image description" width="740" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui percebemos que uma função recursiva deve seguir duas regras fundamentais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ter um Caso BASE (condição de parada) - se não a função realizará computação infinita&lt;/li&gt;
&lt;li&gt;Ter o Passo Recursivo (chamada recursiva) - onde a função chama a si mesmo, e sempre buscando resolver um problema quebrando-o em instâncias menores do que a chamada anterior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos começar a destrinchar essa recursão e entender essas etapas fundamentais.&lt;/p&gt;

&lt;h2&gt;
  
  
  A mecânica na técnica recursiva
&lt;/h2&gt;

&lt;p&gt;Para fins de esclarecimento, o símbolo Σ (sigma) representa o somatório. Este símbolo, neste exemplo, significa que estamos fazendo repetidas somas dentro de um intervalo estabelecido, aqui, significa que ele vai de 1 até N.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pseudocódigo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;função Soma(N)
    se N = 1 então
        retorne 1
    senão
        retorne N + Soma(N-1)
    fim se
fim função
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Que pode equivaler a esta ideia&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A-ApiJ2b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2xcxhglpg502057s56kh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A-ApiJ2b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2xcxhglpg502057s56kh.png" alt="Image description" width="506" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então numa situação onde façamos o somatório até o número 5, seria o equivalente a dizer que&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X3PF9CY9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ykr5uz4q4tltc046hu38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X3PF9CY9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ykr5uz4q4tltc046hu38.png" alt="Image description" width="500" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Java
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SomatorioRecursivo&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;calcularSomatorio&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;calcularSomatorio&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="no"&gt;N&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;calcularSomatorio&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;N&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"O somatório de 1 até "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="no"&gt;N&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" é: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Typescript
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calcularSomatorio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;calcularSomatorio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;N&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calcularSomatorio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;N&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`O somatório de 1 até &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;N&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; é: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Praticando com Recursão
&lt;/h2&gt;

&lt;p&gt;De posse deste conhecimento teórico até aqui, vamos praticar! Usualmente, costumo praticar o uso de técnicas e a melhora da minha capacidade de solucionar problemas com o site &lt;a href="//www.codewars.com"&gt;Codewars&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  6 kyu - Mutual Recursion
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Descrição do Problema&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A Mutual Recursion nos permite aproveitar a diversão da recursão regular (onde uma função chama a si mesma até atingir uma condição de término) e aplicá-la a múltiplas funções que se chamam reciprocamente!&lt;/p&gt;

&lt;p&gt;Vamos usar as sequências Feminina e Masculina de Hofstadter para demonstrar essa técnica. Você precisará criar duas funções, F e M, de forma que as seguintes equações sejam verdadeiras:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;F(0) = 1
M(0) = 0
F(n) = n - M(F(n - 1))
M(n) = n - F(M(n - 1))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Solução&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Aqui é bem simples, o problema nos dá o &lt;code&gt;caso base&lt;/code&gt; e o &lt;code&gt;passo recursivo&lt;/code&gt; então é só traduzir isto em código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;M&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;M&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;M&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6 kyu - The Book of Mormon
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Descrição&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Os mórmons estão tentando encontrar novos seguidores e, para fazer isso, embarcam em missões.&lt;/p&gt;

&lt;p&gt;Cada vez que eles vão em uma missão, cada mórmon converte um número fixo de pessoas (&lt;code&gt;reach&lt;/code&gt;) em seguidores. Isso continua e todos os mórmons recém-convertidos, bem como todos os mórmons originais, embarcam em outra missão e convertem o mesmo número fixo de pessoas cada um. O processo continua até que eles alcancem um número predefinido de seguidores (&lt;code&gt;target&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Os mórmons convertidos são únicos, de modo que não há duplicação entre eles.&lt;/p&gt;

&lt;p&gt;Complete a função que calcula quantas missões os mórmons precisam embarcar para alcançar sua meta. Embora cada solução correta passe, para mais diversão, tente criar uma função recursiva.&lt;/p&gt;

&lt;p&gt;Todas as entradas são inteiros positivos válidos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;starting_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reach&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;  &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt;  &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="c1"&gt;# No missions needed because the number of followers already exceeds target
&lt;/span&gt;
&lt;span class="n"&gt;starting_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reach&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;  &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt;  &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="c1"&gt;# Every mormon converts 2 people, so after 1 mission there are 40 + 80 = 120 mormons
&lt;/span&gt;
&lt;span class="n"&gt;starting_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reach&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7_000_000_000&lt;/span&gt;  &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt;  &lt;span class="mi"&gt;12&lt;/span&gt;
&lt;span class="c1"&gt;# Mormons dominate the world after only 12 missions!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Solução&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Diferentemente do primeiro desafio, aqui o problema nos apresenta situações que a partir da nossa interpretação devemos tirar nossas próprias conclusões para encontrar a solução.&lt;/p&gt;

&lt;p&gt;A primeira coisa que conseguimos obter é o &lt;code&gt;caso base&lt;/code&gt; e o caso mais importante, pois ele será a condição de parada para que nossa recursão não seja um loop infinito.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;starting_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reach&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;  &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt;  &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="c1"&gt;# No missions needed because the number of followers already exceeds target
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então quando &lt;code&gt;startingNumber&lt;/code&gt; for maior que o &lt;code&gt;target&lt;/code&gt; ele vai retornar 0.&lt;/p&gt;

&lt;p&gt;Agora vamos ver os &lt;code&gt;passos recursivos&lt;/code&gt; e como devemos chamar a função repetidamente para retornar o número de ciclos que a condição seja atingida.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;starting_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reach&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;  &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt;  &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="c1"&gt;# Every mormon converts 2 people, so after 1 mission there are 40 + 80 = 120 mormons
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele faz uma verificação somando o número inicial (&lt;code&gt;startingNumber&lt;/code&gt;) com o produto do número inicial vezes o alcance (&lt;code&gt;reach&lt;/code&gt;), o que eu quero dizer é: 40 + (40 * 2).&lt;/p&gt;

&lt;p&gt;Como no próximo ciclo, ele será igual ao &lt;code&gt;target&lt;/code&gt;, ele retorna 1. E importante, que agora nós obtemos mais uma informação do &lt;strong&gt;Caso BASE&lt;/strong&gt;, é que não basta ser só maior, tem que ser maior ou igual.&lt;/p&gt;

&lt;p&gt;Então para cada ciclo de conversão &lt;strong&gt;soma-se 1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vamos a solução que eu encontrei para este problema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Mormons&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reach&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingNumber&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;Mormons&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingNumber&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;startingNumber&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;reach&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reach&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Considerações Importantes sobre Recursão
&lt;/h2&gt;

&lt;p&gt;É importante considerar sempre com muito cuidado a condição de parada, ou seja, o processo que as chamadas deverão ser interrompidas.&lt;/p&gt;

&lt;p&gt;A recursão não obrigatoriamente traz economia de memória, afinal, os valores que são mantidos em pilhas para cada etapa em que são processados (leia sobre stack overflow).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Stack Overflow: É um efeito adverso de uma recursão mal elaborada. A função recursiva chama a si mesmo repetidamente sem encontrar um ponto de parada até que não haja mais espaço disponível em memória.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nem sempre será mais rápido, justamente por conta do motivo acima citado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Chegamos ao fim de mais um capítulo nesta série sobre Estruturas de Dados e Algoritmos, e encontramos nessa técnica uma maneira de solucionar problemas de forma elegante e modular.&lt;/p&gt;

&lt;p&gt;Em contrapartida, mais importante do que ser uma forma elegante é a sua importância quando formos estudar estruturas de dados como as árvores, onde entender recursão é essencial para esta etapa do aprendizado e do conhecimento.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre o Autor
&lt;/h2&gt;

&lt;p&gt;Meu gosto pela escrita se entrelaça com a vontade de compartilhar o que estou aprendendo ao longo desse percurso. Acredito que cada artigo é uma oportunidade não apenas de solidificar meu conhecimento, mas também de oferecer insights valiosos a outros aprendizes. &lt;/p&gt;

&lt;p&gt;Minha esperança é que essas contribuições não apenas auxiliem quem busca conhecimento, mas também me impulsionem na busca por novas oportunidades e desafios na indústria de desenvolvimento de software.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Entendendo a Relação entre SQL, DML e DDL: Fundamentos de Banco de Dados</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Mon, 07 Aug 2023 19:34:31 +0000</pubDate>
      <link>https://dev.to/mpfdev/entendendo-a-relacao-entre-sql-dml-e-ddl-fundamentos-de-banco-de-dados-23bi</link>
      <guid>https://dev.to/mpfdev/entendendo-a-relacao-entre-sql-dml-e-ddl-fundamentos-de-banco-de-dados-23bi</guid>
      <description>&lt;p&gt;&lt;em&gt;Introdução:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Neste artigo, irei explorar sobre a linguagem SQL para a manipulação e o gerenciamento de dados em bancos de dados relacionais. É importante destacar que o SQL os quatro tipos de comandos: Criar, Ler, Atualizar e Deletar.&lt;/p&gt;

&lt;p&gt;Estas quatro operações são carinhosamente chamadas de CRUD. Por isso, vamos discutir e compreender essa relação entre o SQL, DML e DDL.&lt;/p&gt;

&lt;p&gt;Este artigo é parte de uma síntese de notas soltas entre a disciplina de banco de dados do tecnólogo que faço, e do bootcamp que estou fazendo no momento.&lt;/p&gt;

&lt;p&gt;Então, vamos começar!&lt;/p&gt;

&lt;h2&gt;
  
  
  Abordando a linguagem SQL
&lt;/h2&gt;

&lt;p&gt;O SQL é uma linguagem com o propósito de permitir que pessoas técnicas e não técnicas façam requisições, manipulem e transformem os dados em um banco de dados relacional.&lt;/p&gt;

&lt;p&gt;Por ser uma linguagem simples, os banco de dados SQL são seguros e fornecem suporte a escalabilidade para muitos serviços na web quanto em aplicações mobile.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Importância da DML na Manipulação de Dados
&lt;/h2&gt;

&lt;p&gt;Em português, a DML pode ter o significado de "Linguagem de Manipulação de Dados", ou seja, a DML é essencial por permitir ao usuário realizar operações cruciais em um banco de dados relacional.&lt;/p&gt;

&lt;p&gt;Seguem os comandos DML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*Permite que os usuários busquem por informações gerais ou específicas*/&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*Permite que se adicione novos registros (linhas) a uma tabela*/&lt;/span&gt;
&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*Permite modificar valores de colunas existentes*/&lt;/span&gt;
&lt;span class="k"&gt;DELETE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*Permite a remoção de registros de uma tabela*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Desta maneira, a DML permite que aqueles que irão manipular o banco de dados realizem as operações de forma eficiente e segura.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explorando a DDL e sua Relação com a Estrutura do Banco de Dados
&lt;/h2&gt;

&lt;p&gt;Em português, a DDL se traduz como a "Linguagem de Definição de Dados". Enquanto na anterior falamos sobre a manipulação em um banco de dados relacionais, agora nós passamos a falar sobre a definição da estrutura do banco de dados pretendido, ou seja, gerenciamento dos objetos que o compõe.&lt;/p&gt;

&lt;p&gt;Seguem os comandos DDL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*Criar novos objetos no banco de dados, tabelas, índices, views*/&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*Modificcar a estrutura de objetos já existentes, add ou remover colunas, tipo de dado*/&lt;/span&gt;
&lt;span class="k"&gt;DROP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*Excluir objetos do banco de dados*/&lt;/span&gt;
&lt;span class="k"&gt;TRUNCATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/*Remover todos os dados de uma tabela, mantendo sua estrutura intacta*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A DDL é crucial pelo seu aspecto administrativo onde busca criar e modificar o banco de dados com o propósito de atender a necessidade do sistema e dos usuários. Sendo assim, importante para:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Criar e modificar tabelas e objetos;&lt;/li&gt;
&lt;li&gt;Garantir a integridade dos dados;&lt;/li&gt;
&lt;li&gt;Otimização do desempenho;&lt;/li&gt;
&lt;li&gt;Segurança;&lt;/li&gt;
&lt;li&gt;Manutenção e escalabilidade.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Praticando
&lt;/h2&gt;

&lt;p&gt;A maneira de praticar conceitos teóricos aprendidos é sempre fundamental para concretizar os estudos, mas diferentemente de praticar com desafios de códigos, praticar SQL depende muito mais de já encontrarmos banco de dados prontos e então experimentar técnicas nele para extrair informações.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/matt1cs/cs50-semana-7-lab-musicas-48m7"&gt;CS50: Semana 7 - SQL&lt;/a&gt; 
Deixarei aqui minhas soluções da semana 7 do CS50 que trata diretamente de manipulação de banco de dados com SQL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neste post encontra-se as respostas que investiguei para os desafios do laboratório, recomendo sempre o CS50 como um excelente estudo de base para diversos conceitos introdutórios e fundamentais para desenvolvimento de software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Tanto a DML quanto a DDL são as duas partes principais da linguagem SQL, onde juntas oferecem uma abordagem completa para criar, manipular e gerenciar bancos de dados relacionais.&lt;/p&gt;

&lt;p&gt;Fico por aqui, e se estiver interessado em saber mais sobre estrutura de dados e algoritmos, acompanhe minha série em desenvolvimento sobre esse assunto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/matt1cs/explorando-as-fundamentais-estruturas-de-dados-uma-introducao-4n84"&gt;Explorando as Fundamentais Estruturas de Dados: Uma Introdução&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/matt1cs/explorando-as-fundamentais-estruturas-de-dados-algoritmos-de-ordenacao-50ml"&gt;Explorando as Fundamentais Estruturas de Dados: Algoritmos de Ordenação&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Até a próxima! &lt;/p&gt;

</description>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Explorando as Fundamentais Estruturas de Dados: Algoritmos de Ordenação</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Sun, 06 Aug 2023 22:04:49 +0000</pubDate>
      <link>https://dev.to/mpfdev/explorando-as-fundamentais-estruturas-de-dados-algoritmos-de-ordenacao-50ml</link>
      <guid>https://dev.to/mpfdev/explorando-as-fundamentais-estruturas-de-dados-algoritmos-de-ordenacao-50ml</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Continuando essa série de publicações sobre estrutura de dados. Na publicação anterior falei que essa série de publicações faz parte das minhas anotações e estudos sobre o assunto dentro da disciplina do tecnólogo que faço. A disciplina é de Estrutura de Dados e vamos continuar aprofundando.&lt;/p&gt;

&lt;p&gt;Neste próximo passo, vamos explorar sobre os algoritmos de ordenação. Vamos começar!&lt;/p&gt;

&lt;h2&gt;
  
  
  A importância da Ordenação
&lt;/h2&gt;

&lt;p&gt;Antes de aprofundar especificamente em ordenação, gostaria de falar sobre o que é esse grupo de algoritmos. Na publicação anterior, comentei que:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Um conjunto de dados é um tipo &lt;em&gt;abstrato de dados&lt;/em&gt;, estabelecendo uma relação, as funções e as operações que podem ser aplicados a estes dados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Desta maneira, os algoritmos de ordenação são ferramentas onde os &lt;strong&gt;métodos&lt;/strong&gt; de ordenação são funções e/ou operações a esse conjunto de dados que possuem técnicas diversas de ordenação para resolver uma mesma tarefa.&lt;/p&gt;

&lt;p&gt;Podemos assumir então que ordenar os dados é uma operação essencial, pois se refere a organização de um conjunto de dados que pode facilitar a busca, a recuperação e a análise desses mesmos dados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explorando diferentes tipos de ordenação
&lt;/h2&gt;

&lt;p&gt;Existem vários tipos de algoritmos de ordenação, cada um com suas próprias características e eficiência.&lt;/p&gt;

&lt;p&gt;Não falarei de todos, falarei dos dois que seguem nessa tabela a seguir:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algoritmo&lt;/th&gt;
&lt;th&gt;Descrição&lt;/th&gt;
&lt;th&gt;Complexidade Big O&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bubble Sort&lt;/td&gt;
&lt;td&gt;Comparação e troca de elementos adjacentes.&lt;/td&gt;
&lt;td&gt;O(n^2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick Sort&lt;/td&gt;
&lt;td&gt;Algoritmo de divisão e conquista com escolha de pivô&lt;/td&gt;
&lt;td&gt;O(n log n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;e particionamento recursivo da lista.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O motivo de não falar de outros como o Merge Sort, por exemplo, é devido ao texto ficar muito longo e quero dar mais o tom do texto que existe tanto quanto a técnica iterativa quanto recursiva.&lt;/p&gt;

&lt;p&gt;Estas anotações não isentam o estudo de outros métodos de ordenação.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bubble Sort
&lt;/h3&gt;

&lt;p&gt;Os elementos vão se deslocando a cada iteração até a posição correta para ordenação da lista. É importante lembrar que como os elementos neste tipo de ordenação são constantemente trocados, &lt;strong&gt;há um alto custo&lt;/strong&gt; com essa troca de elementos.&lt;/p&gt;

&lt;p&gt;Um aspecto interessante do Bubble Sort é que sempre é necessário &lt;strong&gt;apenas uma iteração em toda a lista&lt;/strong&gt; para que o maior item de uma lista seja deslocado para o final dela.&lt;/p&gt;

&lt;h4&gt;
  
  
  Pseudocódigo
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Procedimento BubbleSort(lista)
    n &amp;lt;- tamanho da lista
    i, j, aux inteiro

    Para i de 0 até n-1
        trocou &amp;lt;- Falso

        Para j de 0 até n-i-1
            Se lista[j] &amp;gt; lista[j+1] Então
                // Troca os elementos de posição
                aux &amp;lt;- lista[j]
                lista[j] &amp;lt;- lista[j+1]
                lista[j+1] &amp;lt;- aux
                trocou &amp;lt;- Verdadeiro
            Fim Se

        Fim Para

        Se trocou = Falso Então
            // A lista está totalmente ordenada, podemos encerrar o loop
            Parar
        Fim Se

    Fim Para

Fim Procedimento
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Java
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Arrays&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BubbleSort&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="o"&gt;};&lt;/span&gt;
        &lt;span class="n"&gt;bubbleSort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Lista ordenada: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;bubbleSort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="c1"&gt;// Troca os elementos de posição&lt;/span&gt;
                    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
                    &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
                    &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Typescript
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bubbleSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Troca os elementos de posição&lt;/span&gt;
                &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
                &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
                &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nf"&gt;bubbleSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Lista ordenada:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Quick Sort
&lt;/h3&gt;

&lt;p&gt;Este é um algoritmo de ordenação que utiliza a &lt;strong&gt;técnica de recursão&lt;/strong&gt; para resolver problemas de ordenação. A ideia é baseada na ideia de &lt;strong&gt;Dividir e Conquistar&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dividir: Pega-se um problema M e divide-se em subproblemas menores de forma recursiva.&lt;/li&gt;
&lt;li&gt;Conquistar: Une as soluções dos subproblemas para obter a solução do problema maior P.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pseudocódigo
&lt;/h4&gt;

&lt;p&gt;Como visto no pseudocódigo abaixo, para desenvolver este algoritmo vamos precisar de duas funções:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1ª Função é a &lt;strong&gt;Partição&lt;/strong&gt;: É quem vai produzir o pivô que vai deslocar os elementos que são menores para um lado, e maiores para o outro.&lt;/li&gt;
&lt;li&gt;2ª Função é o &lt;strong&gt;Quick Sort&lt;/strong&gt;: É quem vai empregar a &lt;strong&gt;técnica recursiva&lt;/strong&gt; e fazer uso da ideia de Dividir e Conquistar falada acima.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;quicksort(p inteiro, q inteiro, vetor[] inteiro)
    inicio_modulo
        Declarar
            x inteiro;

        se (p &amp;lt; q)
            então
                x &amp;lt;- particao(p, q, vetor);
                quicksort(p, x - 1, vetor);
                quicksort(x + 1, q, vetor);
        fimse;
    fimMódulo;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Java
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Arrays&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;QuickSort&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="o"&gt;};&lt;/span&gt;
        &lt;span class="n"&gt;quickSort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Lista ordenada: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lista&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;quickSort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;idxPivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;quickSort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;idxPivo&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;quickSort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;idxPivo&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;pivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;pivo&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;++;&lt;/span&gt;
                &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
                &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
                &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;++;&lt;/span&gt;
        &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
        &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pivo&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Typescript
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;qs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;low&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;idxPivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nf"&gt;qs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;idxPivo&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;qs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;idxPivo&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;pivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pivo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;qs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nf"&gt;quickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Lista ordenada:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Praticando
&lt;/h2&gt;

&lt;p&gt;Sempre após o estudo teórico de um assunto, a melhor maneira de concretizar o entendimento dos fundamentos é praticando com desafios de código. Retornando ao &lt;a href="//www.codewars.com"&gt;Codewars&lt;/a&gt; vamos buscar solucionar alguns desafios que tenham a ordenação como objetivo a ser alcançado.&lt;/p&gt;

&lt;h3&gt;
  
  
  7 kyu - Sort Numbers
&lt;/h3&gt;

&lt;p&gt;Descrição do problema:&lt;/p&gt;

&lt;p&gt;Complete a solução para que ela ordene a matriz de números passada como parâmetro. Se a função receber uma array vazia ou um valor nulo, ela deve retornar uma array vazia.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;solution([1, 2, 10, 50, 5]); // should return [1, 2, 5, 10, 50]
solution([]); // should return []
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Solução:&lt;/p&gt;

&lt;p&gt;Aqui, optei pelo uso do Bubble Sort, é um algoritmo mais simples de escrever, o custo computacional não é uma questão aqui e serve exatamente para o que eu quero fazer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;//A condição de contorno caso a função receba um array vazio ou nulo&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

  &lt;span class="c1"&gt;//Operação exata do algoritmo de Bubble Sort comentado anteriormente&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//Trocar os elementos de posição&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Chegamos ao final desta segunda publicação desta série sobre Estrutura de Dados e Algoritmos. Lembrando que essa síntese de ideias fazem parte de anotações soltas e pessoais para o estudo da disciplina do tecnólogo, e aqui é uma forma de eu sintetizar essas ideias e poder compartilhar algo que estou aprendendo.&lt;/p&gt;

&lt;p&gt;Se puder, &lt;a href="https://www.linkedin.com/in/eng-matheus-prado/"&gt;vamos nos conectar&lt;/a&gt; no LinkedIn!&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Explorando as Fundamentais Estruturas de Dados: Uma Introdução</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Tue, 01 Aug 2023 20:21:01 +0000</pubDate>
      <link>https://dev.to/mpfdev/explorando-as-fundamentais-estruturas-de-dados-uma-introducao-4n84</link>
      <guid>https://dev.to/mpfdev/explorando-as-fundamentais-estruturas-de-dados-uma-introducao-4n84</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Seja bem-vindo a esta primeira publicação de uma série que pretendo fazer sobre estrutura de dados. Sou um estudante, em transição de carreira, que está estudando esta disciplina no tecnólogo em análise e desenvolvimento de sistemas, e gostaria de compartilhar tudo aquilo que estou aprendendo e estudando mais sobre o assunto. &lt;/p&gt;

&lt;p&gt;Nesta série vamos explorar os blocos fundamentais no que diz respeito ao desenvolvimento de software e solução de problemas. Vamos começar!&lt;/p&gt;

&lt;h3&gt;
  
  
  Definição
&lt;/h3&gt;

&lt;p&gt;Podemos pensar que Estrutura de Dados são conjuntos que armazenam dados de forma eficiente, fornecendo ao usuário operações que o auxiliam a trabalhar com estas estruturas (ordenar, buscar e outros).&lt;/p&gt;

&lt;p&gt;Um conjunto de dados é um tipo &lt;em&gt;abstrato de dados&lt;/em&gt;, estabelecendo uma relação, as funções e as operações que podem ser aplicados a estes dados. Assim, uma &lt;em&gt;estrutura de dados&lt;/em&gt; é uma &lt;strong&gt;implementação&lt;/strong&gt; de um &lt;em&gt;tipo abstrato de dados&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Deste modo, temos alguns tipos de Estrutura de Dados como Vetores, Matrizes, Pilhas, Filas, Árvores, Hashtables e Grafos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Básico
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Complexidade Big O
&lt;/h3&gt;

&lt;p&gt;Big O é uma forma de categorizarmos algoritmos em tempo de execução e consumo de memória com base no tamanho da entrada de dados fornecida. Big O não tenta ser uma medida exata, e sim uma ideia generalizada para compreender a ordem de grandeza do algoritmo.&lt;/p&gt;

&lt;p&gt;E é importante entender isto pois é uma ferramenta que nos ajuda na tomada de decisões sobre qual estrutura de dados será implementada para determinado algoritmo pretendido. Sabendo como o algoritmo vai performar, nos dá uma segurança maior sobre a qualidade do programa que será desenvolvido.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estrutura de Vetores e Matrizes
&lt;/h3&gt;

&lt;p&gt;Essas estruturas de dados são homogêneas pois todos os elementos tem o &lt;strong&gt;mesmo tipo associado&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Desta maneira, temos os Vetores que é:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variável composta homogênea &lt;strong&gt;unidimensional&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;Formada por uma sequência de valores, todos do mesmo tipo, com o mesmo identificador e alocadas em sequência na memória.&lt;/li&gt;
&lt;li&gt;Uma vez que todos os valores possuem o mesmo identificador, o que distingue um valor do outro é a sua posição nesta sequência (estrutura), aqui chamaremos esta posição de índice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todos os Vetores são Matrizes, a diferença é que a Matriz possui mais de uma dimensão, ou seja, Matriz é:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variável composta homogênea &lt;strong&gt;multidimensional&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;Formada por uma sequência de valores, todos do mesmo tipo, com o mesmo identificador e alocadas em sequência na memória.&lt;/li&gt;
&lt;li&gt;Uma vez que todos os valores possuem o mesmo identificador, o que distingue um valor do outro é a sua posição nesta sequência (estrutura), aqui chamaremos esta posição de índice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pseudocódigo
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Declarando vetor
Declarar
    notas[3] real;

    // Atribuindo em Vetor
    notas[0] &amp;lt;- 9,0;
    notas[1] &amp;lt;- 8,0;
    notas[2] &amp;lt;- 9,5;

// Declarando matriz
Declarar
    notas[2][2] real;

    // Atribuindo em Matriz
    notas[0][0] &amp;lt;- 9,5;
    notas[0][1] &amp;lt;- 9,0;
    notas[1][0] &amp;lt;- 7,0;
    notas[1][1] &amp;lt;- 5.6;

// Mostrando Valores
Algoritmo MostrarVetor
inicio_algoritmo
    Declarar
        vet[25],i inteiro;

    para i de 0 até 24 passo + 1 faça
        escrever("Digite um valor inteiro");
        ler(vet[i]);
        escrever(vet[i]);
    fimpara;
fim_algoritmo

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Java
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.swing.JOptionPane&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SomaDeValores&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;tamanhoVetor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;valores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tamanhoVetor&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;tamanhoVetor&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;entrada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;JOptionPane&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;showInputDialog&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Digite o valor "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;":"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;valores&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entrada&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;valores&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="nc"&gt;JOptionPane&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;showMessageDialog&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"A soma dos valores é: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Typescript
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Em Typescript não há um tipo específico chamado "vetor", mas os vetores são utilizados por meio de &lt;em&gt;arrays&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Assim, pode-se trabalhar com arrays para representar estruturas de dados &lt;em&gt;semelhantes&lt;/em&gt; aos vetores.&lt;/li&gt;
&lt;li&gt;Arrays em Typescript é uma coleção ordenada de elementos do mesmo tipo (ou de tipos compatíveis) e é definido pela sintaxe dos colchetes &lt;code&gt;[]&lt;/code&gt; ou &lt;code&gt;Array&amp;lt;&amp;gt; = []&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;somarValores&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Array com 10 valores&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// Chama a função para somar os valores da array&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;somarValores&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`A soma dos valores é: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Praticando
&lt;/h2&gt;

&lt;p&gt;Gosto de praticar o que foi estudado resolvendo problemas na plataforma &lt;a href="https://www.codewars.com/"&gt;Codewars&lt;/a&gt;. Desta forma consigo aplicar conceitos teóricos para a resolução de problemas e desafios. Vamos praticar!&lt;/p&gt;

&lt;h3&gt;
  
  
  8 kyu - Add Length
&lt;/h3&gt;

&lt;p&gt;Descrição do problema:&lt;/p&gt;

&lt;p&gt;E se precisarmos que o comprimento das palavras, separadas por um espaço, seja adicionado ao final da própria palavra e que seja retornado como um array?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo(Entrada --&amp;gt; Saída)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"apple ban" --&amp;gt; ["apple 5", "ban 3"]
"you will win" --&amp;gt; ["you 3", "will 4", "win 3"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sua tarefa é escrever uma função que receba uma String e retorne um Array com o comprimento de cada palavra adicionado a cada elemento.&lt;/p&gt;

&lt;p&gt;Solução:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;addLength&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;//Transformando a string em uma array&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;strArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;//Criando uma array vazia de Strings para a resposta&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;strReturnArray&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

  &lt;span class="c1"&gt;//Loop para iterar sobre todos os elementos desta array de strings&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;strArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//Template: "String StringLength"&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;strArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;strArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;//Utilizando uma operação de Arrays para adicionar essa string na Array.&lt;/span&gt;
    &lt;span class="nx"&gt;strReturnArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;strReturnArray&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Chegamos ao final desta publicação sobre Estrutura de Dados. Este será a primeira publicação de uma série que quero fazer utilizando minhas anotações de estudo, e para que possa compartilhar aquilo que estou aprendendo e como estudo.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>CS50: Semana 7 | Lab: Músicas</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Wed, 14 Jun 2023 13:39:24 +0000</pubDate>
      <link>https://dev.to/mpfdev/cs50-semana-7-lab-musicas-48m7</link>
      <guid>https://dev.to/mpfdev/cs50-semana-7-lab-musicas-48m7</guid>
      <description>&lt;p&gt;Retornando com o laboratório de SQL do CS50.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semana 7: SQL
&lt;/h2&gt;

&lt;p&gt;Um dos motivos que eu considero o CS50 um curso bem completo, principalmente para quem está começando é por conta desta semana.&lt;/p&gt;

&lt;p&gt;Se você estiver procurando formas de estudar SQL, provavelmente vai encontrar pela internet diversos locais oferecendo caminhos turvos demais pra algo que poderia ser de forma mais simples e é exatamente isso que essa semana faz. Te dá algo simples, mas poderoso e a partir daí, só tende a crescer conforme a prática.&lt;/p&gt;

&lt;h2&gt;
  
  
  Laboratório: Songs
&lt;/h2&gt;

&lt;p&gt;É uma atividade onde você vai praticar o uso do banco de dados SQLite e a partir do conhecimento adquirido na aula ira escrever queries SQL para responder diferentes perguntas pedindo para filtrar e selecionar diferentes tipos de dados em uma ou mais tabelas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resolução
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.Escreva uma query SQL para retornar uma lista com todas as músicas presentes no banco de dados.
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.Escreva uma query SQL para retornar uma lista com as músicas em ordem de tempo.
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;tempo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.Escreva uma query SQL para retornar uma lista com o top 5 em termos de duração, em ordem decrescente.
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;tempo&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.Escreva uma query SQL que retorne uma lista que tenha os termos "danceability", "energy", e "valence" maior que 0.75
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;danceability&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;energy&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;valence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.Escreva uma query SQL que retorne a média de energia de todas as músicas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;energy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.Escreva uma query SQL que retorne a lista com todas as músicas que são do Post Malone
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;artists&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;artists_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;artists&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;artists&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Post Malone'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.Escreva uma query SQL que retorne a média de energia das músicas que são do Drake.
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;songs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;energy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;artists&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;artist_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;artist&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;artist&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Drake'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.Escreva uma query SQL que retorne as músicas que incluem participações de outros artistas.
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;songs&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'%feat%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Esse laboratório é bem simples e muito divertido de se fazer, é quase um trabalho de investigação e obter o resultado pretendido traz uma satisfação enorme de entender como algo tão simples também é tão poderoso.&lt;/p&gt;

&lt;p&gt;Se estiver com dúvidas, só deixar seu comentário aí embaixo.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>sql</category>
    </item>
    <item>
      <title>CS50 : Semana 6 | Lab: Copa do Mundo</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Fri, 05 May 2023 19:29:20 +0000</pubDate>
      <link>https://dev.to/mpfdev/cs50-semana-6-lab-copa-do-mundo-147b</link>
      <guid>https://dev.to/mpfdev/cs50-semana-6-lab-copa-do-mundo-147b</guid>
      <description>&lt;p&gt;Retornando após uma pausa na escrita, a última vez que escrevi sobre o CS50 foi para o desáfio de pluralidade da Semana 3.&lt;/p&gt;

&lt;p&gt;Eu vi que neste ano, o curso adicionou uns laboratórios muito interessantes para se fazer, e vou buscar realizar eles e trazer para cá.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semana 6: Python
&lt;/h2&gt;

&lt;p&gt;A semana 6 é bem interessante, o curso introduz a &lt;strong&gt;linguagem dinâmica&lt;/strong&gt; &lt;em&gt;Python&lt;/em&gt; e refaz uma releitura de todo o curso, só que agora, nesta nova linguagem.&lt;/p&gt;

&lt;p&gt;Trata as dificuldades antes enfrentadas na &lt;strong&gt;linguagem C&lt;/strong&gt; e escancara as facilidades que uma linguagem como Python oferece, mas é claro &lt;strong&gt;apresenta o trade-off&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ao final, apresentam-se duas modalidades de atividades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lab: Uma atividade que, em tese, é esperado que se faça junto com um ou dois amigos. &lt;strong&gt;Vamos tratar deste laboratório nesta postagem&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Problem Sets: Série de atividades com dois níveis de dificuldades. Nesta semana em específico, é refazer os mesmos desafios feitos em C, só que agora em Python.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Como eu já falei destes exercícios em C, no momento não planejo traze-los aqui em Python, mas se tiver alguma dúvida, é só falar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Laboratório: Copa do Mundo
&lt;/h2&gt;

&lt;p&gt;Eu achei essa atividade muito legal, é para rodar simulações da Copa do Mundo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Existem duas planilhas &lt;code&gt;.csv&lt;/code&gt; com duas colunas (seleções, ratings).&lt;/li&gt;
&lt;li&gt;Fará a simulação usando conceitos de &lt;code&gt;funções&lt;/code&gt;, &lt;code&gt;leitura de arquivos&lt;/code&gt;, manipulação de &lt;code&gt;listas&lt;/code&gt; e &lt;code&gt;dicionários&lt;/code&gt;, e todos os outros blocos fundamentais de programação&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O resultado esperado é um &lt;strong&gt;output&lt;/strong&gt; como este informando a probabilidade da equipe ser campeã.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python tournament.py 2018m.csv
Belgium: 20.9% chance of winning
Brazil: 20.3% chance of winning
Portugal: 14.5% chance of winning
Spain: 13.6% chance of winning
Switzerland: 10.5% chance of winning
Argentina: 6.5% chance of winning
England: 3.7% chance of winning
France: 3.3% chance of winning
Denmark: 2.2% chance of winning
Croatia: 2.0% chance of winning
Colombia: 1.8% chance of winning
Sweden: 0.5% chance of winning
Uruguay: 0.1% chance of winning
Mexico: 0.1% chance of winning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Detalhes da Implementação
&lt;/h2&gt;

&lt;p&gt;Seguindo exatamente as etapas de implementação oferecida pelo &lt;a href="https://cs50.harvard.edu/x/2023/labs/6/"&gt;site do cs50&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PRIMEIRA ETAPA&lt;/strong&gt;. Primeiro, na &lt;strong&gt;main&lt;/strong&gt;, leia as informações sobre as seleções no &lt;strong&gt;arquivo &lt;code&gt;csv&lt;/code&gt;&lt;/strong&gt; para a memória do seu programa (&lt;em&gt;armazenar em uma variável&lt;/em&gt;) e adicione cada time a sua &lt;strong&gt;lista&lt;/strong&gt; times.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# Ensure correct usage
&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Usage: python tournament.py FILENAME&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;teams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# TODO: Read teams into memory from file
&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# TODO: Simulate N tournaments and keep track of win counts
&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# Print each team's chances of winning, according to simulation
&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;team&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;team&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;team&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;team&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;team&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% chance of winning&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Podemos notar que é esperado que se passe na &lt;strong&gt;linha de comando&lt;/strong&gt; dois argumento, sendo um deles o &lt;strong&gt;arquivo &lt;code&gt;.csv&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Será &lt;strong&gt;lido&lt;/strong&gt; esse arquivo, no &lt;strong&gt;modo leitura&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Para cada linha, vamos criar um par &lt;strong&gt;key:value&lt;/strong&gt; onde teremos uma seleção e seu respectivo &lt;em&gt;rating&lt;/em&gt; (nota)&lt;/li&gt;
&lt;li&gt;Para cada par criado, vamos &lt;strong&gt;adicionar&lt;/strong&gt; na &lt;strong&gt;lista &lt;code&gt;teams&lt;/code&gt;&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;teams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# TODO: Read teams into memory from file
&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DictReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;team&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rating&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rating&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;teams&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;team&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;#append each team in csv in teams list
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;SEGUNDA ETAPA&lt;/strong&gt;. Em seguida, &lt;strong&gt;implementar a função &lt;code&gt;simulate_tournament&lt;/code&gt;&lt;/strong&gt;. Essa função vai &lt;strong&gt;receber como parâmetro&lt;/strong&gt; a lista com as equipes e &lt;strong&gt;simulará rodadas&lt;/strong&gt; até que &lt;strong&gt;sobre apenas uma equipe&lt;/strong&gt;. Essa função &lt;strong&gt;deve retornar o nome desta equipe&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;simulate_tournament&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;teams&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Simulate a tournament. Return name of winning team.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# TODO
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Já &lt;strong&gt;existe uma função &lt;code&gt;simulate_round(teams)&lt;/code&gt;&lt;/strong&gt; que simula as rodadas.&lt;/li&gt;
&lt;li&gt;A minha lógica diz que, simular rodadas até que sobre apenas uma equipe, ou seja, até que o &lt;strong&gt;tamanho&lt;/strong&gt; desta lista seja de &lt;strong&gt;apenas uma equipe&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;simulate_tournament&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;teams&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Simulate a tournament. Return name of winning team.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# TODO
&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;teams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;teams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;simulate_round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;teams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;teams&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;TERCEIRA ETAPA&lt;/strong&gt;. Retorne a &lt;strong&gt;função main&lt;/strong&gt;, rode a &lt;strong&gt;&lt;code&gt;simulate_tournament&lt;/code&gt;&lt;/strong&gt; N vezes, e mantenha um registro de &lt;strong&gt;quantas vezes&lt;/strong&gt; cada equipe &lt;strong&gt;ganhou&lt;/strong&gt; dentro de um &lt;strong&gt;&lt;code&gt;dicionário&lt;/code&gt; chamado counts&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# TODO: Simulate N tournaments and keep track of win counts
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Será &lt;strong&gt;realizado &lt;code&gt;loops&lt;/code&gt;&lt;/strong&gt; N vezes &lt;strong&gt;chamando a função &lt;code&gt;simulate_tournament&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;função &lt;code&gt;simulate_tournament&lt;/code&gt;&lt;/strong&gt; retorna uma lista neste formato:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="err"&gt;'team':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Brazil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'rating':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1384&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Usando uma conotação para extrair apenas o &lt;strong&gt;valor&lt;/strong&gt; da chave &lt;code&gt;team&lt;/code&gt;, &lt;strong&gt;verificamos&lt;/strong&gt; se o &lt;strong&gt;&lt;code&gt;dicionário&lt;/code&gt; counts&lt;/strong&gt; já contêm esta equipe.&lt;/li&gt;
&lt;li&gt;Se existir, soma-se 1 (um). Se não, adiciona-se esta equipe ao dicionário de contagens.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;# TODO: Simulate N tournaments and keep track of win counts
&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;winner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;simulate_tournament&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;teams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;winner&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;winner&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;winner&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;winner&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim está terminado o desafio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Este exercicio de laboratório foi muito divertido de se fazer, e pelas possibilidades de poder ensaiar confrontos para outras modalidades e competições que você queira utilizar.&lt;/p&gt;

&lt;p&gt;Considero este laboratório muito bom para aprender e praticar os conceitos fundamentais da &lt;em&gt;linguagem python&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Se estiver com dúvidas, ou caso tenha gostado.&lt;br&gt;
Deixe seu comentário aí embaixo, e me adicione nas redes.&lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/mpfdev/cs50/tree/main/week6/lab6"&gt;repositório da atividade&lt;/a&gt; | &lt;a href="https://github.com/mpfdev"&gt;mpfdev (pessoal)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>python</category>
      <category>cs50</category>
    </item>
    <item>
      <title>CS50 : S3 | Pluralidade</title>
      <dc:creator>Matheus 🇧🇷</dc:creator>
      <pubDate>Thu, 01 Sep 2022 23:54:47 +0000</pubDate>
      <link>https://dev.to/mpfdev/cs50-s3-pluralidade-1k44</link>
      <guid>https://dev.to/mpfdev/cs50-s3-pluralidade-1k44</guid>
      <description>&lt;h1&gt;
  
  
  Plurality
&lt;/h1&gt;

&lt;p&gt;Retornando com os desafios do CS50x (versão online), seguimos para a semana 3.&lt;/p&gt;

&lt;p&gt;Neste desafio, é pedido que completemos duas funções, sendo estas função &lt;code&gt;vote&lt;/code&gt; e a função &lt;code&gt;print_winner&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Função vote
&lt;/h2&gt;

&lt;p&gt;Ao baixarmos os arquivos, temos a função desta maneira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Update vote totals given a new vote&lt;/span&gt;
&lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;vote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// TODO&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vote&lt;/code&gt; recebe apenas um argumento do tipo &lt;code&gt;string&lt;/code&gt;, representando o nome do candidato.&lt;/li&gt;
&lt;li&gt;Se o nome for o mesmo de um dos candidatos na eleição, então seu valor de número de votos será incrementado com um novo voto. Assim, a função retornará &lt;code&gt;true&lt;/code&gt; para indicar que o voto teve sucesso.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aqui, temos que nos atentar a estrutura já criada pelo código que baixamos, temos este &lt;code&gt;struct&lt;/code&gt; que define que cada candidato, terá um &lt;code&gt;name&lt;/code&gt; e um &lt;code&gt;votes&lt;/code&gt;, sendo estes caractéristicas desta estrutura da dados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Candidates have name and vote count&lt;/span&gt;
&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;votes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E analisando o código, também temos essa importante informação, indicando que teremos um vetor (array) com o nome de &lt;code&gt;candidates&lt;/code&gt; do tipo &lt;code&gt;candidate&lt;/code&gt;, ou seja, caso seja criado um vetor com três (3) espaços, cada espaço deste &lt;strong&gt;tipo de dado&lt;/strong&gt;, terá uma estrutura envolvendo um &lt;code&gt;name&lt;/code&gt; e um &lt;code&gt;vote&lt;/code&gt; particular de cada candidato.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Array of candidates&lt;/span&gt;
&lt;span class="n"&gt;candidate&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BdjYbiZi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9uedpbh4wxron8df10g7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BdjYbiZi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9uedpbh4wxron8df10g7.png" alt="Image description" width="727" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então teremos que percorrer essa lista, e procurar se para cada candidato há uma "match" com o nome inserido para a votação.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;candidate_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;votes&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Percorremos essa lista do index inicial (lembrando que é baseado no número 0 como posição inicial), até ao número de candidatos existentes.&lt;/li&gt;
&lt;li&gt;Em C, precisamos utilizar desta função &lt;code&gt;strcmp()&lt;/code&gt; para comparar valores de &lt;code&gt;strings&lt;/code&gt;. Igualamos a zero, pois a documentação nos diz que:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;This &lt;span class="k"&gt;function &lt;/span&gt;returns

    an int less than 0 &lt;span class="k"&gt;if &lt;/span&gt;s1 comes before s2,
    0 &lt;span class="k"&gt;if &lt;/span&gt;s1 is the same as s2,
    an int greater than 0 &lt;span class="k"&gt;if &lt;/span&gt;s1 comes after s2.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então se o &lt;code&gt;name&lt;/code&gt;for igual ao &lt;code&gt;candidates[i].name&lt;/code&gt; retornará o valor zero (0).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Encontrando, incrementa-se o valor do candidato em 1.&lt;/li&gt;
&lt;li&gt;Retorne &lt;code&gt;true&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Se o &lt;code&gt;name&lt;/code&gt; não der match com o nome de nenhum candidato na eleição, então o valor total de votos não se altera, e a função retorna &lt;code&gt;false&lt;/code&gt; para indicar que o voto não foi computado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Temos então, a função &lt;code&gt;vote&lt;/code&gt; final.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Update vote totals given a new vote&lt;/span&gt;
&lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;vote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;candidate_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;votes&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Função print_winner
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A função deve retornar o nome do candidato com o maior número de votos, e então imprimir uma nova linha.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Primeira vamos procurar o número total de votos que existe nesse &lt;strong&gt;vetor candidates&lt;/strong&gt;. E vamos utilizar do loop e criar uma variável para armazenar o maior valor total de votos que existe entre os candidatos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Print the winner (or winners) of the election&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;print_winner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;max_votes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;candidate_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;votes&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;max_votes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;max_votes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;votes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Criei uma várivel do tipo &lt;code&gt;int&lt;/code&gt; para registrar o maior número de votos existente entre os candidatos.&lt;/li&gt;
&lt;li&gt;Percorro a lista de candidatos e comparo cada o número de &lt;code&gt;votes&lt;/code&gt; de cada candidato ao valor da minha variável.&lt;/li&gt;
&lt;li&gt;Se o valor de votos do candidato seja maior que da minha variável original, então o número de votos do candidato é atribuído a variável &lt;code&gt;max_votes&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;É possível que uma eleição termine em empate, onde múltiplos candidatos possuem o mesmo número de votos. Neste caso, imprima o nome de cada candidato em linhas separadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aqui, optei por percorrer de novo a lista e agora, comparar quais candidatos possuem o mesmo número de votos da variável &lt;code&gt;max_votes&lt;/code&gt;. Desta maneira, seja um ou multíplos candidatos, sempre será imprimido em tela aqueles que tiverem a mesma quantidade de votos que a variável preenchida anteriormente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Print the winner (or winners) of the election&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;print_winner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;max_votes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;candidate_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;votes&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;max_votes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;max_votes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;votes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;candidate_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;votes&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;max_votes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Percorro a lista, e vou comparando o número de votos de cada candidato com o número máximo de votos computados anteriormente.&lt;/li&gt;
&lt;li&gt;Se for igual, será impresso em tela o nome em tela, e junto com o marcador &lt;code&gt;\n&lt;/code&gt; para pular a próxima linha.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  É isso, pessoal!
&lt;/h1&gt;

&lt;p&gt;Termina por aqui, o PSET da semana 3.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>c</category>
    </item>
  </channel>
</rss>
