Advent of Code 2022 - Dia 10
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 10: Tubo de Raios Catódicos ---
Você evita as cordas, mergulha no rio e nada até a margem.
Os Elfos gritam algo sobre se reencontrarem rio acima, mas o rio está muito alto para dizer exatamente o que eles estão falando. Eles terminam de cruzar a ponte e desaparecem de vista.
Situações como esta devem ser o motivo pelo qual os Elfos priorizaram o funcionamento do sistema de comunicações em seu dispositivo portátil. Você o puxa para fora da mochila, mas a quantidade de água que sai lentamente de uma grande rachadura em sua tela indica que provavelmente não será de muita utilidade imediata.
Quer dizer, a menos que você possa projetar um substituto para o sistema de vídeo do dispositivo! Parece ser algum tipo de tela de tubo de raios catódicos e CPU simples que são acionados por um circuito de relógio preciso. O circuito do relógio marca a um ritmo constante; cada tique é chamado de ciclo.
Comece por descobrir o sinal que está sendo enviado pela CPU. A CPU possui um único registo, X, que começa com o valor 1. Ele suporta apenas duas instruções:
-
addx Vleva dois ciclos para ser concluído. Após dois ciclos, o registoXé incrementado pelo valorV. (Vpode ser negativo.) -
noopleva um ciclo para ser concluído. Não tem nenhum outro efeito.
A CPU usa essas instruções em um programa (sua entrada do puzzle) para, de alguma forma, dizer à tela o que desenhar.
Considere o seguinte pequeno programa:
noop
addx 3
addx -5
A execução deste programa procede da seguinte forma:
-
No início do primeiro ciclo, a instrução
noopinicia a execução. Durante o primeiro ciclo,Xé1. Após o primeiro ciclo, a instruçãonooptermina a execução, sem fazer nada. -
No início do segundo ciclo, a instrução
addx 3inicia a execução. Durante o segundo ciclo,Xainda é1. -
Durante o terceiro ciclo,
Xainda é1. Após o terceiro ciclo, a instruçãoaddx 3finaliza a execução, configurandoXpara4. -
No início do quarto ciclo, a instrução
addx -5inicia a execução. Durante o quarto ciclo,Xainda é4. -
Durante o quinto ciclo,
Xainda é4. Após o quinto ciclo, a instruçãoaddx -5finaliza a execução, configurandoXpara-1.
Talvez você possa aprender algo observando o valor do registo X durante a execução. Por enquanto, considere a intensidade do sinal (o número do ciclo multiplicado pelo valor do registro X) durante o 20º ciclo e a cada 40 ciclos depois disso (ou seja, durante o 20º, 60º, 100º, 140º, 180º e 220º ciclos).
Por exemplo, considere este programa maior:
addx 15
addx -11
addx 6
addx -3
addx 5
addx -1
addx -8
addx 13
addx 4
noop
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx -35
addx 1
addx 24
addx -19
addx 1
addx 16
addx -11
noop
noop
addx 21
addx -15
noop
noop
addx -3
addx 9
addx 1
addx -3
addx 8
addx 1
addx 5
noop
noop
noop
noop
noop
addx -36
noop
addx 1
addx 7
noop
noop
noop
addx 2
addx 6
noop
noop
noop
noop
noop
addx 1
noop
noop
addx 7
addx 1
noop
addx -13
addx 13
addx 7
noop
addx 1
addx -33
noop
noop
noop
addx 2
noop
noop
noop
addx 8
noop
addx -1
addx 2
addx 1
noop
addx 17
addx -9
addx 1
addx 1
addx -3
addx 11
noop
noop
addx 1
noop
addx 1
noop
noop
addx -13
addx -19
addx 1
addx 3
addx 26
addx -30
addx 12
addx -1
addx 3
addx 1
noop
noop
noop
addx -9
addx 18
addx 1
addx 2
noop
noop
addx 9
noop
noop
noop
addx -1
addx 2
addx -37
addx 1
addx 3
noop
addx 15
addx -21
addx 22
addx -6
addx 1
noop
addx 2
addx 1
noop
addx -10
noop
noop
addx 20
addx 1
addx 2
addx 2
addx -6
addx -11
noop
noop
noop
As intensidades de sinal interessantes podem ser determinadas da seguinte forma:
-
Durante o 20º ciclo, o registo
Xtem o valor21, então a força do sinal é 20 * 21 = 420. (O 20º ciclo ocorre no meio do segundoaddx -1, então o valor do registoXé o valor inicial,1, mais todos os outros valoresaddxaté aquele ponto: 1 + 15 - 11 + 6 - 3 + 5 - 1 - 8 + 13 + 4 = 21.) -
Durante o 60º ciclo, o registro
Xtem o valor19, então a intensidade do sinal é 60 * 19 =1140. -
Durante o 100º ciclo, o registro
Xtem o valor18, então a força do sinal é 100 * 18 =1800. -
Durante o 140º ciclo, o registro
Xtem o valor21, então a força do sinal é 140 * 21 =2940. -
Durante o 180º ciclo, o registro
Xtem o valor16, então a força do sinal é 180 * 16 =2880. -
Durante o 220º ciclo, o registro
Xtem o valor18, então a força do sinal é 220 * 18 =3960.
A soma dessas intensidades de sinal é 13140.
Encontre a força do sinal durante o 20º, 60º, 100º, 140º, 180º e 220º ciclos. Qual é a soma dessas seis intensidades de sinal?
--- Parte Dois ---
https://github.com/tcarreira/aoc2022/tree/main/day10#----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:
- https://adventofcode.com/2022/day/10
- Código, soluções e traduções: github.com/tcarreira/aoc2022
- Live streaming
- Playlists no youtube
- senha do Private Leaderboard:
827447-e95d42f1