TELEMETRIA DE DIGITAÇÃO / REGISTO DE SESSÃO
Ler uma sessão de digitação como registo
Esta página relaciona duração, seleção de texto, verificações por carácter, fórmulas de métricas, estados do mapa de teclas, painel de dois jogadores e percurso de resultado público com o código visível no editor.
- 30 / 60 / 120 segundos · inicial 60
- beginner / intermediate / expert · inicial intermediate
- solo / painel de dois jogadores · inicial solo
Faixa de controlo da sessão
Antes de uma sessão, o editor expõe três seletores. São definições do editor, não rótulos sobre uma pessoa ou a sua digitação.
- DURAÇÃO — 30 · 60 · 120
O seletor oferece 30, 60 e 120 segundos. O valor inicial é 60 segundos.
- DIFICULDADE — 3 CONJUNTOS
O seletor oferece beginner, intermediate e expert. O valor inicial é intermediate.
- MODO — SOLO · 2 JOGADORES
O editor começa em solo. O outro painel visível é um modo de dois jogadores com entradas separadas.
Fonte e seleção de texto
Existem arrays de textos para cada idioma exibido e dificuldade. Na inicialização e novamente ao iniciar o teste, o editor usa Math.floor(Math.random() * texts.length) para obter uma entrada do array aplicável.
Relógio da sessão e pontos de término
O temporizador avança enquanto um teste está iniciado e não terminado. Uma sessão termina quando timeLeft === 0 ou quando uma entrada alcança o comprimento do texto atual.
01 · SOLO — O controlo Iniciar entra diretamente
No modo solo, o controlo Iniciar chama diretamente o percurso de início e depois foca a entrada solo.
02 · 2 JOGADORES — 3 → 2 → 1 antes das entradas
No modo de dois jogadores, o controlo Iniciar começa uma contagem 3–2–1. O percurso de início foca depois a entrada de Player 1.
03 · FIM — Tempo zero ou limite de texto
O percurso de fim é alcançado com timeLeft === 0 ou quando um comprimento de entrada chega pelo menos a currentText.length.
Painel de medição por carácter
Para uma entrada, o editor percorre caracteres por posição e verifica cada um contra currentText nessa posição. Posições coincidentes contribuem para correctChars; totalChars é o comprimento da entrada.
- WPM — round((correctChars / 5) / elapsedMinutes)
Calculado somente quando elapsedMinutes é superior a 0.
- ACCURACY — round((correctChars / totalChars) * 100)
Calculada somente quando totalChars é superior a 0.
- PROGRESSO — round(currentIndex / currentText.length * 100)
currentIndex segue o comprimento da entrada atual.
Mapa de teclas e registo de estado
Quando um carácter solo recém-adicionado tem carácter esperado, esse carácter esperado é convertido em minúscula e contado. Um erro é contado quando typedChar !== expectedChar.
TESTE ATUAL — Só mostrado com dados
O cartão do mapa de teclas do teste atual é renderizado somente quando os seus dados atuais de erros têm entradas.
ACUMULADO — typingSpeedTest_keyErrors
Na inicialização, o editor lê erros acumulados de teclas de localStorage sob typingSpeedTest_keyErrors. Num fim solo, os erros atuais são combinados e escritos sob essa chave.
REPOR — Remover a chave
O controlo de reposição remove typingSpeedTest_keyErrors e limpa o estado acumulado mostrado pela UI. O cartão acumulado só é renderizado quando existem dados.
Registo solo e painel de dois jogadores
Os modos visíveis usam estados de entrada distintos. O painel de dois jogadores é descrito aqui apenas como UI com duas entradas.
HISTÓRICO SOLO — No máximo cinco entradas UI
Um fim solo antepõe o resultado com [result, ...slice(0, 4)]. Este histórico é estado React usado na UI.
ENTRADAS DE JOGADOR — Campos acompanhados separadamente
Player 1 e Player 2 têm estado respetivo de entrada, índice, caracteres corretos, caracteres totais, WPM e accuracy.
RÓTULO FINAL — Ramo WPM
Num fim de dois jogadores, Player 1 vence somente quando player1Wpm > player2Wpm; Player 2 somente no caso inverso; caso contrário o resultado é tie.
Percurso opcional de resultado público
Depois de um fim solo, um valor WPM acima de 20 abre um diálogo. O campo de nome é opcional e tem máximo de 100 caracteres antes do envio.
DIÁLOGO — Nome opcional e envio
O diálogo envia WPM solo, accuracy, duração, dificuldade, idioma e nome aparado quando é introduzido.
ENTRADA DO SERVIDOR — Limites aceites
saveScore aceita WPM inteiro de pelo menos 0, accuracy inteira de 0 a 100, duração inteira, dificuldade beginner/intermediate/expert e idioma até 10 caracteres; o servidor insere o registo enviado.
LISTA PÚBLICA — Consulta idioma + dificuldade
A consulta de resultados filtra por idioma e dificuldade. A UI pede limit 10; a consulta ordena WPM descendente e depois accuracy descendente.
Notas de âmbito
- Este registo descreve percursos e fórmulas do editor visíveis no código atual.
- A seleção de texto é baseada em arrays e usa o idioma exibido e a dificuldade escolhida.
- Um envio de resultado público é entrada de utilizador através do percurso de resultado; esta página não o trata como verificação.
- A consulta de resultados tem filtros, ordem e limite UI indicados; esta página não declara que uma entrada aparecerá.
Continuar com ferramentas próximas
Cada ferramenta ligada tem os seus próprios controlos e percurso de resultado.
- Roleta de decisões
Defina entradas numa interface de roda separada e reveja o painel de seleção.
- Jogar moeda
Abra a interface de moeda separada para um resultado de duas faces.
- Sudoku
Abra uma interface de puzzle com grelha e controlos próprios.
Perguntas sobre o registo de sessão
Que controlos estão selecionados inicialmente?
Os valores iniciais são 60 segundos, dificuldade intermediate e modo solo. A duração oferece 30, 60 e 120 segundos; a dificuldade oferece beginner, intermediate e expert.
Como é escolhido um texto?
Para o idioma e dificuldade escolhidos, o editor toma uma entrada do array com Math.floor(Math.random() * texts.length) na inicialização e no início do teste.
Como são calculados WPM, accuracy e progresso?
WPM é round((correctChars / 5) / elapsedMinutes) quando elapsedMinutes é superior a 0. Accuracy é round((correctChars / totalChars) * 100) quando totalChars é superior a 0. Progresso é round(currentIndex / currentText.length * 100).
O que regista o mapa de teclas?
Para um carácter solo recém-adicionado, o carácter esperado é convertido em minúscula e contado. typedChar !== expectedChar incrementa o erro. Erros acumulados usam a chave localStorage typingSpeedTest_keyErrors e Repor remove essa chave.
O que envia o diálogo público?
Depois de um fim solo com WPM acima de 20, o diálogo pode enviar um nome opcional até 100 caracteres com os campos de resultado. O servidor aceita os limites inteiros e valores enum indicados e insere o registo enviado.
Abrir controlos de sessão de digitação
Escolha duração, dificuldade e modo no editor e depois reveja os estados por carácter e métricas visíveis.