Trilhas
/
C#
C#
/
Exercícios
/
Relatórios de partidas de futebol
Relatórios de partidas de futebol

Relatórios de partidas de futebol

Exercício de aprendizagem

Introdução

Instruções switch

A Wikipédia descreve uma instrução switch como "um tipo de mecanismo de controle de seleção usado para permitir que o valor de uma variável ou expressão altere o fluxo de controle do programa".

O mecanismo envolve as seguintes palavras-chave: switch, case, break e default.

Na forma mais simples, elas testam uma expressão primitiva ou uma string e tomam uma decisão com base no valor dela. Por exemplo:

string direction = GetDirection();
switch (direction)
{
    case "left":
        GoLeft();
        break;
    case "right":
        GoRight();
        break;
    default:
        MarkTime();
        break;
}

Na forma mais sofisticada, elas introduzem downcast case <Type> <variable>: e guardas (when).

Animal animal = GetAnimal();

switch (animal)
{
    case Dog canine:
    case Coyote canine:
        canine.Bark();
        break;
    case Cat cat when cat.HasOnly8Lives():
        cat.IsCareful();
        cat.Meow();
        break;
    case Cat cat:
        cat.Meow();
        break;
}

Instruções

Você está desenvolvendo um sistema para ajudar a equipe do site de um clube de futebol a reportar as partidas. Esse sistema é capaz de analisar diferentes aspectos da partida, dentro e fora do campo, e convertê-los em um fluxo de eventos.

1. Gerar as descrições dos jogadores com base no número da camisa

O time só joga no esquema 4-3-3 e nunca concordou com a mudança de 1965 nas regras que permitiu substituições, muito menos elencos maiores.

As descrições dos jogadores são as seguintes:

1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"

Implemente o método estático PlayAnalyzer.AnalyzeOnField() para retornar a descrição de um jogador com base no número da camisa.

PlayAnalyzer.AnalyzeOnField(10);
// => "striker"

2. Lidar com números de camisa desconhecidos

Modifique o método PlayAnalyzer.AnalyzeOnField() para retornar UNKNOWN quando for processado um número de camisa fora do intervalo de 1 a 11.

3. Ampliar a cobertura para incluir atividades fora do campo

Implemente o método PlayAnalyzer.AnalyzeOffField() para retornar descrições de atividades e personagens ao redor do campo de jogo. Esse método recebe diferentes tipos de dados que devem ser analisados e convertidos em um texto adequado para ajudar os jornalistas.

Para começar, vamos abordar os dados sobre o estádio:

  • O número atual de torcedores no estádio (qualquer int)
  • Anúncios feitos pelo sistema de som do estádio (qualquer string)

Tipos de dados desconhecidos não devem ser processados, então, se o método receber um dado de tipo diferente, deve retornar uma string vazia.

PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."

PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"

PlayAnalyzer.AnalyzeOffField(0.5);
// => ""

4. Reportar os incidentes durante a partida

Modifique o método PlayAnalyzer.AnalyzeOffField() para retornar descrições dos incidentes que acontecem durante a partida.

Os incidentes podem ser qualquer subclasse do tipo Incident e contêm uma descrição do incidente. As lesões são um tipo especial de incidente, porque fazem a partida ser interrompida, então devem ser tratadas de forma diferente.

PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."

PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."

5. Reportar os técnicos dos clubes

Modifique o método PlayAnalyzer.AnalyzeOffField() para mencionar os técnicos dos clubes presentes na partida.

Os técnicos são instâncias do tipo Manager e têm um nome e o nome do clube que dirigem. O clube do técnico pode ser desconhecido, e nesse caso ele será definido como null. Se o clube de um técnico não for conhecido, ele não deve fazer parte da descrição.

PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"

PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"
Editar via GitHub O link abre em uma nova janela ou aba
C# Exercism

Tudo pronto para começar Relatórios de partidas de futebol?

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