コード例 #1
0
        public static Program Load(Bitmap bitmap, int codelSize = 1)
        {
            Guard.NotNull(bitmap, nameof(bitmap));
            Guard.Positive(codelSize, nameof(codelSize));

            if (bitmap.Width % codelSize != 0 || bitmap.Height % codelSize != 0)
            {
                throw new BadImageFormatException($"The dimensions ({bitmap.Width} x {bitmap.Height}) do not go along with a codel size of {codelSize}.");
            }

            var width  = bitmap.Width / codelSize;
            var height = bitmap.Height / codelSize;
            var canvas = Jagged.Array <Colour>(width, height);

            // Get the codels
            for (var y = 0; y < height; y++)
            {
                for (var x = 0; x < width; x++)
                {
                    var color  = bitmap.GetPixel(x * codelSize, y * codelSize);
                    var colour = Colour(color);

                    if (colour is null)
                    {
                        throw new BadImageFormatException($"The color '#{color.R:X2}{color.G:X2)}{color.B:X2)}' of codel ({x}, {y}) is not allowed.");
                    }
                    canvas[x][y] = colour;
                }
            }

            var program = new Program(canvas);

            return(program);
        }
コード例 #2
0
 /// <summary>Creates a new instance of a Piet <see cref="Program"/>.</summary>
 internal Program(Colour[][] codels)
 {
     _codels = codels;
     Width   = codels.Length;
     Height  = codels[0].Length;
     _blocks = Jagged.Array <ColourBlock>(Width, Height);
 }
コード例 #3
0
        public void Two_dimensional_array()
        {
            var array = Jagged.Array <int>(2, 3);
            var exp   = new int[][]
            {
                new[] { 0, 0, 0 },
                new[] { 0, 0, 0 },
            };

            CollectionAssert.AreEqual(exp, array);
        }
コード例 #4
0
ファイル: Day_21.cs プロジェクト: Corniel/advent-of-code
    public long part_two(string input)
    {
        var  numbers  = input.Int32s().ToArray();
        var  universe = Jagged.Array <ItemCounter <Point> >(2, 11, 11);
        var  player   = 0;
        long active   = 1;
        var  wins     = new long[2];

        foreach (var setup in Setups)
        {
            universe[0][setup.X][setup.Y] = new();
            universe[1][setup.X][setup.Y] = new();
        }
        universe[player][numbers[1]][numbers[3]][default] += 1;
コード例 #5
0
        public static Program Load(Stream stream)
        {
            Guard.NotNull(stream, nameof(stream));

            var lookup = Colour.All.ToArray();

            var reader = new BinaryReader(stream);

            var width  = reader.ReadInt32();
            var height = reader.ReadInt32();

            var codels = Jagged.Array <Colour>(width, height);

            var length = 0;
            var size   = width * height;

            while (length < size)
            {
                ulong big    = reader.ReadUInt32();
                ulong small  = reader.ReadUInt16();
                ulong buffer = big | (small << 32);
                var   codel  = 11;

                while (codel-- > 0)
                {
                    var pos   = length + codel;
                    var x     = pos / height;
                    var y     = pos % height;
                    var index = buffer % 20;

                    if (pos < size)
                    {
                        codels[x][y] = lookup[(int)index];
                    }
                    buffer /= 20;
                }
                length += 11;
            }

            return(new Program(codels));
        }