1
resposta

Desafio: Automatizando tarefas

Dados de Entrada Necessários
Para que o algoritmo funcione, ele precisa receber três conjuntos de informações:
Do evento:

Horário de início da transmissão
Horário de encerramento da transmissão
Duração total calculada (em minutos)
Percentual mínimo de presença aceito (ex: 90%)

De cada participante:

Nome completo
E-mail
Horário em que entrou na transmissão
Horário em que saiu (ou lista de entradas/saídas, caso tenha reconectado)
Tempo total acumulado dentro da transmissão (em minutos)

Do sistema de e-mail:

Modelo da mensagem de agradecimento
Remetente configurado
Detalhando Cada Decisão
Por que calcular tempo acumulado e não apenas entrada/saída única?
Porque participantes reais reconectam. Se alguém entrou às 19h, caiu às 19h45, voltou às 19h50 e ficou até o fim, o tempo real de presença precisa somar os dois intervalos. Usar apenas o primeiro login e o último logout daria uma leitura falsa de presença contínua.
Por que gerar o relatório dos dois grupos?
O time de desenolvimento vai precisar dessa informação. Quem ficou fora do agradecimento pode receber uma comunicação diferente — um convite para assistir à gravação, por exemplo. O algoritmo não apenas automatiza o agradecimento, ele também entrega inteligência para ações subsequentes.

Próximo passo concreto
O algoritmo está pronto em termos de lógica. Para transformá-lo em código real, o desenvolvedor vai precisar de acesso à API da plataforma de transmissão — que precisa exportar os logs de presença por participante — e de uma integração com o serviço de e-mail que o time já usa.
Se os dados de presença chegarem em formato de planilha ou CSV, a lógica acima se traduz diretamente em um script simples. Se vier de uma API, a estrutura é a mesma, só muda a fonte dos dados na entrada.
A lógica está definida. O próximo passo é descobrir de onde os dados vêm — e o resto se encaixa.

1 resposta

Olá, Fred. Como vai?

Sua estruturação do desafio está excelente e demonstra uma maturidade técnica notável ao considerar imprevistos reais, como a queda de conexão de um participante. Você aplicou com maestria os pilares da decomposição e do algoritmo, indo além da superfície do problema.

Para agregar valor ao seu raciocínio, gostaria de destacar como a lógica de soma de intervalos que você propôs é fundamental. Em termos de programação, poderíamos pensar nessa estrutura de acumulação de tempo de forma prática:

let tempoMinimoExigido = duracaoTotal * 0.9;
let tempoAcumulado = 0;

// Simulação de soma de intervalos de um participante que caiu e voltou
participante.conexoes.forEach(conexao => {
    tempoAcumulado += (conexao.saida - conexao.entrada);
});

if (tempoAcumulado >= tempoMinimoExigido) {
    enviarEmailAgradecimento(participante.email);
} else {
    enviarLinkGravacao(participante.email);
}

Além disso, deixo duas sugestões para complementar sua solução:

  • Tratamento de Exceções: No pilar de abstração, você poderia prever o que o sistema deve fazer caso um log venha incompleto (ex: um participante que entrou mas o sistema não registrou a saída).
  • Normalização de Dados: Como você mencionou que os dados podem vir de APIs ou CSVs, um passo importante do algoritmo é a limpeza, garantindo que todos os horários estejam no mesmo fuso horário e formato antes de realizar os cálculos.

Sua visão de que o algoritmo não apenas automatiza, mas gera inteligência para ações subsequentes (como o envio da gravação), é o que define um bom uso do pensamento computacional aplicado ao negócio.

Espero que possa ter lhe ajudado!