Esempio n. 1
0
        public void SetValue(string slug)
        {
            var rawValue = StringHelpers.Unslugify(slug);
            var value    = Dnum <T> .Parse(rawValue, true);

            _value = value;
        }
Esempio n. 2
0
        public string Solve(string[] input)
        {
            var initialPosition = new Position(0, 0);
            var position        = initialPosition;
            var direction       = Direction.North;
            var moves           =
                input[0].Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries)
                .Select(move => new { turn = Dnum <Turn.Dir> .Parse(move.Substring(0, 1)), distance = ushort.Parse(move.Substring(1)) });

            ISet <Position> visited = new HashSet <Position> {
                initialPosition
            };

            foreach (var instruction in moves)
            {
                direction = new Turn(instruction.turn).ResultingDirection(direction);
                foreach (var step in new Move(direction, instruction.distance).StepsToResulting(position))
                {
                    position = step;
                    if (visited.Contains(position))
                    {
                        return(position.DistanceFrom(initialPosition).ToString());
                    }
                    visited.Add(position);
                }
            }

            return("No luck");
        }
Esempio n. 3
0
        public string Solve(string[] input)
        {
            var         pad          = this.UsedPad;
            List <char> code         = new List <char>();
            char        initialDigit = '5';
            var         key          = pad[initialDigit];

            foreach (string keyInstructions in input)
            {
                foreach (char instruction in keyInstructions)
                {
                    var dir = Dnum <Direction> .Parse(instruction.ToString());

                    key = pad[key.Neighbor(dir)];
                }
                code.Add(key.Key);
            }
            return(string.Join("", code));
        }
Esempio n. 4
0
        public string Solve(string[] input)
        {
            var initialPosition = new Position(0, 0);
            var position        = initialPosition;
            var direction       = Direction.North;
            var moves           =
                input[0].Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries)
                .Select(move => new { turn = Dnum <Turn.Dir> .Parse(move.Substring(0, 1)), distance = ushort.Parse(move.Substring(1)) });

            foreach (var instruction in moves)
            {
                direction = new Turn(instruction.turn).ResultingDirection(direction);
                position  = new Move(direction, instruction.distance).ResultingPosition(position);
            }

            var distanceFromInitial = position.DistanceFrom(initialPosition);

            return(distanceFromInitial.ToString());
        }
Esempio n. 5
0
        public IInstruction Parse(string instruction)
        {
            var match = InstructionRe.Match(instruction);

            Debug.Assert(match.Success);
            var code = Dnum <InstructionCode> .Parse(match.Groups[1].Value);

            switch (code)
            {
            case InstructionCode.inc:
                return(new Inc(Register(match.Groups[2].Value)));

            case InstructionCode.dec:
                return(new Dec(Register(match.Groups[2].Value)));

            case InstructionCode.cpy:
                return(new Cpy(Source(match.Groups[2].Value), Register(match.Groups[3].Value)));

            case InstructionCode.jnz:
            default:
                return(new Jnz(Source(match.Groups[2].Value), int.Parse(match.Groups[3].Value)));
            }
        }
Esempio n. 6
0
 private Rotate.RotateDirection Direction(Match match, int group)
 => Dnum <Rotate.RotateDirection> .Parse(match.Groups[group].Value);