C#のstructはclassとよく似ています。どちらも状態と振る舞いを持ちます。引数を受け取るコンストラクターがあり、インスタンスは代入したり、同じかどうかを比較したり、コレクションに格納したりできます。
enum Unit
{
Kg,
Lb
}
struct Weight
{
private double count;
private Unit unit;
public Weight(double count, Unit unit)
{
this.count = count;
this.unit = unit;
}
public override string ToString()
{
return count.ToString() + unit.ToString();
}
}
new Weight(77.5, Unit.Kg).ToString();
// => "77.6Kg"
Isaacs Asteroid Exploration Co.の権利主張部門から、土地の権利主張システムのパフォーマンスを改善するよう任されています。
新しい小惑星が採掘可能になるたびに、投機家たちは土地の区画に対する権利を主張するよう招かれます。小惑星の土地は4辺形の区画に分けられます。投機家は寸法を指定して土地の権利を主張します。
目標は、過去にウェブサイトをクラッシュさせた土地の争奪戦に対応する、高性能なシステムを開発することです。
測定単位は100メートルですが、これらのタスクでは無視できます。
Plotを定義しますPlot構造体の実装を完了してください。Plot構造体は4つのCoord構造体で構成され、コンストラクターでそれらを受け取ります。
権利主張を登録できるように、ClaimsHandler.StakeClaim()メソッドを実装します。
権利主張がすでになされているかどうかを判定する、ClaimsHandler.IsClaimStaked()メソッドを実装します。
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.IsClaimStaked(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
// => true
現在の権利主張を前回のものと比較する、ClaimsHandler.IsLastClaim()メソッドを実装します。
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.IsLastClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
// => true
登録されたすべての権利主張を調べ、最も長い辺を持つ区画を返す、ClaimsHandler.GetClaimWithLongestSide()メソッドを実装します。区画の座標データは、連続した長方形の形状であることが保証されています。
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.StakeClaim(new Plot(new Coord(10,1), new Coord(20,1), new Coord(10,2), new Coord(20,2)));
ch.GetClaimWithLongestSide();
// => new Plot(new Coord(1,1), new Coord(20,1), new Coord(1,2), new Coord(2,2))