3 ms·
Thinking about it, one word of the nato alphabet gives you 4 bits, so you could have a check word out of the nato alphabet that contained a parity bit for each
by kybernetikos 3y ago
Thinking about it, one word of the nato alphabet gives you 4 bits, so you could have a check word out of the nato alphabet that contained a parity bit for each of your words. It wouldn't let you correct any errors, but it's a single, easy word that would give you a good chance of spotting errors in the other words. That's probably how I'd do it.
The problem with error correcting codes is that they typically need quite a lot more bits transmitted, and I'm trying to keep the number of words manageable without needing a huge wordlist. Of course if I could get a 65k wordlist I was happy with that'd be fine, but that seems very unlikely given how hard it was to get a good 4096 word wordlist.
- eternityforest 3y agoHaving a separate wordlist does seem like a pretty good plan, but if there's only a single bit per word, then you only have 50% chance of catching a single word swap, as opposed to something like a 4 bit CRC which should catch close to 15 out of 16 errors.
- kybernetikos 3y agoBased on your idea, I implemented a 3 bit CRC last night. Since my word list is 4096 words, each word represents 12 bits. This means that if I use a 3 bit crc, each word can check 4 other words. { words: [ 'beg', 'notably', 'renew', 'curious' ], crc: [ 'joy' ] } { words: [ 'beg', 'notably', 'able', 'curious' ], crc: [ 'joy' ] } [ '100', '000', '011', '000' ] 100000010000 [ true, true, false, true ] You can see it correctly identified that the third word is wrong. I will probably integrate something like this next time I update wherewords.id, although that might be a while....