Track
/
C#
C#
/
Esercizi
/
Corsa alla terra nello spazio
Corsa alla terra nello spazio

Corsa alla terra nello spazio

Esercizio di apprendimento

Introduzione

Struct

In C#, gli struct sono strettamente legati alle class. Hanno stato e comportamento. Hanno costruttori che accettano argomenti. Le istanze possono essere assegnate, confrontate per uguaglianza e memorizzate in collezioni.

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"

Istruzioni

Il dipartimento delle rivendicazioni della Isaacs Asteroid Exploration Co. ti ha affidato il compito di migliorare le prestazioni del loro sistema di rivendicazione dei terreni.

Ogni volta che un nuovo asteroide è pronto per lo sfruttamento, gli speculatori sono invitati a rivendicare il proprio appezzamento di terreno. Il terreno dell'asteroide è diviso in appezzamenti a quattro lati. Gli speculatori rivendicano il terreno specificandone le dimensioni.

Il tuo obiettivo è sviluppare un sistema performante per gestire la corsa alla terra che in passato ha fatto crashare il sito web.

L'unità di misura è 100 metri, ma può essere ignorata in questi esercizi.

1. Definire un Plot

Completa l'implementazione della struct Plot, che comprende 4 struct Coord (che accetta nel suo costruttore).

2. Gli speculatori possono rivendicare specificando un appezzamento identificato dalle sue dimensioni

Implementa il metodo ClaimsHandler.StakeClaim() per consentire la registrazione di una rivendicazione.

Implementa il metodo ClaimsHandler.IsClaimStaked() per determinare se una rivendicazione è stata registrata.

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. Controllare se la rivendicazione attuale è la stessa dell'ultima

Implementa il metodo ClaimsHandler.IsLastClaim() per confrontare la rivendicazione attuale con quella precedente.

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. Trovare l'appezzamento rivendicato con il lato più lungo a fini di ricerca

Implementa il metodo ClaimsHandler.GetClaimWithLongestSide() per esaminare tutte le rivendicazioni registrate e restituire l'appezzamento con il lato più lungo. È garantito che i dati delle coordinate di un appezzamento formino una forma rettangolare contigua.

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))
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C# Exercism

Vuoi iniziare Corsa alla terra nello spazio?

Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.