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); }
/// <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); }
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); }
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;
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)); }