using System;
namespace Project
{
class Program
{
public static void Main()
{
World world = new World(10, 10);
for (int y = 0; y < 10; y++)
{
for (int x = 0; x < 10; x++)
Console.Write("{0} ", world.Get(x, y));
Console.WriteLine();
}
Console.ReadKey();
}
}
class World
{
private int[,] world;
public int Width { get; private set; }
public int Height { get; private set; }
public World(int width, int height, int defaultValue = 0)
{
world = new int[height, width];
Width = width;
Height = height;
for (int y = 0; y < height; y++)
for (int x = 0; x < width; x++)
Set(x, y, defaultValue);
}
public bool Check(int x, int y)
{
return x >= 0 && x < Width
&& y >= 0 && y < Height;
}
public int Get(int x, int y)
{
if (!Check(x, y))
throw new Exception($"Out of bounds (x: {x}, y: {y})");
return world[y, x];
}
public int Set(int x, int y, int value)
{
if (!Check(x, y))
throw new Exception($"Out of bounds (x: {x}, y: {y})");
return world[y, x];
}
}
}
dXNpbmcgU3lzdGVtOwoKbmFtZXNwYWNlIFByb2plY3QKewogICAgY2xhc3MgUHJvZ3JhbQogICAgewogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIFdvcmxkIHdvcmxkID0gbmV3IFdvcmxkKDEwLCAxMCk7CgogICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IDEwOyB5KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgMTA7IHgrKykKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlKCJ7MH0gIiwgd29ybGQuR2V0KHgsIHkpKTsKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQ29uc29sZS5SZWFkS2V5KCk7CiAgICAgICAgfQogICAgfQoKICAgIGNsYXNzIFdvcmxkCiAgICB7CiAgICAgICAgcHJpdmF0ZSBpbnRbLF0gd29ybGQ7CiAgICAgICAgcHVibGljIGludCBXaWR0aCAgeyBnZXQ7IHByaXZhdGUgc2V0OyB9CiAgICAgICAgcHVibGljIGludCBIZWlnaHQgeyBnZXQ7IHByaXZhdGUgc2V0OyB9CgogICAgICAgIHB1YmxpYyBXb3JsZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZWZhdWx0VmFsdWUgPSAwKQogICAgICAgIHsKICAgICAgICAgICAgd29ybGQgPSBuZXcgaW50W2hlaWdodCwgd2lkdGhdOwogICAgICAgICAgICBXaWR0aCA9IHdpZHRoOwogICAgICAgICAgICBIZWlnaHQgPSBoZWlnaHQ7CgogICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICAgICAgICAgICAgIFNldCh4LCB5LCBkZWZhdWx0VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGJvb2wgQ2hlY2soaW50IHgsIGludCB5KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHggPj0gMCAmJiB4IDwgV2lkdGgKICAgICAgICAgICAgICAgICYmIHkgPj0gMCAmJiB5IDwgSGVpZ2h0OwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGludCBHZXQoaW50IHgsIGludCB5KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCFDaGVjayh4LCB5KSkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJCJPdXQgb2YgYm91bmRzICh4OiB7eH0sIHk6IHt5fSkiKTsKCiAgICAgICAgICAgIHJldHVybiB3b3JsZFt5LCB4XTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBpbnQgU2V0KGludCB4LCBpbnQgeSwgaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCFDaGVjayh4LCB5KSkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJCJPdXQgb2YgYm91bmRzICh4OiB7eH0sIHk6IHt5fSkiKTsKCiAgICAgICAgICAgIHJldHVybiB3b3JsZFt5LCB4XTsKICAgICAgICB9CiAgICB9Cn0=