JavaScript: Rotina Diária Dia 6

Elisa Capololo
4 min readOct 31, 2023
Adventure of Code Day 1 to 6

Olá, estou aqui novamente, mas desta vez para explicar como foi para mim navegar no exercício do dia 6, que posso dizer até hoje foi o exercício mais difícil de resolver e o que demorou mais para encontrar uma solução .
Não vi o exercício do dia 7 ainda, mas já sei que a cada passo os exercícios ficam mais difíceis, e minha meta é chegar no dia 25, esse é o foco, e não importa o tempo, continuaremos focados em alcançar o objetivo.

Dia 6

Input

Supondo que você já leu o exercício e entendeu que para trabalhar com esse input preciso reconhecer o texto ligar, desligar ou alternar, e também reconhecer as coordenadas. A forma como esse input foi apresentado me deixou confusa e me perguntei como vou reconhecer e extrair cada um desses dados? Entendi do que se tratava o problema e tive uma pequena ideia de como resolvê-lo, mas trabalhar com os inputs foi a parte mais difícil. Perguntei ao meu mentor como eu poderia trabalhar com a entrada e ele respondeu à minha pergunta com esta pergunta: “Quais são algumas maneiras que você conhece para procurar algo em uma string?”. Então eu entendi a peça.

Para procurar algo em uma string, temos:

String indexOf()
String lastIndexOf()
String search()
String match()
String matchAll()
String includes()
String startsWith()
String endsWith()

O que eu fiz?

Primeiro decidi dividir meu exercício em pequenas partes. Como você pode ver, a imagem acima apresenta funções que permitem manipular e analisar coletivamente o estado das luzes em um determinado array com base em instruções especificadas.

A função de turnOn acende as luzes no intervalo especificado, definindo seu brilho para 1.

A função de turnOff desliga as luzes no intervalo especificado, definindo seu brilho como 0.

A função de toggle alterna as luzes no intervalo especificado. Se uma luz estiver acesa (brilho 1), ela será apagada (brilho 0), e se estiver apagada, ela será acesa.

A função quantityOfLitLights calcula a quantidade total de luzes acesas somando os valores de brilho em toda a matriz.

Main function

Para o código acima, primeiro temos a string contendo instruções para ligar, desligar ou alternar luzes em uma grid. Cada linha representa uma instrução separada, porque estamos usando o template string é mais fácil trabalhar com a entrada.

Temos um padrão de expressão regular usado para extrair as coordenadas de início e fim de cada instrução. Ele captura dois conjuntos de coordenadas no formato “x,y” e “x,y” separados por “through”.

O método Javascript Array.from() é usado para criar uma nova instância de array a partir de um determinado array. No caso de uma string, cada alfabeto da string é convertido em um elemento da nova instância do array e, no caso de valores inteiros, uma nova instância do array simplesmente pega os elementos do array fornecido.

const matrix = Array.from({length: row}, () => Array(column).fill(0));

Isso cria um array 2D (matriz) com dimensões row x column, preenchida com zeros. Cada elemento da matriz representa o brilho de uma luz.

Temos um loop que itera através de cada instrução do array. Ele usa o padrão de expressão regular para extrair as coordenadas de início e fim de cada instrução. As coordenadas então convertidas em números e atribuídas a variáveis para uso posterior. Com base no tipo de instrução (ligar, desligar, alternar), ele chama a função correspondente (turnOn, turnOff, toggle) com as coordenadas extraídas para atualizar a matriz. Se uma instrução não corresponder ao padrão esperado, ela imprimirá uma mensagem de erro no console. Isso chama a função quantityOfLitLights para calcular o brilho total de todas as luzes na matriz. Ele imprime o número total de luzes acesas no console.

--

--

Elisa Capololo

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