Typing speed test

Pages: 123
I got 83wpm when I tried. That test is a little biased towards the faster side. I get around 70wpm on most typing tests, but they don't restrict the test to only the most common words, so those less common words tend to slow you down.

Of course, after that I decided to see how fast I could get with a keystroke emulator program.

So this program(rather crude, but I spent about 30 minutes on it, 25 of those messing with SendInput and keybd_event):


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <fstream>
#include <windows.h>
#include <WinAble.h>

#define KEYEVENTF_SCANCODE 8
using namespace std;
HKL hKBL;

void keystroke(char a){
	INPUT p;
	
	unsigned int vkey = MapVirtualKey( LOBYTE ( VkKeyScanEx(a, hKBL)), 0);
	ZeroMemory(&p, sizeof(p));
	p.type = INPUT_KEYBOARD;
	p.ki.wScan = vkey;
	p.ki.dwFlags = KEYEVENTF_SCANCODE;
	//SendInput(1, &p, sizeof(p));
	
	//Need shift key for capital letter
	if(a>64 && a<90)
		keybd_event(VK_SHIFT, 0, 0, 0);

	keybd_event(vkey, vkey, KEYEVENTF_SCANCODE, 0);
	
	p.ki.dwFlags = KEYEVENTF_KEYUP;
	if(a>64 && a<90)
		keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
	//SendInput(1, &p, sizeof(p));
	
	keybd_event(vkey, vkey, KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP, 0);

}


int main(){

	char buff[20] = {0};  
	GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, buff, sizeof(buff));  
	hKBL = LoadKeyboardLayout( buff, KLF_ACTIVATE );

	ifstream myfile( "test.txt");
	
	Sleep(5000);
	
	char inchar;
	while(myfile.good()){
		inchar = myfile.get();
		keystroke(inchar);
		Sleep(10);
	}
	
	return 0;
}




http://i120.photobucket.com/albums/o193/jraskell/speedtest.png

That's the best I could get, with or without the delay between characters, and even with the delay as high as 30ms. It appears that the timer is locked to 60 seconds, and there are only 297 words total. So if you finish early, it still considers the total time to be the full 60 seconds.
How the hell did you only get position 17 if you got all of them right?

Do you think the other 16 people did the same thing you did, but at an earlier time? Because that's the only explanation I can think of...
Last edited on
I'm pretty sure that is the reason why. I'm sure with enough tries I could have gotten a higher point total, as the list of words is somewhat random, so I could get a list with a higher total character count, but of the three runs I did, I got a total of 297 words for each, so it appears the word count is constant.

My first attempt at automating it used SendInput(), which worked as far as getting the text into the textbox, but for whatever reason the script behind the scenes wasn't getting triggered by SendInput(), so I resorted to using keybd_event().

Also, with no Sleep() used at all, the automated attempt was actually finishing in about 5 seconds, but the script would still tick all the way down to 0, then post the results as if it took the entire minute.
Last edited on
The author probably realised that people would do what you did, and that no human could possibly type 300 words in less than 60 seconds (well, not unless they were on steroids and lot of caffeine); so they wrote the script in a way as to keep going to 60. Either that, or they were just lazy.

What I don't understand is how your program knows what keypresses to send... The only way I can think of doing it would be for you to already know what was going to appear, and then write down those words in order. But I don't think you could have done that...
I still look at the keyboard when I type, though I have done this for so long that I am memorizing keys and can halfway type.
Jsjsjs! Frar mu tiocj=tpynig powress!
DrChill wrote:
I still look at the keyboard when I type, though I have done this for so long that I am memorizing keys and can halfway type.


Pretty much me, here.

I did the test and got 71 wpm with 1 error. I tried again on Japanese for fun and got position 14 with 10 correct, 6 wrong. Incorrect ones were words I skipped because I didn't know them. Might also have to do with the fact I had to switch into Japanese mode to type the words, then into English mode to space-delimit them, and back again.
Last edited on
http://play.typeracer.com is fun =P

My fastest speed is 142 WPM and my average is 104 WPM over 179 races
Last edited on
Im about 45 wpm last time I checked :P
closed account (S6k9GNh0)
I type 74 words per minute with one error. It's difficult when the school computer can't deal with the basic online application and lags though. I'll try it on my G11 when I get home.

EDIT: I tried again on a different computer and got 90 without errors. Good enough. :D

EDIT2: I'll beat all your asses when I send fake packets to the server that say "I'm a typing genius". Not really, I'm not sure if that'll work plus it's probably illegal. That may be what Mr.1 did already though. I wish I could look at the ranking list T.T.
Last edited on
@computerquip,
I refer you to jRaskell's posts.
I'm on a laptop, so that's my excuse.
Seriously guys? You think writing a program to type for you is as fast as directly modifying your score from RAM? Lawl
Damn, cheating in this one is so much easier than I thought. Spent literally 5 minutes on this.

Legit:
http://img59.imageshack.us/img59/5083/26891501.jpg

Cheat:
http://img684.imageshack.us/img684/2679/64585083.jpg
XDDDD Holy mother of fsk!

First of all, This is why I love programmers. Instead of working hard to get a high score you instead write a small application that does it for you...or directly edit the score.
@mackabee

Lol. 31337 words per minute and still position 2 only.
mackabee: Is that a POST hack? If so, I think it's time to try with 2^31-1.
LOL, that's crazy.

Maybe we should all pull together to get position 1 and keep it. It'd be good to be able to say we have position no. 1.

@helios,
That's INT_MAX, right? Why not use UINT_MAX?
INT_MAX: +2,147,483,647
UINT_MAX: +4,294,967,295
Last edited on
helios: No, it's a GET hack. Almost identical though. POST data is sent through body whereas GET uses the URL to send data.

chrisname: 32 bits in an int. 2^31-1 is the signed value excluding 0 as a starting value. The reason we can't use UINT_MAX is because that would be a -1 value if the script uses signed representation.

I don't have access to that website from this network right now =[
Last edited on
Oh yeah, good point...

Edit: if we could find out whether or not the script uses unsigned or signed integers, then we could use UINT_MAX - 1; and it would be impossible to beat us unless the it was using unsigned 64-bit ints.

Does the script store your score on the server, or on your machine (that is, is it server- or client-side)? I would assume server-side, but if not, then it's a simple matter of using fork(), exec() and ptrace(), and the equivalents on windows (CreateProcess(), ReadProcessMemory() and WriteProcessMemory or something) (hell, you could just use a debugger like gdb).
Last edited on
Pages: 123