JavaScript: Rotina diária do dia 1 ao 5

Elisa Capololo
6 min readOct 13, 2023
Adventure of Code Day 1 to 5

Olá amigos, estou aqui novamente. Hoje estou compartilhando com vocês meu primeiro dia em minha nova série Javascript: Rotina Diária. Se você ainda não leu a introdução sobre por que estou iniciando esta série, convido você a ler meu artigo de introdução aqui.

Estarei fazendo um resumo do que aprendi resolvendo os 5 primeiros exercícios do AoC Challenge 2015.

Adventure of Code

Advent of Code é um calendário do Advento com pequenos quebra-cabeças de programação para uma variedade de conjuntos e níveis de habilidade que podem ser resolvidos em qualquer linguagem de programação que você desejar. As pessoas os usam para preparação para entrevistas, treinamento em empresas, cursos universitários, problemas práticos, speed contest ou para desafiar uns aos outros. Você não precisa de formação em ciência da computação para participar — apenas um pouco de conhecimento de programação e algumas habilidades de resolução de problemas o levarão muito longe.

Dia 1

Estou resolvendo os exercícios do evento de 2015 e no meu primeiro dia recebi esse exercício, que você pode ver aqui. Para resolver esse problema depois de muita pesquisa na internet, leitura de artigos, etc. Fui apresentado a dois conceitos novos para mim.
Spread e Map em javascript. A questão é o que são Spread e Map e como usei ambos para resolver meu problema de programação? Bem, não se preocupe, vou explicar agora. Bem, vamos diretamente ao código. Estou deixando o link do meu código no meu GitHub.

Minha solução para o dia 1

Spread[…]
O operador spread JavaScript (...) expande um iterável (como um array) em mais elementos.
Em termos simples, podemos dizer que o operador spread quebra um array, quebra um conjunto de elementos e retorna elemento por elemento. Uma das vantagens de usar o spread é que ele simplifica diversas operações quando se trata de trabalhar com arrays e coleções HTML ou outras coleções possíveis em JavaScript.

Map()

Em termos simples, o Map tem a fuObserve que a entrada que usei no meu código é pequena porque é um exemplo de entrada. No AoC, cada exercício vem com uma entrada personalizada, e essas entradas normalmente são bem grandes como no exercício do dia 1, daí o uso desses dois elementos Spread e Map() para ajudar na resolução dos exercícios.ncionalidade de percorrer um array, usamos ele quando precisamos trabalhar elemento por elemento de uma coleção, ao contrário dos loops, o Map irá iterar a coleção inteira, você não para no meio, você tem que iterar todos os elementos da coleção.

Dia 2

Minha solução para o dia 2

No dia 2, aprendi sobre Slip(), um método usado para dividir uma determinada string em um array de strings, separando-a em substrings usando um separador especificado fornecido no argumento.

Aqui no meu código, eu uso o split()

  1. const boxes = input.split('\n'): Esta linha usa o método split para dividir a string de entrada (input) em uma matriz de substrings. O delimitador usado para divisão é o caractere de nova linha ('\n'), portanto, cada elemento na matriz resultante corresponde a uma linha na string de entrada (input) original.
  2. const arrayInput = boxes[i].split('x').map(Number);: Aqui, para cada box (linha), o método split é usado novamente, mas desta vez ele divide a linha usando o ‘x’ caractere como delimitador. O resultado é uma matriz de strings representando o comprimento, largura e altura da caixa. A parte map(Number) está convertendo cada elemento da string em um número.
  3. console.log(arrayInput): Esta linha simplesmente registra a matriz de números que representa as dimensões da caixa atual no console.

Então, em resumo, o método Split() é usado para separar as linhas da entrada e extrair as dimensões de cada caixa dessas linhas.

Dia 3

Minha solução para o dia 3

Nesta imagem específica acima quero mostrar um pouco sobre como pode ser a entrada do nosso exercício AoC, acho que você pode ver como preciso usar o template String (``) para que meu editor e o próprio código reconheçam e aceita as inúmeras informações do exercício.

Antes de começar a explicar sobre Set(), deixe-me dizer o que é um Template String. Template String é um recurso do JavaScript que permite incorporar expressões dentro de literais de string. Eles são colocados entre crases (``), não devem ser confundidos com aspas simples ou duplas. As strings de modelo são convenientes porque permitem interpolar variáveis e expressões diretamente na string sem a necessidade de concatenação ou escape complexo.

Template String

Agora que já falamos sobre template string, vamos falar sobre o que é Set() e entender por que usei ele em meu exercício.

Set() é uma coleção de valores onde cada valor deve ser único. Isso significa que o mesmo valor não pode ocorrer mais de uma vez em um Set(). Os Set() são úteis quando você deseja armazenar valores exclusivos e verificar rapidamente a existência de um valor específico na coleção. Eles fornecem métodos como add(), delete(), has() e clear() para manipular o conjunto.

Neste exercício, usamos Set() porque a ideia é que em cada iteração, o Papai Noel visite uma casa específica com base em uma direção específica.

Dia 4

Minha solução para o dia 4

Para resolver o problema no dia 4, depois de ler e entender do que o problema fala, primeiro precisei entender o que é um md5, como calcular um md5 e como posso utilizá-lo para me ajudar a resolver meu problema.

MD5 é um algoritmo de função hash criptográfica que pega a mensagem como entrada de qualquer length e a transforma em uma mensagem de fixed-length (comprimento fixo) de 16 bytes. Ou MD5 (tecnicamente chamado de Algoritmo MD5 Message-Digest) é uma função hash criptográfica cujo objetivo principal é verificar se um arquivo foi inalterado.

Os hashes MD5 têm 128 bits de comprimento e normalmente são mostrados em seu valor hexadecimal equivalente de 32 dígitos. Isso é verdade, não importa quão grande ou pequeno seja o arquivo ou texto.

JavaScript não possui uma função integrada para gerar strings MD5 por padrão. Precisamos usar uma biblioteca externa e blueimp-md5 é provavelmente sua melhor opção atualmente. A biblioteca blueimp-md5 é compatível com a maioria dos projetos. Você pode usá-lo com ambientes do lado do servidor como Node.js, carregadores de módulo como RequireJS ou mais diretamente com todos os navegadores da web.

Dia 5

Algo que notei é que a cada passo dado e exercício realizado, o nível de dificuldade aumenta e surgem mais elementos novos para resolver os exercícios.

Minha solução para o dia 5

Devido à complexidade do exercício, a forma mais fácil de resolvê-lo é utilizando expressões regulares. Para ser honesto, esta é a primeira vez que trabalho com expressões regulares e elas parecem muito úteis quando criamos diferentes condições usando strings.

Uma expressão regular é uma sequência de caracteres que forma um padrão de pesquisa. Ao pesquisar dados em um texto, você pode usar esse padrão de pesquisa para descrever o que está procurando. Uma expressão regular pode ser um único caractere ou um padrão mais complicado.

A única maneira de criar uma expressão regular é entender o que a condição está pedindo e com base nisso criar uma expressão regular. Foi assim que consegui resolver o problema no dia 5.

Assim que terminei os 5 primeiros exercícios do AoC, ganhei 10 estrelas e consegui acender as 5 primeiras linhas da minha árvore de Natal, o objetivo é iluminar todas as linhas, então vamos começar a jornada para os próximos 5 exercícios e assim por diante. Vejo você no próximo artigo.

Recomendações

Caso não queira configurar seu ambiente de trabalho, você pode criar seu código aqui: Replit

Para quem quiser experimentar expressões regulares e ver como funcionam, sugiro usar este site: Regexr

Saiba mais sobre md5 em npm: npm

Visite meu GitHub aqui, meu portfólio aqui e meu LinkedIn aqui.

--

--

Elisa Capololo

Software Entrepreneur | Front-end Developer | Community Builder | MEST Africa Alumni | Writer in EN and PT