6.14.3 EP06_03 🟡 Classificação de Marcações em Folhas de Resposta (OMR)
Após a retificação da folha e a segmentação dos quadros de respostas, o MCTest estima, para cada bolha, um grau de preenchimento, representado por um valor entre \(0\) e \(100\). A partir desses valores, o sistema deve determinar automaticamente a alternativa marcada, identificando também questões em branco e casos de múltiplas marcações.
Neste exercício, você implementará essa etapa de decisão do pipeline de OMR. A classificação depende de um limiar de preenchimento: pequenas variações nesse valor podem alterar o resultado da leitura automática.
6.14.3.1 📋 Diretrizes de Implementação
- Parâmetros: Ler os inteiros \(Q\) (número de questões) e \(K\) (número de alternativas por questão, com \(2 \le K \le 26\)) e o limiar de preenchimento \(\mathrm{Th}\) (número real entre \(0\) e \(100\)).
- Graus de preenchimento: Para cada uma das \(Q\) questões, ler os \(K\) valores reais correspondentes às alternativas
A,B,C, …, na ordem de entrada. - Contagem de marcações: Para cada questão, contar quantas alternativas possuem grau de preenchimento estritamente maior que \(\mathrm{Th}\).
- Classificação:
- Se nenhuma alternativa exceder \(\mathrm{Th}\), classificar a questão como
BRANCO. - Se exatamente uma alternativa exceder \(\mathrm{Th}\), imprimir a letra correspondente (
A,B,C, …). - Se duas ou mais alternativas excederem \(\mathrm{Th}\), classificar a questão como
DUPLA_MARCACAO.
- Se nenhuma alternativa exceder \(\mathrm{Th}\), classificar a questão como
- Saída por questão: Imprimir, na ordem de leitura, a classificação de cada questão.
- Totais: Ao final, imprimir o número de questões
OK(uma única marcação),BRANCOeDUPLA_MARCACAO.
6.14.3.2 📌 Restrições Computacionais
- Comparação estrita: apenas valores maiores que \(\mathrm{Th}\) são considerados marcações válidas; valores exatamente iguais ao limiar não devem ser contabilizados.
- Letras das alternativas: o índice \(0\) corresponde à alternativa
A, o índice \(1\) à alternativaBe assim sucessivamente. - Múltiplas marcações: sempre que duas ou mais alternativas excederem o limiar, a classificação deve ser
DUPLA_MARCACAO, independentemente dos respectivos graus de preenchimento.
6.14.3.3 🧠 Fundamentação Teórica
| Situação | Classificação | Interpretação |
|---|---|---|
| Exatamente uma alternativa acima do limiar | Letra da alternativa | Resposta válida |
| Nenhuma alternativa acima do limiar | BRANCO |
Questão não respondida |
| Duas ou mais alternativas acima do limiar | DUPLA_MARCACAO |
Resposta ambígua |
O limiar de preenchimento controla a sensibilidade do algoritmo. Valores muito baixos tendem a aumentar o número de DUPLA_MARCACAO, enquanto valores muito altos podem aumentar a quantidade de questões classificadas como BRANCO.
6.14.3.4 📦 Especificação de Entrada e Saída (VPL)
Entrada:
- Linha 1: Inteiro \(Q\).
- Linha 2: Inteiro \(K\).
- Linha 3: Número real \(\mathrm{Th}\).
- Próximas \(Q\) linhas: \(K\) números reais, correspondentes aos graus de preenchimento das alternativas.
- Linha 1: Inteiro \(Q\) e \(K\).
Saída:
- \(Q\) linhas, cada uma contendo a classificação da respectiva questão.
- Linha final:
OK: x BRANCO: y DUPLA_MARCACAO: z.
6.14.3.5 📌 Exemplos
| Entrada | Saída | Observação |
|---|---|---|
| 3 4 50 10 85 5 12 20 15 18 22 90 88 10 5 |
B BRANCO DUPLA_MARCACAO OK: 1 BRANCO: 1 DUPLA_MARCACAO: 1 |
Na primeira questão apenas B supera o limiar; na segunda nenhuma alternativa o supera; na terceira, A e B excedem o limiar. |
| 1 2 50.0 50 50 |
BRANCO OK: 0 BRANCO: 1 DUPLA_MARCACAO: 0 |
Valores iguais ao limiar não são considerados marcações válidas. |
%%writefile EP06_03.py
# Código PythonWriting EP06_03.py
TestSuite("EP06_03.py").run()✔️ EP06_03.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP06_03.cases
🔍 Testando Python: EP06_03.py
⚠️ EP06_03.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.