Cada sinal de progresso com um significado
Classificação, XP, dificuldade e posição semanal respondem a perguntas diferentes. Estas são as regras que o app e o servidor devem compartilhar.
Como o fluxo se conecta
Uma tentativa finalizada pelo servidor alimenta sinais separados. Cada sinal responde a uma pergunta diferente e pode ser inspecionado sem transformar progresso em uma promessa de domínio.
- 01Desafio finalizadoO servidor valida o resultado, a dificuldade e o identificador da tentativa.
- 02Skills e XPSkills inferidas recebem uma única concessão de XP conforme a dificuldade.
- 03Próxima dificuldadeNo automático, resultado e skill orientam o próximo passo; no manual, vale o nível fixo escolhido.
- 04Sequência e conquistaEventos válidos podem avançar a sequência diária e marcos alcançáveis, sem conceder XP de novo.
Quatro sinais, quatro perguntas
Classificação inspirada no Elo
A classificação começa em 1000, tem piso 100 e usa fatores K 32, 24 e 16. Acerto, dificuldade do desafio e tempo afetam cada variação. Não existe adversário humano, e a classificação não controla a dificuldade adaptativa.
XP e níveis por skill
Um desafio resolvido concede a cada skill inferida um único prêmio: 60/100/140/180/220 XP nas dificuldades 1–5. As dez skills têm níveis 1–5; o próximo marco é round(100 × nível^1.5), e o nível 5 exibe 100%.
Dificuldade adaptativa
A dificuldade usa o resultado recente e o progresso da skill relevante para escolher o próximo passo. Ela não concede XP novamente nem lê a classificação inspirada no Elo.
Ranking semanal
O ranking semanal conta soluções finalizadas pelo servidor desde segunda-feira UTC. Somente o campo canônico solved_count determina a posição pública; progresso informado pelo cliente nunca a altera.
Exemplos de controle de dificuldade
Modo automático
Depois de uma tentativa finalizada, o backend usa o resultado e o nível demonstrado da skill para manter, subir ou reduzir o próximo desafio. O rating não participa dessa escolha.
Modo manual
Você escolhe um nível de 1 a 5. A preferência é validada e persistida pelo backend para a identidade Firebase atual, inclusive anônima, e novas gerações respeitam esse nível até voltar ao automático.
Limites e sincronização
O estado principal é autoritativo no servidor. Uma falha de rede pode atrasar a leitura ou a gravação; a interface informa o erro e não apresenta uma mudança local como se estivesse salva. Ao transformar uma conta anônima em permanente, a preferência faz parte da migração vinculada ao dono.