JavaScript: Rotina Diária Dia 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
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.
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.