As regras
É hora de criar um teste de velocidade de digitação no seu idioma preferido!
1 . Você fornece um arquivo com um dicionário de sua escolha (todas as 'palavras' nele devem ser delimitadas por novas linhas). Conecte-o via stdin
ou forneça seu nome como argumento de linha de comando.
uma capaz sobre acima ausência ...
2 . Escolha 10 palavras aleatórias do arquivo (nenhuma duplicata deve ser permitida) e imprima-as da seguinte maneira:
-> direto -> chão -> próximo -> cinco ...
3 . Comece a medir o tempo gasto a partir de agora!
4 . Deixe o usuário digitar todas as dez palavras o mais rápido possível (terminado com um retorno de carro). Imprima OK
quando houver uma correspondência, imprima WRONG
quando houver um erro de digitação (ou a palavra já foi digitada com êxito nesta execução).
5 . Para os relogios! Agora, imprima o CPM (Caracters por minuto) de referência, que é calculado da seguinte forma: (sum of the characters of the chosen words / time spent typing (seconds)) * 60
. Arredonde para o número inteiro mais próximo e reproduza a seguinte saída (amostra):
-> Você marcou 344 CPM!
Uma amostra de execução
-> liquidar -> lado -> aberto -> ministro -> risco -> cor -> navio -> mesmo -> tamanho -> espada resolver Está bem lado Está bem aberto Está bem # ...................... algumas linhas cortadas ...................... palavra ERRADO espada Está bem -> Você marcou 298 CPM!
O vencedor
Este é o código colf, a entrada mais curta (na contagem de caracteres do código fonte) vence, divirta-se!
Respostas:
K, 146
Assume um arquivo de dicionário chamado 'd' no diretório de trabalho atual.
fonte
K
eu vi (aqui na codegolf.se) ...Bash -
217212199196 caracteresNão vai ganhar, mas foi divertido
Menos de 200 caracteres agora!
Leva o arquivo da lista de palavras como argumentoAgora leva a lista de palavras na entrada padrão. Cole-o no terminal e pressione ^ DSugestão implementada de manatwork
fonte
$SECONDS
variável shell para simplificar o cálculo do tempo decorrido.:
no parâmetro de valor padrão de expansão; 2) a$
frenteSECONDS
na avaliação aritmética. Na verdade, há outro caractere extra, a nova linha no e do arquivo.Ruby (
189178171168)Bem básico, tenho certeza de que há melhorias a serem feitas. Leva o nome do arquivo do dicionário como um argumento da linha de comando.
Edição : alguns pequenos ajustes, principalmente em torno de manter as novas linhas do dicionário. Como resultado, o arquivo precisará de uma nova linha à direita para funcionar corretamente.
fonte
C,
305309347caracteresObrigado a @ugoren pelas dicas de melhoria. Usar uma "11ª palavra" para descartar entradas de dicionário recebidas foi uma grande vitória em relação à minha abordagem anterior de strcpy-if-escolhido.
Aqui está a fonte não destruída:
fonte
main(n,v)char**v;{...
. 2.stdin
pode serchar *
.fgets(buf,len,stdin)
=gets(buf)
(não importa o excesso de buffer). 3. O que há de erradorand()%i
?RAND_MAX
não é necessário. 4. Por quelong
?t=time(0)
->time(&t)
. 2)n*60/(time(0)-t)
tem parênteses que devem ir -*60
podem ser movidos paran+=60*printf
, entãon/=time(0)-t
. 3) Substituab
por um elemento extraw
, substituastrcpy
por leia diretamentew
.fgets()
porgets()
precisa de código extra para lidar com as novas linhas no dicionário; isso acabou sendo mais curto.rand()%i
não é suficiente; o cálculo real é(double)i*rand()/RAND_MAX
. Mover o*60
arquivo para o printf também significa alterar o arquivo-4
para,-240
assim, acaba perdendo. Seus outros pontos são válidos, no entanto (acredito). Ah, elong
é porque o time_t é tradicionalmente longo. Só porque estamos jogando golfe não significa que não podemos ser portáteis.4
->240
... Portabilidade e golfe não vão bem juntos. Porém, definiri,t;
(int implicitamente) é OK atéMAX_INT
segundos (se você não usartime(&t)
). Comrand()
, tudo que você precisa é uma10/i
chance, erand()%i<10
faz.rand()%10>10
, o que lhe dá 100%.rand()%(i+1)>9
é melhor (mas em vez se%(i+1)
fazeri++>9?
. Também se mover*stdin
para ser o primeiro e salvar um espaço.C # 401
Versão em execução aqui: http://ideone.com/Nt6Id
fonte
Python (
256235)Isso está no python 2.x, no 3.x eu posso cortar mais 4 caracteres usando a função de impressão.
Novas linhas incluídas
fonte
z=lambda x:
paradef z(x):
.len(x)
edef z(x):return
é mais 5 charaters: /input()
em vez desys.argv[1].read()
PHP 187 bytes
Novas linhas foram adicionadas para maior clareza:
Aceita o nome do arquivo do dicionário como um argumento de linha de comando. O arquivo do dicionário deve terminar com uma nova linha.
fonte
Scala (
319306304302)fonte