Um bot para o Telegram que gera automaticamente todas as grades horárias válidas, resolvendo conflitos de agendamento de intervalos com uma abordagem de Algoritmo Guloso.
O Academic Schedule Bot é um chatbot para a plataforma Telegram que resolve o clássico problema de Maximização de Agendamento de Intervalos no contexto acadêmico. A partir de um conjunto de matérias e seus respectivos horários, o bot aplica uma estratégia gulosa para gerar todas as combinações de grade sem conflitos — ajudando estudantes a planejar o semestre de forma prática e eficiente.
Este projeto foi desenvolvido como parte da disciplina de Projeto de Algoritmos na Universidade de Brasília (UnB), com foco em algoritmos gulosos e escalonamento com restrições.
- Geração de todas as grades horárias válidas e sem conflitos
- Algoritmo guloso para escalonamento eficiente de intervalos
- Interface interativa via Telegram
- Armazenamento de matérias e horários em PostgreSQL
- Validação e detecção de conflitos em tempo real
| Camada | Tecnologia |
|---|---|
| Linguagem | Kotlin |
| Build | Gradle (Kotlin DSL) |
| Banco de Dados | PostgreSQL |
| Plataforma do Bot | Telegram Bot API |
| Algoritmo | Greedy / Interval Scheduling |
- JDK 17+
- Gradle
- PostgreSQL
- Token de Bot do Telegram (via @BotFather)
1. Clone o repositório
git clone https://github.com/i-JSS/Academic-Schedule-Bot.git
cd Academic-Schedule-Bot2. Restaure o banco de dados
Faça o download do dump SQL e restaure-o em um banco PostgreSQL chamado greed:
psql -U postgres -c "CREATE DATABASE greed;"
psql -U postgres -d greed -f postgres_localhost-2025_01_18_12_54_32-dump.sql3. Crie o usuário do banco
CREATE ROLE kd_user LOGIN PASSWORD 'pa';
GRANT ALL PRIVILEGES ON DATABASE greed TO kd_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO kd_user;4. Compile o projeto
./gradlew build5. Configure o token do bot
# Linux / macOS
export BOT_TOKEN=seu_token_aqui
# Windows (PowerShell)
$env:BOT_TOKEN = "seu_token_aqui"6. Execute
Rode a função main e acesse o bot em @UnBHorarios_bot.
A lógica de escalonamento é baseada no problema de Maximização de Agendamento de Intervalos — um algoritmo guloso clássico que seleciona o maior número de intervalos não sobrepostos. Neste contexto:
- Cada matéria é mapeada para um ou mais intervalos de tempo
- A estratégia gulosa percorre os intervalos ordenados e elimina conflitos
- Todas as combinações válidas e sem conflito são retornadas ao usuário
Complexidade: O(n log n) para ordenação + O(n) para seleção por combinação.
| Matrícula | Aluno |
|---|---|
| 22/1007814 | André Emanuel Bispo da Silva |
| 22/1008150 | João Antonio Ginuino Carvalho |


