public void From_complex_form(int x, int y, DirectionPointer dp, CodelChooser cc) { var expected = new Codel(x, y); var program = Runner.Load("Snippets.edge.png"); var block = program.SelectBlock(new Codel(2, 2)); var pointer = Pointer.Initial.Rotate((int)dp).Switch((int)cc); var actual = block.Edge(pointer); Assert.AreEqual(expected, actual); }
public void From_1x1_form(DirectionPointer dp, CodelChooser cc) { var expected = new Codel(9, 0); var program = Runner.Load("fibonacci_numbers.gif"); var block = program.SelectBlock(expected); var pointer = Pointer.Initial.Rotate((int)dp).Switch((int)cc); var actual = block.Edge(pointer); Assert.AreEqual(expected, actual); }
public static CodelChooser Switch(this CodelChooser cc, long times) { var value = ((long)cc + times) % 2; return(value == 0 ? CodelChooser.left : CodelChooser.right); }
public Codel FindFurthestCodel(DirectionPointer dp, CodelChooser cc) { int xFactor = 0, yFactor = 0; switch (dp) { case DirectionPointer.Right: xFactor = 1; break; case DirectionPointer.Down: yFactor = 1; break; case DirectionPointer.Left: xFactor = -1; break; case DirectionPointer.Up: yFactor = -1; break; } var edge = Codels.GroupBy(x => x.Position.x * xFactor + x.Position.y * yFactor).OrderBy(x => x.Key).Last(); xFactor = 0; yFactor = 0; switch (dp) { case DirectionPointer.Right: switch (cc) { case CodelChooser.Left: yFactor = -1; break; case CodelChooser.Right: yFactor = 1; break; } break; case DirectionPointer.Down: switch (cc) { case CodelChooser.Left: xFactor = 1; break; case CodelChooser.Right: xFactor = -1; break; } break; case DirectionPointer.Left: switch (cc) { case CodelChooser.Left: yFactor = 1; break; case CodelChooser.Right: yFactor = -1; break; } break; case DirectionPointer.Up: switch (cc) { case CodelChooser.Left: xFactor = -1; break; case CodelChooser.Right: xFactor = 1; break; } break; } var codel = edge.OrderBy(x => x.Position.x * xFactor + x.Position.y * yFactor).Last(); return codel; }