Advent of Code 2022 - Dia 06

No contexto deste outro conteúdo: https://www.tabnews.com.br/tcarreira/advent-of-code-2022-desafios-de-programacao (se gostarem deste conteúdo, votem no original, para que ele fique visível durante o tempo do AoC)


--- Dia 6: Problema de Ajuste ---

Os preparativos estão finalmente completos; você e os elfos deixam o acampamento a pé e começam a caminhar em direção ao arvoredo do fruto estrela.

Conforme você se move pela densa vegetação rasteira, um dos elfos lhe dá um dispositivo portátil. Ele diz que tem muitos recursos sofisticados, mas o mais importante para configurar agora é o sistema de comunicações.

No entanto, porque ele ouviu falar que você tem experiência significativa trabalhando com sistemas baseados em sinal, ele convenceu os outros Elfos de que não haveria problema em dar a você o único dispositivo com defeito - certamente você não terá problemas para consertá-lo.

Como que inspirado pelo timing cômico, o dispositivo emite algumas faíscas coloridas.

Para poder se comunicar com os Elfos, o dispositivo precisa travar no sinal deles. O sinal é uma série de caracteres aparentemente aleatórios que o dispositivo recebe um de cada vez.

Para corrigir o sistema de comunicação, você precisa adicionar uma sub-rotina ao dispositivo que deteta um marcador de início de pacote no fluxo de dados. No protocolo usado pelos Elfos, o início de um pacote é indicado por uma sequência de quatro caracteres todos diferentes.

O dispositivo enviará à sua sub-rotina um buffer de fluxo de dados (sua entrada do puzzle); sua sub-rotina precisa identificar a primeira posição onde os quatro caracteres recebidos mais recentemente eram todos diferentes. Especificamente, ele precisa relatar o número de caracteres desde o início do buffer até o final do primeiro marcador de quatro caracteres.

Por exemplo, suponha que você receba o seguinte buffer de fluxo de dados:

mjqjpqmgbljsphdztnvjfqwrcgsmlb

Depois que os três primeiros caracteres (mjq) foram recebidos, ainda não foram recebidos caracteres suficientes para localizar o marcador. A primeira vez que um marcador pode ocorrer é após o quarto caractere ser recebido, tornando os quatro caracteres mais recentes mjqj. Como j é repetido, isso não é um marcador.

A primeira vez que um marcador aparece é após a chegada do sétimo caractere. Depois disso, os últimos quatro caracteres recebidos são jpqm, que são todos diferentes. Neste caso, sua sub-rotina deve informar o valor 7, porque o primeiro marcador de início de pacote é concluído após o processamento de 7 caracteres.

Aqui estão mais alguns exemplos:

  • bvwbjplbgvbhsrlpgdmjqwftvncz: primeiro marcador após o caractere 5

  • nppdvjthqldpwncqszvftbrmjlhg: primeiro marcador após o caractere 6

  • nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg: primeiro marcador após o caractere 10

  • zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw: primeiro marcador após o caractere 11

Quantos caracteres precisam ser processados antes que o primeiro marcador de início de pacote seja detetado?

--- Parte Dois ---

https://github.com/tcarreira/aoc2022/tree/main/day06#----parte-dois----

(saber a parte 2 antes de fazer a parte 1 não é tão divertido. Então vou deixar apenas o link para o Github 😉)


Outros links: