예제 #1
0
    private static string GetParamValue(IntCodeProgram program, long instruction, long value, int param)
    {
        var mode = IntCodeProgram.OcodeParameterMode(instruction, param);

        switch (mode)
        {
        case ParameterMode.Position: return($"[{value}]");

        case ParameterMode.Immediate: return($"{value}");

        case ParameterMode.Relative: return($"[{value} + {program.RelativeBaseOffset}]");

        default: return("");
        }
    }
예제 #2
0
 public void ParameterMode_ParameterC_InRelative2() => Assert.AreEqual(ParameterMode.Relative, IntCodeProgram.OcodeParameterMode(20104, 2));
예제 #3
0
 public void ParameterMode_ParameterC_InPosition2() => Assert.AreEqual(ParameterMode.Position, IntCodeProgram.OcodeParameterMode(02104, 2));
예제 #4
0
 public void ParameterMode_ParameterC_InImmediate2() => Assert.AreEqual(ParameterMode.Immediate, IntCodeProgram.OcodeParameterMode(11204, 2));
예제 #5
0
 public void ParameterMode_ParameterB_InRelative() => Assert.AreEqual(ParameterMode.Relative, IntCodeProgram.OcodeParameterMode(2001, 1));
예제 #6
0
 public void ParameterMode_ParameterB_InImmediate() => Assert.AreEqual(ParameterMode.Immediate, IntCodeProgram.OcodeParameterMode(1101, 1));
예제 #7
0
 public void ParameterMode_ParameterB_InPosition2() => Assert.AreEqual(ParameterMode.Position, IntCodeProgram.OcodeParameterMode(120104, 1));
예제 #8
0
 public void ParameterMode_ParameterA_InRelative2() => Assert.AreEqual(ParameterMode.Relative, IntCodeProgram.OcodeParameterMode(120204, 0));
예제 #9
0
 public void ParameterMode_ParameterA_InPosition() => Assert.AreEqual(ParameterMode.Position, IntCodeProgram.OcodeParameterMode(001, 0));