# O Enigma do Braço Robótico

## O Cenário

Uma fábrica de alta tecnologia perdeu recentemente a conexão de rede com seu braço robótico autônomo mais novo e avançado. O robô continuou operando e executando suas tarefas na linha de montagem, mas o servidor central não conseguiu registrar os logs de alto nível das atividades concluídas.

A equipe de engenharia conseguiu recuperar do sistema de segurança do robô apenas arquivos de texto brutos contendo a telemetria de baixo nível das juntas do robô. Esses dados incluem informações cruciais coletadas pelos sensores a cada instante de tempo, como:

- posição angular de cada junta;
- velocidade de movimento; e
- esforço (torque/carga) aplicado nas juntas.

## O Seu Objetivo

Como especialista em dados e inteligência artificial convocado para resolver este problema, sua missão é analisar esse histórico de telemetria e reconstruir a sequência exata de tarefas que o robô executou durante o período em que esteve desconectado.

No entanto, o chão de fábrica é imprevisível. O robô pode ter sofrido anomalias ou falhas de funcionamento, como colisões leves, trajetórias incorretas ou cargas inadequadas aplicadas às juntas. Seu modelo não deve apenas classificar as tarefas normais, mas também ser capaz de identificar quando uma anomalia ocorreu.

## Os Dados Disponíveis

Para treinar o modelo, a equipe de engenharia disponibilizou dois arquivos:

- `task_1.csv`: dados de telemetria do robô executando a Tarefa 1;
- `task_2.csv`: dados de telemetria do robô executando a Tarefa 2.

Esses arquivos contêm múltiplas execuções concatenadas, uma após a outra. O conjunto de teste final possui a mesma estrutura: um fluxo contínuo de dados de sensores no qual o robô alterna entre a Tarefa 1, a Tarefa 2 e possíveis anomalias.

## Regras de Entrega e Formato

Ao final da competição, crie no seu usuário uma pasta chamada `ENTREGA_FINAL` contendo quatro artefatos principais:

1. o modelo de aprendizado de máquina treinado;
2. o código-fonte Python utilizado para inferência;
3. um script SLURM para executar o script Python como um job; e
4. um breve relatório em PDF descrevendo como o problema foi resolvido, o que foi tentado e quais processos de decisão levaram à solução final.

### Requisitos para o Código Python

- O script deve conter uma variável global chamada `INPUT_PATH`.
- Durante a avaliação, a comissão altera essa variável para apontar para o conjunto de teste final, com os dados do período em que o robô perdeu a conexão.
- O código deve ler os dados de `INPUT_PATH`, processá-los com o modelo e gerar um arquivo de saída no formato CSV.

## Requisitos para o Arquivo de Saída

O arquivo gerado deve conter apenas um número por linha, sem cabeçalho. Cada número representa uma atividade identificada pelo modelo:

- `1` para Tarefa 1;
- `2` para Tarefa 2; e
- `0` para anomalia.

A sequência deve refletir estritamente a ordem cronológica das tarefas executadas. Por exemplo, para duas execuções da Tarefa 2, uma da Tarefa 1, outra da Tarefa 2 e uma anomalia, a saída seria:

```text
2
2
1
2
0
```

## Critério de Avaliação

As submissões são avaliadas pela Distância de Levenshtein. Essa métrica mede o número mínimo de inserções, deleções e substituições necessárias para transformar a sequência prevista na sequência de referência. Quanto menor a distância, mais precisa é a reconstrução. Uma ordem incorreta, anomalias não identificadas ou eventos inventados aumentam a distância.
