Frequently Asked Questions


If you have a question which is not mentioned here, please contact via email: [email protected]


GDPR / DSGVO

For your questions regarding the General Data Protection Regulation we have created this specific FAQ: GDPR / DSGVO FAQ (TODO: update link v3)

WPM - words per minute

WPM-calculation is based on the following calculation: 5 keystrokes equal 1 WPM, if you don't believe me, check Wikipedia about Words per minute :)

What is a keystroke?

Every key you hit on the keyboard to type a letter is one keystroke. The calculation also considers if you have to type uppercase letters or language specific letters who need 2 keystrokes to be typed (for example "A"). For example "quick" needs 5 keystrokes whereas "America" needs 8 keystrokes.

My results are not visible (in the competition)

You probably have to unlock your result by completing the anti-cheat-test. At the top of the page your should see 'notifications', clicking on it you will be able to participate in an anti-cheat-test.

My scores over 120 WPM are not visible

If you receive a result over 120 WPM you have to unlock it with an anti-cheat-test. Click on the speech bubble at the top of the site to check for notifications.

Translation - How can I help?

If you would like to help translate 10FastFingers into your language, please take a look at the translation page.

How do you know which language specific characters need more than 1 keystroke?

TODO: still accurate?

  • All languages: all uppercase letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
  • Catalan:
    • 2 keystrokes: à è ò é í ó ú Ç ! " · $ % & / ( ) ? ¿ @ # € ; : [ ] { } \
    • 3 keystrokes: À È Ò É Í Ó Ú ï ü
    • 4 keystrokes: Ï Ü
  • Chinese and Japanese: I currently just quintuple the characters. For example: "明年" will count as 10 keystrokes.
  • Czech:
    • 2 keystrokes: ó / ( ? : ! " ' ° % _ | 1 2 3 4 5 6 7 8 9 0 letter)
    • 3 keystrokes: ď ť ň (shift + ˇ, letter)
    • 3 keystrokes: Á É Í Ó Ú Ý (´, shift + letter)
    • 4 keystrokes: Ě Š Č Ř Ž Ň Ť Ď Ů (shift + ˇ, shift + letter)
  • Danish: Æ Ø Å (2 keystrokes)
  • Dutch: é (2 keystrokes)
  • Esperanto: ĉ ŭ ŝ ĝ ĵ ĥ (2 keystrokes)
  • French:
    • 2 keystrokes: â ê î ô û (^ + a e i o u)
    • 3 keystrokes: Â Ê Î Ô Û (^ + shift + a e i o u) ä ë ï ü ÿ (shift + ¨ + a e i u y) Ä Ë Ï Ü (shift remaining pressed + ¨ + a e i u)
    • 4 keystrokes: À È Ù (Alt Gr + ` + shift + a e u), Ç = Alt + 128 = 4 keystrokes, É = Alt + 144 = 4 keystrokes
    • Œ = Alt + 0140 = 5 keystrokes œ = Alt + 0156 = 5 keystrokes Ÿ = Alt + 0159 = 5 keystrokes
  • Galician:
    • 2 keystrokes: á é í ó ú Ñ
    • 3 keystrokes: Á É Í Ó Ú
  • German: Ä Ö Ü
  • Greek:
    • 2 keystrokes: ά ή ί ώ ό ύ έ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω
    • 3 keystrokes: ϊ ϋ ΐ ΰ Ά Ή Ί Ώ Ό Ύ Έ
    • 4 keystrokes: Ϊ Ϋ
  • Icelandic:
    • 2 keystrokes: é,ú,í,ó,á,ý (^ + e u i o a y)
    • 3 keystrokes: É,Ý,Ú,Í,Ó,Á (^ + shift + e y u i a)
  • Italian: é
  • Korean: Korean Keystrokes are now calculated correctly for each word.
  • Latvian: ē ū ī ā š ģ ķ ļ ž č ņ (2 keystrokes)
  • Lithuanian: Ą Č Ę Ė Į Š Ų Ū Ž (2 keystrokes)
  • Persian:ژ آ ء ّ َ ُ ِ
  • Polish: ą ć ę ł ń ó ś ź ż
  • Portuguese: ã õ á é í ó ú (2 keystrokes), à â ê î ô û (3 keystrokes)
  • Romanian: ă â î ș ț
  • Spanish:
    • 2 keystrokes: á é í ó ú Ñ ª ! " $ % & / ( ) ? ¿ @ # € ; : [ ] { } \
    • 3 keystrokes: Á É Í Ó Ú ü
    • 4 keystrokes: Ü
  • Turkish: Ö Ü Ç Ş Ğ İ
  • Urdu:ء آ ؤ ئ ث چ خ ذ ڈ ز ڑ ژ ض ظ گ ں ۂ ۃ ي ۓ
  • Vietnamese:
    • 2 keystrokes: ă â á à ạ ả ã đ é è ẻ ẽ ẹ ê í ì ỉ ĩ ị ô ơ ó ò ỏ õ ọ ư ú ù ủ ũ ụ ý ỳ ỷ ỹ ỵ
    • 3 keystrokes: ắ ằ ặ ẳ ẵ ấ ầ ậ ẩ ẫ ế ề ể ễ ệ ố ồ ổ ỗ ộ ớ ờ ở ỡ ợ ứ ừ ử ữ ự

My iPad auto-capitalizes the first character of every word

You can deactivate this behaviour, please follow this instruction: How to Make an iPad Stop Typing Initial Caps

What is the average wpm of the population

The average WPM on 10fastfingers is 42 WPM. This number is extracted from over 14 million tests, spread out over 41 languages.

How is the accuracy calculated?

TODO: still accurate?

For the calculation of accuracy (used in the text practice mode) the amount of mistakes made and the number of corrections used is taken into consideration.
Imagine a text requiring exactly 500 keystrokes. There are 4 possible cases:

  • 0 wrong word and 0 correction: 500 correct entries out of 500 = 500/500 * 100 = 100% accuracy.
  • 0 wrong word and corrections: e.g. 500 correct entries and 25 corrections = 500/(500+25) * 100 = 95,23% accuracy.
  • Wrong words and 0 correction: e.g. 10 wrong words worth 450 correct entries out of 500 = 450/500 * 100 = 90% accuracy.
  • Wrong words and corrections: e.g. 10 wrong words worth 450 correct entries out of 500 and 25 corrections = 450/(500+25) = 85,71% accuracy.
Thank you Linsk for coming up with this :)

How are the score/points in the Text Practice Mode calculated?

TODO: still accurate?

Everytime you complete a text you get a score, here is how it is calculated:

  1. The number of correct keystrokes is multiplied with the accuracy, for example: 500 (correct keystrokes) * 1.0 (100% accuracy) = 500 (acc_points)
  2. This value (acc_points) is now multiplied with the milliseconds needed divided by 60000 milliseconds. Lets say it tooks us 60 seconds to get 500 correct keystrokes: 500 / (60000 / 60000) = 500 (acc_time_points).
    This calculation integrates the time into our score, the faster you type correct and accurate, the higher your score.
  3. This value (acc_time_points) is now multiplied by all keystrokes the text consisted of divided by 500. Lets say the whole text consisted of 500 keystrokes: 500 * (500 / 500) = 500 (acc_time_length_points).
    This last step will give longer texts an edge over very short texts (below 500 keystrokes). This is needed or otherwise very short texts would be the best way to gather points.

Here is another calculation, this time with slightly different values:

500 * 0.95 = 475
475 / (62500 / 60000) = 456
456 * (500 / 500) = 456 points
and one more:
42 * 1.0 = 42
42 / (5000 / 60000) = 504
504 * (42 / 500) = 42 points
  

What is the tie-breaking rule?

TODO: still accurate?

  • If same WPM: the highest CPM wins.
  • If same CPM: the lowest wrong words wins.
  • If same CPM/wrong words: the lowest corrections wins.
  • If same CPM/wrong words/corrections: the earliest test taken wins.

How can I delete my account?

Log into your account, go to your settings page, click on 'account' and at the bottom you will find a 'Delete Account' link. Be aware that once your account has been deleted, it can't be restored and you have to create a new one. Once your account has been deleted, you won't be able to create a new account with your previous email address for 30 days.

Translations

#TODO: add links

Would you like to help translate 10FastFingers into your language? Join our project on Localazy.com and contribute to making the platform more accessible to users worldwide!

Getting Started

  1. Sign Up & Access
    • Create an account on Localazy and log in.
    • Search for the 10FastFingers project and request access.
    • Once approved, you'll see a dashboard displaying available languages and their translation status.
  2. Missing Your Language?
    • If your native language isn't listed, no worries! Just send me a message on Discord, and I'll add it for you.

How to Translate

  1. Select Your Language
    • Choose your preferred language and start translating.
    • You'll be presented with English phrases that need translation.
  2. Enter Your Translations
    • Type your translation in the provided space.
    • If a suggested translation appears at the bottom, feel free to use it if it fits.
    • Click Save Translation to confirm and move to the next key.
  3. Informal Tone
    • Please use an informal approach (e.g., in German, use "Du" instead of "Sie"). This may vary by language, so choose the most natural informal form.

Need Help?

If you’re unsure about a phrase, you can skip it for now. Feel free to ask for help by posting your question or the specific key in Discord—we’re here to support each other!

Advanced Stats

Glossary

  • Words: a full word with a space (the space locks in the word-input),
    e.g.: "house "
  • Chars: expected chars, regardless of composed, upper- or lowercase, e.g.: "a" is one char, "A" is another char
  • Keystrokes: sum of expected keystrokes per char (calculated based on keystrokesDictionary), e.g: "a" is one keystroke, "A" is two keystrokes
  • UserInput: actual user input from input field, with upper-, lowercase and accents etc. TODO example
  • Keys: actual typed keys, with all possibly typed extra dead (non-visible) keys, TODO example
  • Correct Words: Words that were finished without errors, e.g.: "house" TODO: is the space included?
  • Correct Chars: "a" and "A" each count as one
  • Correct Keystrokes: "a" counts as one, "A" counts as two
  • Wrong Words: Number of words that had at least one error, e.g.: if the word is "house", both would count as one wrong word: "hoise" and "eeeee"
  • Wrong Chars: see above
  • Wrong Keystrokes: see above
  • Spaces: the number of spaces you typed
  • Corrected Chars: Characters you typed incorrectly but corrected
  • Corrected Keystrokes: Keystrokes you typed incorrectly but corrected
  • Missed Chars: Characters you didn't type, e.g.: "house" is the word and you typed "hous"
  • Missed Keystrokes: Same as "missed chars" but on a keystroke basis, if the word is "ALERT" and you typed "ALER", this would count as two missed keystrokes
  • Extra Chars: if you typed more than necessary, e.g.: "house" is the word and you typed "houses"
  • Extra Keystrokes: same as extra chars
  • Total Keys: #TODO example
  • Total extra Keys: #TODO example
  • WPM Raw: Sum of all chars and spaces of all words, regardless of correct or wrong, per minute divided by 5.
  • Duration in Seconds: for a typing test and competition this value should be 60 seconds, for text practice and multiplayer mode this number will vary
  • Pace: #TODO example
  • CPM: #TODO example
  • CPM Raw: #TODO example
  • KPM: #TODO example
  • KPM Raw: #TODO example
  • Consistency: #TODO example

Calculations

Following calculations are made in V3. Listed here as basis for discussion:

WPM (Words per minute)
Sum of all expected keystrokes and spaces of all correct words calculated per minute divided by 5 (arbitrary word length).

const correctChars = stats.correctChars + correctSpaces
const perMinute = 60 / durationInSeconds
stats.wpm = Math.round((correctChars * perMinute) / 5)

WPM Raw
Sum of all chars and spaces of all words, regardless of correct or wrong, per minute divided by 5.

const totalChars =
    stats.correctChars + 
    stats.wrongChars + 
    stats.spaces + 
    stats.extraChars

stats.wpmRaw = Math.round((totalChars * perMinute) / 5)    

CPM (Chars per minute)
Sum of all chars and spaces of all correct words calculated per minute.

stats.cpm = Math.round(correctChars * perMinute)

CPM Raw
Sum of all chars and spaces of all words, regardless of correct or wrong, per minute.

stats.cpmRaw = Math.round(totalChars * perMinute)

KPM (Keys per minute)
Sum of all keys of all correct words calculated per minute. Note that Backspaces are filtered.

stats.kpm = Math.round(stats.correctKeystrokes * perMinute)

KPM Raw (Keys per minute)
Sum of all keys (correct, wrong, dead & extra) per minute.

stats.kpmRaw = Math.round(stats.userInputKeyStrokes * perMinute)

Pace (chars per second?)
Duration per char in milliseconds. Average time in seconds per char, regardless of correct or wrong.

stats.pace = roundTo2(durationInSeconds / totalChars)

Accuracy
Percentage of correct typed chars. Difference of correct chars and total chars as percentage.

const accuracy =
  (stats.correctChars / (stats.correctChars + stats.wrongChars)) * 100
  
return isNaN(accuracy) ? 100 : accuracy

Consistency
Typing consistency over time resp. average deviation on keys amount per second.

  const kpmRawArray = keysPerSecondArray.map((k) => Math.round((k / 5) * 60))
  const keysPerSecondDeviation = stdDeviation(kpmRawArray)
  const keysPerSecondAvg = mean(kpmRawArray)
  stats.consistency = Math.round(
    calcConsistency(keysPerSecondDeviation / keysPerSecondAvg)
  )
  
/**
 * This code calculates the standard deviation of an array of numbers.
 * The first two lines store the length of the array (n) and the mean of the array in two variables.
 * The last part calculates the standard deviation by mapping each number in the array to the difference between it and the mean,
 * squaring the result, and then calculating the average of all the results. The final result is the standard deviation.
 */
export function stdDeviation(array: number[]): number {
  try {
    const n = array.length
    const mean = array.reduce((a, b) => a + b) / n
    return Math.sqrt(
      array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n
    )
  } catch (e) {
    return 0
  }
}

/**
 * Returns the average (mean) of an array of numbers as a single number.
 */
export function mean(array: number[]): number {
  try {
    return (
      array.reduce((previous, current) => (current += previous)) / array.length
    )
  } catch (e) {
    return 0
  }
}

Score
Sum of correct chars and accuracy as a second measurement when same WPM

stats.score = stats.correctKeystrokes * stats.accuracy