學習軌道
/
C#
C#
/
練習
/
太空圈地
太空圈地

太空圈地

學習練習

簡介

結構

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 公尺,但在這些任務中可以忽略。

1. 定義 Plot

完成Plot結構的實作,這個結構由 4 個 coord 結構組成(建構函式會接收這些結構)。

2. 投機客可以指定地塊的尺寸來提出申請

實作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

3. 檢查目前的申請是否與上一筆相同。

實作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

4. 為了研究目的,找出邊長最長的申請地塊

實作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))
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 太空圈地 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。