Example #1
0
            public Pentomino Variant(string operation, Pentomino p)
            {
                switch (operation)
                {
                case "r":
                    return(Rotate(p));

                case "rr":
                    return(Rotate(Rotate(p)));

                case "rrr":
                    return(Rotate(Rotate(Rotate(p))));

                case "m":
                    return(Mirror(p));

                case "mr":
                    return(Mirror(Rotate(p)));

                case "mrr":
                    return(Mirror(Rotate(Rotate(p))));

                case "mrrr":
                    return(Mirror(Rotate(Rotate(Rotate(p)))));
                }
                throw new Exception("Invalid operation");
            }
Example #2
0
    private static void pentomino_matrix_test()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    PENTOMINO_MATRIX_TEST tests PENTOMINO_MATRIX.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    22 April 2018
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int k;

        int[] p   = null;
        int   p_m = 0;
        int   p_n = 0;

        string[] pentominoes =
        { "F", "I", "L", "N", "P", "T", "U", "V", "W", "X", "Y", "Z" };

        Console.WriteLine("");
        Console.WriteLine("PENTOMINO_MATRIX_TEST");
        Console.WriteLine("  PENTOMINO_MATRIX returns a 0/1 matrix representing a pentomino.");

        for (k = 0; k < 12; k++)
        {
            Pentomino.pentomino_matrix(pentominoes[k], ref p_m, ref p_n, ref p);
            Console.WriteLine("");
            Console.WriteLine("  " + pentominoes[k] + " pentomino (" + p_m + "," + p_n + "):");
            Console.WriteLine("");
            int i;
            for (i = 0; i < p_m; i++)
            {
                string cout = "    ";
                int    j;
                for (j = 0; j < p_n; j++)
                {
                    cout += p[i * p_n + j];
                }

                Console.WriteLine(cout);
            }
        }
    }
Example #3
0
            Pentomino Mirror(Pentomino p)
            {
                Pentomino n = new Pentomino(p.name, p.variant + 4, p.operations);

                n.content = new List <Point>();
                Rectangle enclosure = p.Enclosure();

                foreach (Point element in p.content)
                {
                    Point newElement = new Point(enclosure.Width - 1 - element.X, element.Y);
                    n.content.Add(newElement);
                }
                return(n);
            }
Example #4
0
            Pentomino Rotate(Pentomino p)
            {
                Pentomino n = new Pentomino(p.name, p.variant + 1, p.operations);

                n.content = new List <Point>();
                Rectangle enclosure = p.Enclosure();

                foreach (Point element in p.content)
                {
                    Point newElement = new Point(enclosure.Height - 1 - element.Y, element.X);
                    n.content.Add(newElement);
                }
                return(n);
            }
Example #5
0
    private static void pentomino_plot_test()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    PENTOMINO_PLOT_TEST tests PENTOMINO_PLOT.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    22 April 2018
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int k;

        int[] p   = null;
        int   p_m = 0;
        int   p_n = 0;

        string[] pentominoes =
        { "F", "I", "L", "N", "P", "T", "U", "V", "W", "X", "Y", "Z" };

        Console.WriteLine("");
        Console.WriteLine("PENTOMINO_PLOT_TEST");
        Console.WriteLine("  PENTOMINO_PLOT plots a pentomino.");

        for (k = 0; k < 12; k++)
        {
            Pentomino.pentomino_matrix(pentominoes[k], ref p_m, ref p_n, ref p);
            string label = pentominoes[k];
            Pentomino.pentomino_plot(p_m, p_n, p, label);
        }
    }
        public void SpawnPentomino()
        {
            SpawnTemplate template = new Pentomino(new GameCell(0, 0));

            Assert.AreEqual(5, template.LivingCells.Count);
        }
