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.)的权属部门委托你改进他们土地认领系统的性能。
每当一颗新的小行星可以开采时,投机者们就会被邀请前来认领一块土地。小行星上的土地被划分为四边形地块。投机者通过指定地块的尺寸来认领土地。
你的目标是开发一个高性能系统,来处理过去曾导致网站崩溃的抢地潮。
度量单位是 100 米,但在这些任务中可以忽略。
完成 Plot 结构体的实现,它由 4 个坐标结构体组成(在构造函数中传入)。
实现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))