Percursos
/
C#
C#
/
Exercícios
/
Apropriação de terras no espaço
Apropriação de terras no espaço

Apropriação de terras no espaço

Exercício de aprendizagem

Introdução

Estruturas

As structs do C# estão intimamente relacionadas com as classes. Têm estado e comportamento. Têm construtores que recebem argumentos, e as instâncias podem ser atribuídas, testadas quanto à igualdade e guardadas 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. pediu-te para melhorares o desempenho do sistema de reivindicação de terrenos deles.

Sempre que um novo asteroide fica pronto para exploração, os especuladores são convidados a reivindicar uma parcela de terreno. O terreno do asteroide está dividido em parcelas de 4 lados. Os especuladores reivindicam o terreno indicando as suas dimensões.

O teu objetivo é desenvolver um sistema eficiente para lidar com a corrida ao terreno que, no passado, fez o site ir abaixo.

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

1. Define um Plot

Completa a implementação da estrutura Plot, que é composta por 4 estruturas de coordenadas (que recebe no seu construtor).

2. Os especuladores podem reivindicar o seu terreno indicando uma parcela identificada pelas suas dimensões

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

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

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. Verifica se a reivindicação atual é igual à última.

Implementa 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. Encontra a parcela reivindicada com o lado mais longo, para fins de investigação

Implementa o método ClaimsHandler.GetClaimWithLongestSide() para examinar todas as reivindicações registadas e devolver a parcela com o lado mais longo. Os dados de coordenadas de uma parcela estão garantidamente numa 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 A ligação abre numa nova janela ou separador
C# Exercism

Estás pronto para começar Apropriação de terras no espaço?

Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.