4 Words

There's a app out there that employs 3 words to denote a 3m by 3m location and it seems to not work very well. Given the viciousness of their legal team and the insanity of the libel laws in their jurisdiction (guilt is assumed and the truth is not a defense), I will not address them by name. I will say that there's a whole site devoted to chronicling the issues of their system and their aforementioned rabid pack of lawyers. The claims I make against them are from that site and resources linked from it.

The areas that the combos cover do repeat but they're supposed to be thousands of miles apart. Turns out they can be as frequent as 5-10 km (3-6 miles) apart. Cue Maury Povich "That was a lie" meme. Also the choice of words get confused with one another, particularly when different accents are involved. Let's see if I can get the same functionality with 4 words and actually have some unique combinations that continue to be unique regardless of accent.

So in order to maintain the same claims as them, I've read that I'll need 2,714 unique words. These words will need to be no more than two syllables long, not too complex, and be sufficiently unique to not be confused with one another, even with an accent. They resorted to plurals and different tenses of the same words in order to cover the nearly 40,000 different words necessary to cover the same number of 3m x 3m squares in 3 words. Let's give it a try starting with A.

  1. Aardvark
  2. Aardwolf
  3. Abbott
  4. Action (shouldn't use Actor now, too similar)
  5. Actress
  6. Affect (can't use Effect now)
  7. Aggrieve
  8. Alter (no Altar now)

And so on. The issues have already started showing themselves and we haven't even gotten to accents yet!

The next issue is how to make the combinations unique. We don't want one square to be "Aardvark Aardvark, Aardvark, Aardvark" and the next to be "Aardvark, Aardvark, Aardvark, Aardwolf". Every square should have a word combination wildly different from its neighbors. Even better, we should not have the same word repeated in any combination to prevent confusion over the phone. That means extending the word list to accommodate this change. Instead of 2,714 words for 2,714^4 squares, we'll need 2,716 to cover 2,716 * 2,715 * 2,714 * 2,713 squares.

Now how do we go about distributing these words? I propose we find large numbers that are coprime with all of the above numbers and 2,712 (in case we have to skip a word from the last list), aren't too close to any of their factors or the other numbers we've chosen, and are coprime with those other numbers chosen, and rotate through each of those lists by that number. The objective is to never repeat a word until every word has been used or been skipped as a conflict. Different numbers are used for each list to reduce the chance of conflicts.

So for example, 457 is coprime with all 5 numbers and the closest factor to it of 2,716 is 388, so that's fine to use. Repeating the process with the other lists, other numbers that we can use for each list are 863, 1181, and 599. You can choose other numbers but primes work best. Now what we can do is just sequentially assign each 3m by 3m square an ascending number based off latitude and longitude and use modular arithmetic to determine which word we pull from each list.

Let's say we have square 50,000 and we want the code for it.
50000 * 457 % 2716 = 292
50000 * 863 % 2715 = 505
50000 * 1181 % 2714 = 1502
50000 * 599 % 2713 = 1193

So those are the indexes in each list for whatever location square 50,000 is. Even if we need more than 2,716 unique words to fulfill the criteria, so long as we choose our coefficients correctly, we should end up with a unique combination each time that differs greatly from its neighbors. Dealing with repeated words in a combination is an exercise for the coder.

Working backwards from this to a particular square on the map is also a challenge due to the modular arithmetic involved. We're entering the realm of reversing cryptographic hash functions here. Someone smarter than I will have to conjure up a method to work backwards from this. Creating a list with every combination is going to require terabytes of storage so that won't work. An algorithmic solution will be necessary.

I don't have the mobile app skills to put this into practice, but I encourage anyone who wants to give it a go to first do it in a safe area. I am not an expert in math and will not be held responsible if something goes wrong due to the implementation of this.

Day 63 of #100DaysToOffload

Tags: Technology Programming Math Rant