TELEMETRÍA DE ESCRITURA / REGISTRO DE SESIÓN

Leer una sesión de escritura como registro

Esta página relaciona duración, selección de texto, comprobaciones de caracteres, fórmulas de métricas, estados del mapa de teclas, panel de dos jugadores y ruta de resultado público con el código visible del editor.

Abrir prueba de escritura

Franja de control de sesión

Antes de una sesión, el editor muestra tres selectores. Son ajustes del editor, no etiquetas sobre una persona o su escritura.

  • DURACIÓN — 30 · 60 · 120

    El selector ofrece 30, 60 y 120 segundos. Su valor inicial es 60 segundos.

  • DIFICULTAD — 3 CONJUNTOS

    El selector ofrece beginner, intermediate y expert. Su valor inicial es intermediate.

  • MODO — SOLO · 2 JUGADORES

    El editor comienza en solo. El otro panel visible es un modo de dos jugadores con entradas separadas.

Fuente y selección de texto

Hay arrays de texto para cada idioma mostrado y cada dificultad. En la inicialización y de nuevo al iniciar la prueba, el editor usa Math.floor(Math.random() * texts.length) para tomar una entrada del array aplicable.

Reloj de sesión y puntos de salida

El temporizador avanza mientras una prueba está iniciada y sin terminar. Una sesión termina cuando timeLeft === 0 o cuando una entrada alcanza la longitud del texto actual.

01 · SOLO — El control Inicio entra directamente

En modo solo, el control Inicio llama directamente a la ruta de inicio y después enfoca la entrada solo.

02 · 2 JUGADORES — 3 → 2 → 1 antes de entradas

En modo de dos jugadores, el control Inicio comienza una cuenta 3–2–1. La ruta de inicio enfoca después la entrada de Player 1.

03 · FIN — Tiempo cero o límite de texto

La ruta de finalización se alcanza con timeLeft === 0 o cuando una longitud de entrada llega al menos a currentText.length.

Panel de medición por carácter

Para una entrada, el editor recorre los caracteres por posición y comprueba cada uno contra currentText en esa posición. Las posiciones coincidentes suman correctChars; totalChars es la longitud de entrada.

  • WPM — round((correctChars / 5) / elapsedMinutes)

    Solo se calcula cuando elapsedMinutes es mayor que 0.

  • ACCURACY — round((correctChars / totalChars) * 100)

    Solo se calcula cuando totalChars es mayor que 0.

  • PROGRESO — round(currentIndex / currentText.length * 100)

    currentIndex sigue la longitud de la entrada actual.

Mapa de teclas y registro de estado

Cuando un carácter solo recién añadido tiene un carácter esperado, este se pasa a minúscula y se cuenta. Se cuenta un error cuando typedChar !== expectedChar.

PRUEBA ACTUAL — Solo se muestra con datos

La tarjeta del mapa de teclas de la prueba actual se renderiza solo cuando sus datos actuales de errores tienen entradas.

ACUMULADO — typingSpeedTest_keyErrors

Al inicializar, el editor lee errores acumulados desde localStorage bajo typingSpeedTest_keyErrors. Al terminar en solo, los errores actuales se combinan y se escriben bajo esa clave.

RESTABLECER — Eliminar la clave

El control de restablecimiento elimina typingSpeedTest_keyErrors y limpia el estado acumulado mostrado por la UI. La tarjeta acumulada solo se renderiza cuando hay datos.

Registro solo y panel de dos jugadores

Los modos visibles usan estados de entrada distintos. El panel de dos jugadores se describe aquí solo como UI de dos entradas.

HISTORIAL SOLO — Hasta cinco entradas de UI

Un final solo antepone su resultado con [result, ...slice(0, 4)]. Este historial es estado React usado en la UI.

ENTRADAS DE JUGADOR — Campos seguidos por separado

Player 1 y Player 2 tienen estado respectivo de entrada, índice, caracteres correctos, caracteres totales, WPM y accuracy.

ETIQUETA FINAL — Rama WPM

Al finalizar dos jugadores, Player 1 gana solo cuando player1Wpm > player2Wpm; Player 2 solo en el caso inverso; en otro caso el resultado es tie.

Ruta opcional de resultado público

Tras un final solo, un valor WPM superior a 20 abre un diálogo. El campo de nombre es opcional y admite un máximo de 100 caracteres antes de enviar.

DIÁLOGO — Nombre opcional y envío

El diálogo envía WPM solo, accuracy, duración, dificultad, idioma y un nombre recortado cuando se introduce.

ENTRADA DE SERVIDOR — Límites aceptados

saveScore acepta WPM entero de al menos 0, accuracy entera de 0 a 100, duración entera, dificultad beginner/intermediate/expert e idioma de hasta 10 caracteres; el servidor inserta el registro enviado.

LISTA PÚBLICA — Consulta por idioma + dificultad

La consulta de resultados filtra por idioma y dificultad. La UI solicita limit 10; la consulta ordena WPM descendente y después accuracy descendente.

Notas de alcance

  • Este registro describe rutas y fórmulas del editor visibles en el código actual.
  • La selección de texto se basa en arrays y usa el idioma mostrado y la dificultad elegida.
  • Un envío de resultado público es entrada de usuario por la ruta de resultado; esta página no lo trata como verificación.
  • La consulta de resultados tiene los filtros, orden y límite de UI indicados; esta página no afirma que una entrada vaya a aparecer.

Continuar con herramientas cercanas

Cada herramienta enlazada tiene sus propios controles y ruta de resultado.

  • Ruleta de decisiones

    Configura entradas en una interfaz de ruleta separada y revisa su panel de selección.

  • Lanzar moneda

    Abre la interfaz de moneda separada para un resultado de dos caras.

  • Sudoku

    Abre una interfaz de rompecabezas con cuadrícula y controles propios.

Preguntas sobre el registro de sesión

¿Qué controles están seleccionados al inicio?

Los valores iniciales son 60 segundos, dificultad intermediate y modo solo. La duración ofrece 30, 60 y 120 segundos; la dificultad ofrece beginner, intermediate y expert.

¿Cómo se elige un texto?

Para el idioma y dificultad seleccionados, el editor toma una entrada del array con Math.floor(Math.random() * texts.length) al inicializar y al iniciar la prueba.

¿Cómo se calculan WPM, accuracy y progreso?

WPM es round((correctChars / 5) / elapsedMinutes) cuando elapsedMinutes es mayor que 0. Accuracy es round((correctChars / totalChars) * 100) cuando totalChars es mayor que 0. Progreso es round(currentIndex / currentText.length * 100).

¿Qué registra el mapa de teclas?

Para un carácter solo recién añadido, el carácter esperado se pasa a minúscula y se cuenta. typedChar !== expectedChar incrementa su error. Los errores acumulados usan la clave localStorage typingSpeedTest_keyErrors y Restablecer elimina esa clave.

¿Qué envía el diálogo público?

Tras un final solo con WPM por encima de 20, el diálogo puede enviar un nombre opcional de hasta 100 caracteres con los campos de resultado. El servidor acepta los límites enteros y valores enum indicados e inserta el registro enviado.

Abrir controles de sesión de escritura

Elige duración, dificultad y modo en el editor; después revisa los estados por carácter y métricas visibles.

Abrir prueba de escritura