Advent of Code 2022 - Dia 09

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 9: Ponte de Corda ---

Esta ponte de corda range enquanto você caminha por ela. Você não tem certeza de quantos anos ele tem ou mesmo se pode suportar seu peso.

Mas parece apoiar os Elfos muito bem. A ponte atravessa um desfiladeiro que foi esculpido pelo enorme rio bem abaixo de você.

Você pisa com cuidado; conforme você faz, as cordas se esticam e torcem. Você decide se distrair modelando a física das cordas; talvez você possa até descobrir onde não pisar.

Considere uma corda com um nó em cada ponta; esses nós marcam a cabeça e a cauda da corda. Se a cabeça se afastar o suficiente da cauda, a cauda é puxada em direção à cabeça.

Devido ao raciocínio nebuloso envolvendo comprimentos de Planck, você deve ser capaz de modelar as posições dos nós em uma grelha bidimensional. Então, seguindo uma hipotética série de movimentos (sua entrada do quebra-cabeça) para a cabeça, você pode determinar como a cauda se moverá.

Devido aos comprimentos de Planck mencionados, a corda deve ser bem curta; de fato, a cabeça (H) e a cauda (T) devem sempre estar se tocando (na diagonal adjacente e até mesmo sobrepondo ambas contam como se tocando):

....
.TH.
....

....
.H..
..T.
....

...
.H. (H cobre T)
...

Se a cabeça estiver sempre dois passos diretamente para cima, para baixo, para a esquerda ou para a direita da cauda, a cauda também deve se mover um passo nessa direção para permanecer perto o suficiente:

.....    .....    .....
.TH.. -> .T.H. -> ..TH.
.....    .....    .....

...    ...    ...
.T.    .T.    ...
.H. -> ... -> .T.
...    .H.    .H.
...    ...    ...

Caso contrário, se a cabeça e a cauda não estiverem se tocando e não estiverem na mesma linha ou coluna, a cauda sempre se move um passo na diagonal para acompanhar:

.....    .....    .....
.....    ..H..    ..H..
..H.. -> ..... -> ..T..
.T...    .T...    .....
.....    .....    .....

.....    .....    .....
.....    .....    .....
..H.. -> ...H. -> ..TH.
.T...    .T...    .....
.....    .....    .....

Você só precisa descobrir para onde vai a cauda enquanto a cabeça segue uma série de movimentos. Suponha que a cabeça e a cauda comecem na mesma posição, sobrepostas.

Por exemplo:

R 4
U 4
L 3
D 1
R 4
D 1
L 5
R 2

Esta série de movimentos move a cabeça para a direita quatro passos, depois para cima quatro passos, depois para a esquerda três passos, depois para baixo um passo, e assim por diante. Após cada etapa, você precisará atualizar a posição da cauda se a etapa significar que a cabeça não está mais adjacente à cauda. Visualmente, esses movimentos ocorrem da seguinte forma (s marca a posição inicial como ponto de referência):

== Initial State ==

......
......
......
......
H.....  (H cobre T, s)

== R 4 ==

......
......
......
......
TH....  (T cobre s)

......
......
......
......
sTH...

......
......
......
......
s.TH..

......
......
......
......
s..TH.

== U 4 ==

......
......
......
....H.
s..T..

......
......
....H.
....T.
s.....

......
....H.
....T.
......
s.....

....H.
....T.
......
......
s.....

== L 3 ==

...H..
....T.
......
......
s.....

..HT..
......
......
......
s.....

.HT...
......
......
......
s.....

== D 1 ==

..T...
.H....
......
......
s.....

== R 4 ==

..T...
..H...
......
......
s.....

..T...
...H..
......
......
s.....

......
...TH.
......
......
s.....

......
....TH
......
......
s.....

== D 1 ==

......
....T.
.....H
......
s.....

== L 5 ==

......
....T.
....H.
......
s.....

......
....T.
...H..
......
s.....

......
......
..HT..
......
s.....

......
......
.HT...
......
s.....

......
......
HT....
......
s.....

== R 2 ==

......
......
.H....  (H cobre T)
......
s.....

......
......
.TH...
......
s.....

Depois de simular a corda, você pode contar todas as posições que a cauda visitou pelo menos uma vez. Neste diagrama, s novamente marca a posição inicial (que a cauda também visitou) e # marca outras posições que a cauda visitou:

..##..
...##.
.####.
....#.
s###..

Portanto, existem 13 posições que a cauda visitou pelo menos uma vez.

Simule sua série hipotética completa de movimentos. Quantas posições a ponta da corda visita pelo menos uma vez?

--- Parte Dois ---

https://github.com/tcarreira/aoc2022/tree/main/day09#----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: