Last updated
Was this helpful?
Last updated
Was this helpful?
In large part due to the complete lack of specification, reference implementation, or guidance from the task creator, came up with my own bespoke synthetic word list.
Words always consist of a series of consonant/vowel pairs. Uses a cut down alphabet to reduce possible confusion from overlapping pronunciation.
Some letters with overlapping pronunciation are removed: c: confusable with k or s, g: overlaps with j, x: overlaps with z, q: just because, v: similar to w and we have way more than enough characters anyway.
As it is, with this alphabet we can form 512000 different 6 character "words"; 28126 is a drop in the bucket. To spread out the the words a bit, add a bit of randomness. 28126 fits into 512000 18 and a bit times. Add a random multiple of 28126 to the encoder then modulus it back out on decode. Will get different results on different runs.
We don't bother to pre-calculate and store the words, just generate them on the fly.
Official pronunciation guide:
(Ok, I admit I manipulated that second to last one, but it is a correct and valid 3-word location in this implementation. There is less than 1 chance in 5000 that it will produce that specific word group though.)
A little thought experiment... Latitude, longitude to four decimal places is accurate to about 11.1 meters at the equator, smaller the further from the equator you get. What would it take to support five decimal places? (Accurate to 1.11 meters.)
360 * 100000 == 36000000; ceiling 36000000.log(2) == 26;
So we need 26 bits to cover 360.00000; half of that for 180.00000, or 26 bits + 25 bits == 51 bits
. 51 / 3 == 17
. 2**17 == 131072
indices. The previous synthetics routine provides much more than enough.
How many sylabics will we need to minimally cover it?
∛131072 == 50.7968...
So at least 51. The synthetics routine provide sylabics in blocks of 5, so we would need at least 11 consonants.
Capriciously and somewhat randomly cutting down the list we arrive at this.
10 times better accuracy in the same three, 6-letter word space.