Example #7
0
        void BasicPentominoes()
        {
            List <string> operations;
            List <Point>  content;
            Pentomino     p;


            //*********************
            // xxxxx
            //*********************

            operations = new List <string>();
            operations.Add("r");

            content = new List <Point>();
            content.Add(new Point(0, 0));
            content.Add(new Point(1, 0));
            content.Add(new Point(2, 0));
            content.Add(new Point(3, 0));
            content.Add(new Point(4, 0));

            p = new Pentomino(0, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            // x
            // xxxx
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");
            operations.Add("m");
            operations.Add("mr");
            operations.Add("mrr");
            operations.Add("mrrr");

            content = new List <Point>();
            content.Add(new Point(0, 0));
            content.Add(new Point(0, 1));
            content.Add(new Point(1, 0));
            content.Add(new Point(2, 0));
            content.Add(new Point(3, 0));

            p = new Pentomino(1, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            //  x
            // xxxx
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");
            operations.Add("m");
            operations.Add("mr");
            operations.Add("mrr");
            operations.Add("mrrr");

            content = new List <Point>();
            content.Add(new Point(0, 0));
            content.Add(new Point(1, 0));
            content.Add(new Point(1, 1));
            content.Add(new Point(2, 0));
            content.Add(new Point(3, 0));

            p = new Pentomino(2, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            //   xx
            // xxx
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");
            operations.Add("m");
            operations.Add("mr");
            operations.Add("mrr");
            operations.Add("mrrr");

            content = new List <Point>();
            content.Add(new Point(0, 0));
            content.Add(new Point(1, 0));
            content.Add(new Point(2, 0));
            content.Add(new Point(2, 1));
            content.Add(new Point(3, 1));

            p = new Pentomino(3, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            // x
            // xxx
            // x
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");

            content = new List <Point>();
            content.Add(new Point(0, 0));
            content.Add(new Point(0, 1));
            content.Add(new Point(0, 2));
            content.Add(new Point(1, 1));
            content.Add(new Point(2, 1));

            p = new Pentomino(4, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            //  x
            // xxx
            //  x
            //*********************

            operations = new List <string>();

            content = new List <Point>();
            content.Add(new Point(0, 1));
            content.Add(new Point(1, 0));
            content.Add(new Point(1, 1));
            content.Add(new Point(1, 2));
            content.Add(new Point(2, 1));

            p = new Pentomino(5, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            // xxxx
            // x
            // x
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");

            content = new List <Point>();
            content.Add(new Point(0, 0));
            content.Add(new Point(0, 1));
            content.Add(new Point(0, 2));
            content.Add(new Point(1, 2));
            content.Add(new Point(2, 2));

            p = new Pentomino(6, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            // xx
            //  xx
            //   x
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");

            content = new List <Point>();
            content.Add(new Point(0, 2));
            content.Add(new Point(1, 1));
            content.Add(new Point(1, 2));
            content.Add(new Point(2, 0));
            content.Add(new Point(2, 1));

            p = new Pentomino(7, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            // x
            // xxx
            //  x
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");
            operations.Add("m");
            operations.Add("mr");
            operations.Add("mrr");
            operations.Add("mrrr");

            content = new List <Point>();
            content.Add(new Point(0, 1));
            content.Add(new Point(0, 2));
            content.Add(new Point(1, 0));
            content.Add(new Point(1, 1));
            content.Add(new Point(2, 1));

            p = new Pentomino(8, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            // x
            // xxx
            //   x
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("m");
            operations.Add("mr");

            content = new List <Point>();
            content.Add(new Point(0, 1));
            content.Add(new Point(0, 2));
            content.Add(new Point(1, 1));
            content.Add(new Point(2, 0));
            content.Add(new Point(2, 1));

            p = new Pentomino(9, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            // x x
            // xxx
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");

            content = new List <Point>();
            content.Add(new Point(0, 0));
            content.Add(new Point(0, 1));
            content.Add(new Point(1, 0));
            content.Add(new Point(2, 0));
            content.Add(new Point(2, 1));

            p = new Pentomino(10, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }

            //*********************
            // xx
            // xxx
            //*********************

            operations = new List <string>();
            operations.Add("r");
            operations.Add("rr");
            operations.Add("rrr");
            operations.Add("m");
            operations.Add("mr");
            operations.Add("mrr");
            operations.Add("mrrr");

            content = new List <Point>();
            content.Add(new Point(0, 0));
            content.Add(new Point(0, 1));
            content.Add(new Point(1, 0));
            content.Add(new Point(1, 1));
            content.Add(new Point(2, 0));

            p = new Pentomino(11, 0, operations, content);
            pentominoes.Add(p);

            foreach (string operation in operations)
            {
                pentominoes.Add(p.Variant(operation, p));
            }
        }
Example #8
0
 public int Index(Pentomino p)
 {
     return(12 * p.variant + p.name);
 }
Example #9
0
 public Position(Point position, Pentomino p)
 {
     this.p        = p;
     this.position = position;
 }