public void SetValue(string slug) { var rawValue = StringHelpers.Unslugify(slug); var value = Dnum <T> .Parse(rawValue, true); _value = value; }
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"); }
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)); }
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()); }
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))); } }
private Rotate.RotateDirection Direction(Match match, int group) => Dnum <Rotate.RotateDirection> .Parse(match.Groups[group].Value);