Prontos, preparados... já!

Você precisa construir uma arquitetura rudimentar que simule um sistema de distribuição de pontos de XP entre dois estudantes que resolvem uma série de desafios fornecidos no Edabit.

Etapa 1: Construa uma classe Challenge

Os parâmetros do construtor são id e level. O id será o identificador numérico do desafio, e level será um código composto por duas letras maiúsculas:

  • "VE" = "Very Easy"
  • "EA" = "Easy"
  • "ME" = "Medium"
  • "HA" = "Hard"
  • "VH" = "Very Hard"
  • "EX" = "Expert"

Etapa 2: Construa um método para a classe Challenge

O nome do método dentro da classe Challenge é points().

O método deve retornar a quantidade de pontos obtidos ao resolver um desafio, com base no nível do desafio:

  • VE = 5 XP
  • EA = 10 XP
  • ME= 20 XP
  • HA= 40 XP
  • VH = 80 XP
  • EX = 120 XP

Etapa 3: Construa uma classe User

Os parâmetros do construtor são name, xp e log. name será, simplesmente, o nome de usuário. xp é o acumulador que armazena os pontos de XP obtidos. log é uma espécie de diário do usuário: é um array que armazenará o id dos desafios resolvidos pelo usuário.

Etapa 4: Construa um método para a classe User

O nome do método a ser implementado dentro da classe User é newSolvedChallenge() e ele aceitará como parâmetro um objeto da classe Challenge.

O método deve incrementar o xp do usuário e armazenar o id do desafio no array log.

Etapa 5: Declare as instâncias necessárias para os testes

Agora que tudo está pronto, você precisa configurar o exercício e declarar as instâncias das classes criadas para que os testes possam ser realizados. Comece pelas declarações dos usuários; são dois:

  • user1name = "Madam" | xp = 0 | log = []
  • user2name = "Steve" | xp = 0 | log = []

Agora, declare os desafios; são seis:

  • challenge1id = 1 | level = "VE";
  • challenge2id = 2 | level = "EA";
  • challenge3id = 3 | level = "ME";
  • challenge4id = 4 | level = "HA";
  • challenge5id = 5 | level = "VH";
  • challenge6id = 6 | level = "EX";

Por fim, você precisa declarar quais são os desafios resolvidos pelos usuários, usando o setter implementado anteriormente:

  • Madam resolve os seguintes desafios, nesta ordem:

    • challenge1 , challenge4 , challenge6
  • Steve resolve os seguintes desafios, nesta ordem:

    • challenge5 , challenge3, challenge2

Etapa 6: Mecânica dos testes

Os testes verificarão se, depois de chamar as propriedades e os métodos da instância criada por você, o resultado esperado é retornado. Portanto, você não precisa retornar um resultado, apenas garantir que tudo esteja configurado de acordo com as instruções.

Exemplos

user1.name ➞ "Madam"

user2.xp ➞ 110
// Steve has solved challenges 5, 3 and 2 (80 + 20 + 10 points)

user1.log ➞ [1, 4, 6]
// Remember to respect the order given in Instructions for to store data into the log

challenge4.level ➞ "HA"

challenge3.id ➞ 3

challenge1.points ➞ 5

Observações

  • Ao implementar métodos, você pode usar funções normais ou uma combinação de set/get. Consulte os Resources para ter uma ideia geral sobre a diferença entre esses dois procedimentos e, se quiser deixar sua opinião, use a aba Comments.
  • Se quiser se aprofundar, veja um ponto de vista negativo sobre setters & getters.