Files
aoc-2019/ProblemTwo/Program.cs
2019-12-03 18:33:35 -05:00

102 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProblemTwo
{
class Program
{
static void Main(string[] args)
{
/* PART ONE */
var program = LoadProgramIntoMemory(ProgramStringPartOne);
program = SeedProgram(program, 12, 2);
program = ExecuteProgram(program);
Console.WriteLine(program[0]);
/* PART TWO */
for (int noun = 0; noun < 100; noun++)
{
for (int verb = 0; verb < 100; verb++)
{
program = LoadProgramIntoMemory(ProgramStringPartOne);
program = SeedProgram(program, noun, verb);
program = ExecuteProgram(program);
if (program[0] == 19690720)
Console.WriteLine(100 * noun + verb);
}
}
Console.ReadLine();
}
static int[] LoadProgramIntoMemory(string strProgram)
{
return strProgram.Split(',').Select(x => int.Parse(x)).ToArray();
}
static int[] SeedProgram(int[] program, int noun, int verb)
{
program[1] = noun;
program[2] = verb;
return program;
}
static int[] ExecuteProgram(int[] program)
{
int parameterCount = 0;
for (int i = 0; i < program.Length; i = i + parameterCount)
{
var operationCode = (Operations)program[i];
if (operationCode == Operations.Add)
{
var inputOne = program[i + 1];
var inputTwo = program[i + 2];
var result = program[i + 3];
program[result] = program[inputOne] + program[inputTwo];
parameterCount = OperationParameterCount.Add;
}
else if (operationCode == Operations.Multiply)
{
var inputOne = program[i + 1];
var inputTwo = program[i + 2];
var result = program[i + 3];
program[result] = program[inputOne] * program[inputTwo];
parameterCount = OperationParameterCount.Multiply;
}
else if (operationCode == Operations.Exit)
{
break;
}
else
throw new Exception("Unsupported Operation");
}
return program;
}
enum Operations
{
Add = 1,
Multiply = 2,
Exit = 99
}
static class OperationParameterCount
{
public static int Add => 4;
public static int Multiply => 4;
public static int Exit => 0;
}
static string ProgramStringPartOne = "1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,6,19,1,5,19,23,1,23,6,27,1,5,27,31,1,31,6,35,1,9,35,39,2,10,39,43,1,43,6,47,2,6,47,51,1,5,51,55,1,55,13,59,1,59,10,63,2,10,63,67,1,9,67,71,2,6,71,75,1,5,75,79,2,79,13,83,1,83,5,87,1,87,9,91,1,5,91,95,1,5,95,99,1,99,13,103,1,10,103,107,1,107,9,111,1,6,111,115,2,115,13,119,1,10,119,123,2,123,6,127,1,5,127,131,1,5,131,135,1,135,6,139,2,139,10,143,2,143,9,147,1,147,6,151,1,151,13,155,2,155,9,159,1,6,159,163,1,5,163,167,1,5,167,171,1,10,171,175,1,13,175,179,1,179,2,183,1,9,183,0,99,2,14,0,0";
}
}