using System;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
Dictionary<Coord, string> dict = new Dictionary<Coord, string>();
dict[new Coord(4, 5)] = "Test";
Console.WriteLine(dict[new Coord(4, 5)]);
dict[new Coord(4, 5)] = "Test2";
Console.WriteLine(dict[new Coord(4, 5)]);
}
}
public struct Coord : IEquatable<Coord>
{
public int X { get; private set; }
public int Y { get; private set; }
public Coord(int x,int y) : this(){ X = x;
Y = y;}
//Overloaded operator functuions below
//So I can easily multiply Coords by other Coords and ints and also add Coords together
public static Coord operator *(Coord left, int right)
{
return new Coord(left.X * right, left.Y * right);
}
public static Coord operator *(Coord left, Coord right)
{
return new Coord(left.X * right.X, left.Y * right.Y);
}
public static Coord operator +(Coord left, Coord right)
{
return new Coord(left.X + right.X, left.Y + right.Y);
}
public static Coord operator -(Coord left, Coord right)
{
return new Coord(left.X - right.X, left.Y - right.Y);
}
public override int GetHashCode()
{
int hash = 17;
hash = hash * 31 + X;
hash = hash * 31 + Y;
return hash;
}
public override bool Equals(object other)
{
return other is Coord ? Equals((Coord)other) : false;
}
public bool Equals(Coord other)
{
return X == other.X &&
Y == other.Y;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKIApwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAgICAgRGljdGlvbmFyeTxDb29yZCwgc3RyaW5nPiBkaWN0ID0gbmV3IERpY3Rpb25hcnk8Q29vcmQsIHN0cmluZz4oKTsKICAgICAgICBkaWN0W25ldyBDb29yZCg0LCA1KV0gPSAiVGVzdCI7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoZGljdFtuZXcgQ29vcmQoNCwgNSldKTsKICAgICAgICBkaWN0W25ldyBDb29yZCg0LCA1KV0gPSAiVGVzdDIiOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKGRpY3RbbmV3IENvb3JkKDQsIDUpXSk7CiAgICB9Cn0KIApwdWJsaWMgc3RydWN0IENvb3JkIDogSUVxdWF0YWJsZTxDb29yZD4KewogICAgcHVibGljIGludCBYIHsgZ2V0OyBwcml2YXRlIHNldDsgfQogICAgcHVibGljIGludCBZIHsgZ2V0OyBwcml2YXRlIHNldDsgfQogCiAgICBwdWJsaWMgQ29vcmQoaW50IHgsaW50IHkpIDogdGhpcygpeyBYID0geDsKICAgICAgICBZID0geTt9CiAKICAgIC8vT3ZlcmxvYWRlZCBvcGVyYXRvciBmdW5jdHVpb25zIGJlbG93CiAgICAvL1NvIEkgY2FuIGVhc2lseSBtdWx0aXBseSBDb29yZHMgYnkgb3RoZXIgQ29vcmRzIGFuZCBpbnRzIGFuZCBhbHNvIGFkZCBDb29yZHMgdG9nZXRoZXIKICAgIHB1YmxpYyBzdGF0aWMgQ29vcmQgb3BlcmF0b3IgKihDb29yZCBsZWZ0LCBpbnQgcmlnaHQpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBDb29yZChsZWZ0LlggKiByaWdodCwgbGVmdC5ZICogcmlnaHQpOwogICAgfQogCiAgICBwdWJsaWMgc3RhdGljIENvb3JkIG9wZXJhdG9yICooQ29vcmQgbGVmdCwgQ29vcmQgcmlnaHQpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBDb29yZChsZWZ0LlggKiByaWdodC5YLCBsZWZ0LlkgKiByaWdodC5ZKTsKICAgIH0KIAogICAgcHVibGljIHN0YXRpYyBDb29yZCBvcGVyYXRvciArKENvb3JkIGxlZnQsIENvb3JkIHJpZ2h0KQogICAgewogICAgICAgIHJldHVybiBuZXcgQ29vcmQobGVmdC5YICsgcmlnaHQuWCwgbGVmdC5ZICsgcmlnaHQuWSk7CiAgICB9CiAKICAgIHB1YmxpYyBzdGF0aWMgQ29vcmQgb3BlcmF0b3IgLShDb29yZCBsZWZ0LCBDb29yZCByaWdodCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IENvb3JkKGxlZnQuWCAtIHJpZ2h0LlgsIGxlZnQuWSAtIHJpZ2h0LlkpOwogICAgfQogCiAKICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKQogICAgewogICAgICAgIGludCBoYXNoID0gMTc7CiAgICAgICAgaGFzaCA9IGhhc2ggKiAzMSArIFg7CiAgICAgICAgaGFzaCA9IGhhc2ggKiAzMSArIFk7CiAgICAgICAgcmV0dXJuIGhhc2g7CiAgICB9CiAKICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qgb3RoZXIpCiAgICB7CiAgICAgICAgcmV0dXJuIG90aGVyIGlzIENvb3JkID8gRXF1YWxzKChDb29yZClvdGhlcikgOiBmYWxzZTsKICAgIH0KIAogICAgcHVibGljIGJvb2wgRXF1YWxzKENvb3JkIG90aGVyKQogICAgewogICAgICAgIHJldHVybiBYID09IG90aGVyLlggJiYKICAgICAgICAgICAgICAgWSA9PSBvdGhlci5ZOwogICAgfQp9