Las normas
¡Es hora de construir una prueba de velocidad de mecanografía en el idioma que elija!
1 . Proporciona un archivo con un diccionario de elección (cada 'palabra' debe estar delimitada por una nueva línea). Conéctelo a través de stdin
o proporcione su nombre como argumento de línea de comando.
una poder acerca de encima ausencia ...
2 . Elija 10 palabras aleatorias del archivo (no se deben permitir duplicados) e imprímalas de la siguiente manera:
-> directo -> suelo -> siguiente -> cinco ...
3 . ¡Comience a medir el tiempo dedicado de ahora en adelante!
4 . Deje que el usuario escriba las diez palabras lo más rápido posible (finalizó con un retorno de carro). Imprima OK
cuando tenga una coincidencia, imprima WRONG
cuando tengamos un error de escritura (o la palabra ya se escribió correctamente en esta ejecución).
5 . ¡Detener los relojes! Ahora imprimir el CPM (Caracters por minuto) punto de referencia, que se calcula como sigue: (sum of the characters of the chosen words / time spent typing (seconds)) * 60
. Redondee al entero más cercano y reproduzca la siguiente salida (muestra):
-> ¡Has obtenido 344 CPM!
Una muestra de ejecución
-> asentarse -> lado -> abierto -> ministro -> riesgo -> color -> barco -> mismo -> tamaño -> espada asentar Okay lado Okay abierto Okay # ...................... algunas líneas cortadas ...................... palabra INCORRECTO espada Okay -> ¡Has obtenido 298 CPM!
El ganador
Este es el código colf, la entrada más corta (en el recuento de caracteres del código fuente) gana, ¡diviértete!
Respuestas:
K, 146
Asume un archivo de diccionario llamado 'd' en el directorio de trabajo actual.
fuente
K
que he visto (aquí en codegolf.se) ...Bash -
217212199196 caracteresNo voy a ganar pero fue divertido
¡Menos de 200 caracteres ahora!
Toma el archivo de la lista de palabras como argumentoAhora toma la lista de palabras en la entrada estándar. Pégalo en la terminal y presiona ^ DSugerencia implementada de manatwork
fuente
$SECONDS
variable de shell para simplificar el cálculo del tiempo transcurrido.:
expansión del parámetro del valor predeterminado; 2) el$
frente deSECONDS
la evaluación aritmética. En realidad, hay otro personaje adicional, la nueva línea en el archivo.Rubí
189178171168)Bastante básico, estoy seguro de que hay mejoras por hacer. Toma el nombre de archivo del diccionario como argumento de línea de comandos.
EDITAR : Algunos ajustes menores, principalmente para retener las nuevas líneas del diccionario. Como resultado, el archivo necesitará una nueva línea final para funcionar correctamente.
fuente
C, 305
309347caracteresGracias a @ugoren por las sugerencias de mejora. El uso de una "11ª palabra" para descartar las entradas de diccionario entrantes fue una gran victoria sobre mi enfoque anterior de strcpy-if-elegido.
Aquí está la fuente no protegida:
fuente
main(n,v)char**v;{...
. 2.stdin
puede serchar *
.fgets(buf,len,stdin)
=gets(buf)
(no importa los desbordamientos del búfer). 3. ¿Qué tiene de malorand()%i
?RAND_MAX
no es necesario 4. ¿Por quélong
?t=time(0)
->time(&t)
. 2)n*60/(time(0)-t)
tiene paréntesis que deben ir,*60
se puede mover an+=60*printf
, entoncesn/=time(0)-t
. 3) Reemplazarb
con un elemento extra adentrow
, reemplazarstrcpy
con leer directamente enw
.fgets()
congets()
las necesidades de código adicional para hacer frente a las nuevas líneas en el diccionario; esto terminó siendo más corto.rand()%i
no es suficiente El cálculo real es(double)i*rand()/RAND_MAX
. Mover el*60
a la printf también significa cambiar el-4
a-240
para que finalmente resulte una pérdida. Sin embargo, sus otros puntos son válidos (creo). Ah, ylong
es porque el tiempo es tradicionalmente largo. El hecho de que estemos jugando al golf no significa que no podamos ser portátiles.4
->240
... La portabilidad y el golf no van bien juntos. Pero definiri,t;
(implícitamente int) está bien hastaMAX_INT
segundos (si no lo usatime(&t)
). Conrand()
todo lo que necesitas es una10/i
oportunidad, y lorand()%i<10
hace.rand()%10>10
, lo que le da el 100%.rand()%(i+1)>9
es mejor (pero en cambio si%(i+1)
hacerloi++>9?
. También moverse*stdin
ser el primero y ahorra espacio.C # 401
Versión en ejecución aquí: http://ideone.com/Nt6Id
fuente
Python (
256235)Esto está en python 2.x, en 3.x puedo eliminar 4 caracteres más usando la función de impresión.
Nuevas líneas incluidas
fuente
z=lambda x:
adef z(x):
.len(x)
ydef z(x):return
son 5 personajes más: /input()
lugar desys.argv[1].read()
PHP 187 bytes
Se han agregado nuevas líneas para mayor claridad:
Acepta el nombre de archivo del diccionario como argumento de línea de comando. El archivo del diccionario debe terminar con una nueva línea.
fuente
Scala (
319306304302)fuente