From 3d164c48d0b979afdd83f58af9bb47e7c89c1877 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sun, 14 Jun 2020 09:37:27 -0700 Subject: [PATCH] Tweak game-ID generation toward more frequently used letters I'd noticed recently that game IDs seemed to have more Qs, Zs, and Js than it felt like they should. In fact, all letters were being given an equal probability of appearing, but that doesn't match our expectation that some letters should be "rare". In this commit we tweak the selection of letters toward more "common" letters. This should hopefully give game ID strings that are slightly more "friendly" looking in general. The set of available game ID values isn't reduced here (at least because of the above, but it is reduced because of part of what is described below), but when many game IDs are allocated it can now take longer for the random-selection algorithm to find an available one. We also switch from using 'B' and 'F'/'X' to instead using 'P' and 'S', again favoring letters that English speakers expect to be "common". This actually fixes a bug which I hadn't noticed before, in that the code has always been replacing a '5' in the input with 'S' but doing that after 'S' was replaced with 'F', so any input with '5' would not be mapped as intended. Now an input of '5' will work in the place of 'S'. --- lmno.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lmno.js b/lmno.js index 71ccc58..c2942a4 100644 --- a/lmno.js +++ b/lmno.js @@ -128,10 +128,10 @@ class LMNO { * 1. Vowels (AEIOU) to avoid accidentally spelling an unfortunate word * 2. Lowercase letters (replace with corresponding capital on input) * 3. N (replace with M on input) - * 4. P (replace with B on input) - * 5. S (replace with F on input) + * 4. B (replace with P on input) + * 5. F,X (replace with S on input) */ -LMNO.letters = "BCDFGHJKLMQRTVWXYZ"; +LMNO.letters = "CCDDDGGGHHJKLLLLMMMMPPPPQRRRSSSTTTVVWWYYZ"; const lmno = new LMNO(); @@ -142,8 +142,9 @@ function lmno_canonize(id) { /* Replace unused letters with nearest phonetic match. */ id = id.replace(/N/g, 'M'); - id = id.replace(/P/g, 'B'); - id = id.replace(/S/g, 'F'); + id = id.replace(/B/g, 'P'); + id = id.replace(/F/g, 'S'); + id = id.replace(/X/g, 'S'); /* Replace unused numbers nearest visual match. */ id = id.replace(/0/g, 'O'); -- 2.43.0