Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        public static CodelChooser Switch(this CodelChooser cc, long times)
        {
            var value = ((long)cc + times) % 2;

            return(value == 0 ? CodelChooser.left : CodelChooser.right);
        }
Exemplo n.º 4
0
        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;
        }