The only number whose Scrabble score equals itself is TWELVE

When Heather and I were playing Scrabble recently, one of us played TWELVE and were amused to observe that it scored 12 (it wasn't played on any premium squares). Scoring other numbers in our heads (ONE, TWO, THREE, etc.) we couldn't find any others that worked like this, and so we wondered if it was the only such number.

I started by writing a script which generated the written form of a number (1=ONE, 2=TWO, 666=SIX HUNDRED AND SIXTY SIX) and then added a function which calculated the Scrabble score for the word(s). I ignored spaces and didn't consider premium squares or the maximum size of a scrabble board. I then used these to test the first few hundred thousand numbers, and found that the only match was TWELVE.

I also found that the highest scoring number with n digits was the number made up purely of 6s. So 6 is the highest scoring 1 digit number, 66 is the highest scoring 2 digit number, etc. There were other numbers that scored as much (e.g. 65 scores as much as 66) but nothing that scored more. It was also obvious that the score for a number n does indeed tend to infinity as n tends to infinity, but much more slowly than n. So I set about proving that 12 was indeed the only number whose Scrabble score matches itself.

Proof Outline

  1. we will start by proving (with proof by contradiction) that the highest scoring number with n digits is the number made up purely of 6s (so for 3 digits it is 666, 4 digits is 6666, etc.)
  2. we will observe that for all numbers with 3 or fewer digits there is only a single match (TWELVE) which we did by exhaustively testing all of them
  3. we will then prove (with proof by contradiction again) that for all numbers with more than 3 digits, the smallest value possible for the number (1000 for 3 digits, 10000 for 4 digits, etc) is bigger than the maximum score possible for that number

Proof Details

  1. For numbers < 10 we find the maximum scoring number is SIX with a score of 10 (FIVE also scores 10)
  2. For numbers < 100 we find the maximum scoring number is SIXTY SIX with a score of 25 (FIFTY SIX also scores 25)
  3. All numbers < 1000 with the digits abc are written "a HUNDRED AND bc" so the highest scoring must be "SIX HUNDRED AND SIXTY SIX" with a score of 51 which is indeed what we find
  4. Let us assume there is a number with n digits where one or more digit is not a 6 but that scores more than the the number with n 6 digits
  5. We can always find a number which scores more by substituting all the non 6 digits with 6s thus contradicting the assertion that the number we started with was bigger than the one with 6s
  6. So the highest scoring number with n digits is the number 666.....6 with n 6s - which can also be written (10^n - 1)*(2/3)
  7. Let us break our number into blocks of 3 digits (units, tens and hundreds making up the first block, then thousands, ten thousands, hundred thousands etc.)
  8. Each block will either be 6, 66 or 666 which have sores of 10, 25 and 51 respectively
  9. Each block will also either have a number name (THOUSAND, MILLION, TRILLION, etc.) after it, or the word AND before it (in the case of the final block)
  10. AND scores 4 and the highest scoring number name is QUATTUORDECILLION with a score of 29, so in total each block of 3 must have score no more than 51+29=80
  11. A number with n digits will have at most ⌈n/3⌉ blocks of 3 (n/3 rounded up to the nearest integer) and thus score at most ⌈n/3⌉*80
  12. We found through testing that for numbers with 3 or fewer digits the only match is TWELVE
  13. Let us assume there is a number X with n digits (where n>3) where the score f(X) equals X
  14. The value of X must be greater than or equal to 10^n since that is the smallest number with n digits
  15. And the score of X must be less than or equal to ⌈n/3⌉*80 as we have shown above
  16. Since we picked X where X=f(x) X itself must be less than or equal to ⌈n/3⌉*80
  17. So since X must be greater than 10^n and less than ⌈n/3⌉*80 it follows that 10^n must be less than ⌈n/3⌉*80
  18. But in fact 10^n is greater than n*100 (for all n>3) and n*100 is great than ⌈n/3⌉*80 since n>⌈n/3⌉ and 100 is bigger than 80 
  19. This contradicts our assertion that such an X exists thus proving that there is no such number X with more than 3 digits where X equals the Scrabble score of X
  20. Since we already know that the only number with 3 or fewer digits that scores itself is 12, we have now shown that 12 is indeed the only such number

Javascript function to convert a number into the English written format (1=ONE, 2=TWO, etc.)

This takes any positive integer number (up to 10^66-1) and returns the English written format (in upper case) for that number. So 1 -> ONE, 666 -> SIX HUNDRED AND SIXTY SIX.

function inWords(num) {
  if (num==0) return "";
  if (num<20) return a[num].trim();
  if (num<100) return (b[Math.floor(num/10)] + " " + a[num%10]).trim();
  if (num<1000) return (a[Math.floor(num/100)] + " HUNDRED" + (num%100&&num%100<100?" AND ":" ") + inWords(num%100)).trim();
  for (var i=0; i<c.length; i++) {
    var name = c[i];
    var lower = Math.pow(10,3+i*3);
    var upper = lower*1000;
    var test = num%lower;
    if (num<upper) return (inWords(Math.floor(num/lower)) + " " + name + (test&&test<100?" AND ":" ") + inWords(test)).trim();
  throw "Too large for now";

Javascript function to calculate the Scrabble score for a word

This takes any string of characters and totals up how much it would be worth in Scrabble. It ignores any spaces or other non alphabet characters. It doesn't factor in any premium letter or word squares, and it doesn't care if you provide more letters than could possibly fit on a real Scrabble board.

function scrabbleScore(word) {
  var scores = [1,3,3,2,1,4,2,4,1,8,5,1,3,1,1,3,10,1,1,1,1,4,4,8,4,10];
  var score = 0;
  word = word.toUpperCase();
  for (var i=0; i<word.length; i++) {
    var n = word.charCodeAt(i) - 65;
    if (n<0 || n>25) continue;
    score += scores[n];
  return score;