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 V
leva dois ciclos para ser concluído. Após dois ciclos, o registoX
é incrementado pelo valorV
. (V
pode ser negativo.) -
noop
leva 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
noop
inicia a execução. Durante o primeiro ciclo,X
é1
. Após o primeiro ciclo, a instruçãonoop
termina a execução, sem fazer nada. -
No início do segundo ciclo, a instrução
addx 3
inicia a execução. Durante o segundo ciclo,X
ainda é1
. -
Durante o terceiro ciclo,
X
ainda é1
. Após o terceiro ciclo, a instruçãoaddx 3
finaliza a execução, configurandoX
para4
. -
No início do quarto ciclo, a instrução
addx -5
inicia a execução. Durante o quarto ciclo,X
ainda é4
. -
Durante o quinto ciclo,
X
ainda é4
. Após o quinto ciclo, a instruçãoaddx -5
finaliza a execução, configurandoX
para-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
X
tem 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 valoresaddx
até aquele ponto: 1 + 15 - 11 + 6 - 3 + 5 - 1 - 8 + 13 + 4 = 21.) -
Durante o 60º ciclo, o registro
X
tem o valor19
, então a intensidade do sinal é 60 * 19 =1140
. -
Durante o 100º ciclo, o registro
X
tem o valor18
, então a força do sinal é 100 * 18 =1800
. -
Durante o 140º ciclo, o registro
X
tem o valor21
, então a força do sinal é 140 * 21 =2940
. -
Durante o 180º ciclo, o registro
X
tem o valor16
, então a força do sinal é 180 * 16 =2880
. -
Durante o 220º ciclo, o registro
X
tem 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