Advent of Code 2022 - Dia 13

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 13: Sinal de Socorro ---

Você sobe a colina e novamente tenta entrar em contato com os Elfos. No entanto, você recebe um sinal que não esperava: um sinal de socorro.

Seu dispositivo portátil ainda não deve estar funcionando corretamente; os pacotes do sinal de socorro foram decodificados fora de ordem. Você precisará reordenar a lista de pacotes recebidos (sua entrada do puzzle) para decodificar a mensagem.

Sua lista consiste em pares de pacotes; pares são separados por uma linha em branco. Você precisa identificar quantos pares de pacotes estão na ordem correta.

Por exemplo:

[1,1,3,1,1]
[1,1,5,1,1]

[[1],[2,3,4]]
[[1],4]

[9]
[[8,7,6]]

[[4,4],4,4]
[[4,4],4,4,4]

[7,7,7,7]
[7,7,7]

[]
[3]

[[[]]]
[[]]

[1,[2,[3,[4,[5,6,7]]]],8,9]
[1,[2,[3,[4,[5,6,0]]]],8,9]

Os dados do pacote consistem em listas e números inteiros. Cada lista começa com [, termina com ] e contém zero ou mais valores separados por vírgula (inteiros ou outras listas). Cada pacote é sempre uma lista e aparece em sua própria linha.

Ao comparar dois valores, o primeiro valor é chamado de esquerda e o segundo valor é chamado de direita. Então:

  • Se ambos os valores forem inteiros, o inteiro inferior deve vir primeiro. Se o inteiro esquerdo for menor que o inteiro direito, as entradas estarão na ordem correta. Se o inteiro esquerdo for maior que o inteiro direito, as entradas não estão na ordem correta. Caso contrário, as entradas são o mesmo número inteiro; continue verificando a próxima parte da entrada.

  • Se ambos os valores forem listas, compare o primeiro valor de cada lista, depois o segundo valor e assim por diante. Se a lista da esquerda ficar sem itens primeiro, as entradas estarão na ordem correta. Se a lista direita ficar sem itens primeiro, as entradas não estarão na ordem correta. Se as listas tiverem o mesmo tamanho e nenhuma comparação tomar uma decisão sobre a ordem, continue verificando a próxima parte da entrada.

  • Se exatamente um valor for um número inteiro, converta o número inteiro em uma lista que contenha esse número inteiro como seu único valor e repita a comparação. Por exemplo, se comparar [0,0,0] e 2, converta o valor direito para [2] (uma lista contendo 2); o resultado é então encontrado comparando [0,0,0] e [2].

Usando essas regras, você pode determinar quais pares no exemplo estão na ordem correta:

== Par 1 ==
- Compare [1,1,3,1,1] vs [1,1,5,1,1]
   - Compare 1 vs 1
   - Compare 1 vs 1
   - Compare 3 vs 5
     - O lado esquerdo é menor, então as entradas estão na ordem certa

== Par 2 ==
- Compare [[1],[2,3,4]] vs [[1],4]
   - Compare [1] vs [1]
     - Compare 1 vs 1
   - Compare [2,3,4] vs 4
     - Tipos mistos; converter a direita para [4] e repetir a comparação
     - Compare [2,3,4] vs [4]
       - Compare 2 vs 4
         - O lado esquerdo é menor, então as entradas estão na ordem correta

== Par 3 ==
- Compare [9] vs [[8,7,6]]
   - Compare 9 vs [8,7,6]
     - Tipos mistos; converter à esquerda para [9] e repetir a comparação
     - Compare [9] vs [8,7,6]
       - Compare 9 vs 8
         - O lado direito é menor, então as entradas não estão na ordem correta

== Par 4 ==
- Compare [[4,4],4,4] vs [[4,4],4,4,4]
   - Compare [4,4] vs [4,4]
     - Compare 4 vs 4
     - Compare 4 vs 4
   - Compare 4 vs 4
   - Compare 4 vs 4
   - O lado esquerdo ficou sem itens, então as entradas estão na ordem certa

== Par 5 ==
- Compare [7,7,7,7] vs [7,7,7]
   - Compare 7 vs 7
   - Compare 7 vs 7
   - Compare 7 vs 7
   - O lado direito ficou sem itens, então as entradas não estão na ordem correta

== Par 6 ==
- Compare [] vs [3]
   - O lado esquerdo ficou sem itens, então as entradas estão na ordem certa

== Par 7 ==
- Compare [[[]]] vs [[]]
   - Compare [[]] vs []
     - O lado direito ficou sem itens, então as entradas não estão na ordem correta

== Par 8 ==
- Compare [1,[2,[3,[4,[5,6,7]]]],8,9] vs [1,[2,[3,[4,[5,6,0]] ]],8,9]
   - Compare 1 vs 1
   - Compare [2,[3,[4,[5,6,7]]]] vs [2,[3,[4,[5,6,0]]]]
     - Compare 2 vs 2
     - Compare [3,[4,[5,6,7]]] vs [3,[4,[5,6,0]]]
       - Compare 3 vs 3
       - Compare [4,[5,6,7]] vs [4,[5,6,0]]
         - Compare 4 vs 4
         - Compare [5,6,7] vs [5,6,0]
           - Compare 5 vs 5
           - Compare 6 vs 6
           - Compare 7 vs 0
             - O lado direito é menor, então as entradas não estão na ordem correta

Quais são os índices dos pares que já estão na ordem correta? (O primeiro par tem índice 1, o segundo par tem índice 2 e assim por diante.) No exemplo acima, os pares na ordem correta são 1, 2, 4 e 6; a soma destes índices é 13.

Determine quais pares de pacotes já estão na ordem correta. Qual é a soma dos índices desses pares?

--- Parte dois ---

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