Trilhas
/
C#
C#
/
Exercícios
/
Disputa de terras no espaço
Disputa de terras no espaço

Disputa de terras no espaço

Exercício de aprendizagem

Introdução

Structs

Os structs do C# são bem parecidos com as classes. Têm estado e comportamento. Têm construtores que recebem argumentos, e as instâncias podem ser atribuídas, comparadas quanto à igualdade e armazenadas em coleções.

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"

Instruções

O departamento de reivindicações da Isaacs Asteroid Exploration Co. encarregou você de melhorar o desempenho do sistema de reivindicação de terras deles.

Toda vez que um novo asteroide fica pronto para exploração, especuladores são convidados a reivindicar seu lote de terra. A terra do asteroide é dividida em lotes de 4 lados. Os especuladores reivindicam o lote especificando suas dimensões.

Seu objetivo é desenvolver um sistema eficiente para lidar com a corrida por terras que, no passado, já derrubou o site.

A unidade de medida é 100 metros, mas pode ser ignorada nestas tarefas.

1. Defina um Plot

Complete a implementação da struct Plot, que é composta por 4 structs Coord (que ela recebe em seu construtor).

2. Especuladores podem registrar sua reivindicação especificando um lote identificado por suas dimensões

Implemente o método ClaimsHandler.StakeClaim() para permitir que uma reivindicação seja registrada.

Implemente o método ClaimsHandler.IsClaimStaked() para determinar se uma reivindicação já foi registrada.

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. Verifique se a reivindicação atual é a mesma que a anterior.

Implemente o método ClaimsHandler.IsLastClaim() para comparar a reivindicação atual com a anterior.

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. Encontre o lote reivindicado que tem o lado mais longo para fins de pesquisa

Implemente o método ClaimsHandler.GetClaimWithLongestSide() para examinar todas as reivindicações registradas e retornar o lote com o lado mais longo. Os dados de coordenadas de um lote têm a garantia de formar uma forma retangular contígua.

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))
Editar via GitHub O link abre em uma nova janela ou aba
C# Exercism

Tudo pronto para começar Disputa de terras no espaço?

Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.