Voltar para os desafios
Fácil 0 resolvidos 0% de aceitação

Custo das notificações

Envie mensagens por email, SMS e push, com cada canal calculando o próprio custo.

O que você vai aprender

  • Dar a cada canal sua própria regra de custo
  • Arredondar para cima em blocos de caracteres
  • Separar uma mensagem em canal e texto

Problema

Ver original (inglês)

O polimorfismo permite chamar o mesmo método em objetos diferentes e obter um comportamento específico de cada um. Aqui cada canal calcula o custo de uma mensagem do seu jeito.

Cada mensagem é <channel> <text>, onde o texto é tudo o que vem depois do primeiro espaço:

  • email: custa 1.
  • sms: custa 5 por bloco iniciado de 160 caracteres de texto (de 1 a 160 caracteres é um bloco).
  • push: grátis.

Implemente notification_cost(messages).

Entrada

messages: As mensagens a enviar. Textos de SMS têm pelo menos um caractere.

Saída

Retorne o custo total.

Restrições

0 ≤ número de mensagens ≤ 10,000

Os textos têm de 1 a 2,000 caracteres

Exemplos

Exemplo 1
Entrada:
messages = ["email Welcome!", "sms Your code is 1234", "push New follower"]

Saída esperada:
expected = 6
Entrada:
std::vector<std::string> messages = {"email Welcome!", "sms Your code is 1234", "push New follower"};

Saída esperada:
long long expected = 6;
Entrada:
string[] messages = new string[] {"email Welcome!", "sms Your code is 1234", "push New follower"};

Saída esperada:
long expected = 6;

Explicação

O email custa 1, o SMS curto usa um bloco (5) e o push é grátis: 6.

Exemplo 2
Entrada:
messages = ["sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]

Saída esperada:
expected = 10
Entrada:
std::vector<std::string> messages = {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};

Saída esperada:
long long expected = 10;
Entrada:
string[] messages = new string[] {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};

Saída esperada:
long expected = 10;

Explicação

161 caracteres precisam de dois blocos de 160 caracteres: 2 × 5 = 10.

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Divida cada mensagem uma vez no primeiro espaço para obter canal e texto.

Dica 2

Para SMS, conte os blocos com divisão arredondada para cima: (length + 159) / 160.

Dica 3

Mensagens push são grátis e somam 0.

Complexidade esperada

tempo O(comprimento total), espaço extra O(1)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.