Problema
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
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.
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.