This commit is contained in:
2022-12-10 14:23:32 -05:00
parent eb331893f8
commit 2d0f5c1937
7 changed files with 569 additions and 0 deletions

View File

@@ -22,6 +22,10 @@
<ItemGroup>
<None Remove="Problems\AOC2022\Day10\input.txt" />
<None Remove="Problems\AOC2022\Day10\sara.txt" />
<None Remove="Problems\AOC2022\Day10\simple.txt" />
<None Remove="Problems\AOC2022\Day10\test.txt" />
<None Remove="Problems\AOC2022\Day3\input.txt" />
<None Remove="Problems\AOC2022\Day3\test.txt" />
<None Remove="Problems\AOC2022\Day4\input.txt" />
@@ -32,6 +36,9 @@
<None Remove="Problems\AOC2022\Day6\test.txt" />
<None Remove="Problems\AOC2022\Day8\input.txt" />
<None Remove="Problems\AOC2022\Day8\test.txt" />
<None Remove="Problems\AOC2022\Day9\input.txt" />
<None Remove="Problems\AOC2022\Day9\test.txt" />
<None Remove="Problems\AOC2022\Day9\test2.txt" />
</ItemGroup>

View File

@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AdventOfCode.Problems.AOC2022.Day10;
internal class CathodeCPU
{
public enum Instruction
{
NoOp,
AddX
}
public int X { get; private set; } = 1;
private int _cycleNumber = 1;
private int _programCounter;
private int _pending = -1;
public int[] ExecuteCode((Instruction ins, int value)[] code, int[] outputCycles, Func<int, int, int>? processor = null)
{
var result = new int[outputCycles.Length];
var ridx = 0;
if (processor == null)
processor = (c, x) => c * x;
ExecuteCode(code, (c, x) =>
{
if (ridx < outputCycles.Length && c == outputCycles[ridx])
{
result[ridx] = processor(c, x);
ridx++;
}
});
return result;
}
public void ExecuteCode((Instruction ins, int value)[] code, Action<int, int> processor)
{
while (_programCounter < code.Length)
{
var (ins, value) = code[_programCounter];
processor(_cycleNumber, X);
switch ((ins, _pending))
{
case { ins: Instruction.NoOp }:
_programCounter++;
break;
case { ins: Instruction.AddX, _pending : -1 }:
_pending = 1;
break;
case { ins: Instruction.AddX, _pending: 0 }:
X += value;
_programCounter++;
break;
}
if(_pending >= 0)
_pending--;
_cycleNumber++;
}
}
}

View File

@@ -0,0 +1,56 @@
using AdventOfCode.Runner.Attributes;
namespace AdventOfCode.Problems.AOC2022.Day10;
[ProblemInfo(2022, 10, "Cathode-Ray Tube")]
internal class CathodeRayTube : Problem<int, string>
{
private (CathodeCPU.Instruction ins, int value)[] _code = Array.Empty<(CathodeCPU.Instruction ins, int value)>();
public override void CalculatePart1()
{
var cpu = new CathodeCPU();
var result = cpu.ExecuteCode(_code, new[] { 20, 60, 100, 140, 180, 220 });
Part1 = result.Sum();
}
public override void CalculatePart2()
{
var output = Enumerable.Repeat(' ', 6 * 40).ToArray();
var cpu = new CathodeCPU();
cpu.ExecuteCode(_code, (cycle, signal) =>
{
cycle -= 1;
if (cycle > output.Length)
return;
var pos = signal % 40;
var head = (cycle % 40);
var sprite = Math.Abs(pos - head);
if(sprite <= 1)
output[cycle] = '█';
});
var lines = output.Chunk(40).Select(r => new string(r));
Part2 = $"\n{string.Join("\n", lines)}";
}
public override void LoadInput()
{
var lines = ReadInputLines("input.txt");
_code = new (CathodeCPU.Instruction ins, int value)[lines.Length];
for (int i = 0; i < lines.Length; i++)
{
var ln = lines[i];
if (ln == "noop")
_code[i] = (CathodeCPU.Instruction.NoOp, 0);
else
{
var instruction = ln.Split(' ');
_code[i] = (Enum.Parse<CathodeCPU.Instruction>(instruction[0], true), int.Parse(instruction[1]));
}
}
}
}

View File

@@ -0,0 +1,144 @@
addx 1
noop
addx 29
addx -24
addx 4
addx 3
addx -2
addx 3
addx 1
addx 5
addx 3
addx -2
addx 2
noop
noop
addx 7
noop
noop
noop
addx 5
addx 1
noop
addx -38
addx 21
addx 8
noop
addx -19
addx -2
addx 2
addx 5
addx 2
addx -12
addx 13
addx 2
addx 5
addx 2
addx -18
addx 23
noop
addx -15
addx 16
addx 7
noop
noop
addx -38
noop
noop
noop
noop
noop
noop
addx 8
addx 2
addx 3
addx -2
addx 4
noop
noop
addx 5
addx 3
noop
addx 2
addx 5
noop
noop
addx -2
noop
addx 3
addx 6
noop
addx -38
addx -1
addx 35
addx -6
addx -19
addx -2
addx 2
addx 5
addx 2
addx 3
noop
addx 2
addx 3
addx -2
addx 2
noop
addx -9
addx 16
noop
addx 9
addx -3
addx -36
addx -2
addx 11
addx 22
addx -28
noop
addx 3
addx 2
addx 5
addx 2
addx 3
addx -2
addx 2
noop
addx 3
addx 2
noop
addx -11
addx 16
addx 2
addx 5
addx -31
noop
addx -6
noop
noop
noop
noop
noop
addx 7
addx 30
addx -24
addx -1
addx 5
noop
noop
noop
noop
noop
addx 5
noop
addx 5
noop
addx 1
noop
addx 2
addx 5
addx 2
addx 1
noop
noop
noop
noop

View File

@@ -0,0 +1,139 @@
noop
noop
addx 5
addx 31
addx -30
addx 2
addx 7
noop
noop
addx -4
addx 5
addx 6
noop
addx -1
addx 5
addx -1
addx 5
addx 1
noop
addx 5
noop
addx -1
addx -35
addx 3
noop
addx 2
addx 3
addx -2
addx 2
noop
addx 8
addx -3
addx 5
addx -17
addx 22
addx -2
addx 2
addx 5
addx -2
addx -26
addx 31
addx 2
addx 5
addx -40
addx 30
addx -27
addx 4
addx 2
addx 3
addx -3
addx 8
noop
noop
addx 2
addx 21
addx -15
addx -2
addx 2
noop
addx 15
addx -16
addx 8
noop
addx 3
addx 5
addx -38
noop
noop
noop
addx 5
addx -5
addx 6
addx 2
addx 7
noop
noop
addx 4
addx -3
noop
noop
addx 7
addx 2
addx 2
addx -1
noop
addx 3
addx 6
noop
addx 1
noop
noop
addx -38
noop
noop
addx 7
addx 3
noop
addx 2
addx -2
addx 7
addx -2
addx 5
addx 2
addx 5
addx -4
addx 2
addx 5
addx 2
addx -21
addx 9
addx 15
noop
addx 3
addx -38
addx 7
noop
noop
addx 18
addx -17
addx 4
noop
addx 1
addx 2
addx 5
addx 3
noop
noop
addx 14
addx -9
noop
noop
addx 4
addx 1
noop
addx 4
addx 3
noop
addx -8
noop

View File

@@ -0,0 +1,3 @@
noop
addx 3
addx -5

View File

@@ -0,0 +1,146 @@
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