Skip to content

Instantly share code, notes, and snippets.

@MaxHalford
Last active September 25, 2022 23:47
Show Gist options
  • Save MaxHalford/83e48c23a1086e463858aba4dc9990fe to your computer and use it in GitHub Desktop.
Save MaxHalford/83e48c23a1086e463858aba4dc9990fe to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">
<div class="grid-container">
<button class="grid-item" v-for="key in keys" @click="click(key[0], key[1])">
{{ key[2] }}
</button>
</div>
</div>
<script>
const { createApp } = Vue
createApp({
data() {
return {
cols: 6,
rows: 6,
c: 0,
r: 0
}
},
computed: {
keys() {
let keys = []
for (i = 0; i < this.rows; i++) {
for (j = 0; j < this.cols; j++) {
keys.push([i, j, Math.abs(i - this.r) + Math.abs(j - this.c)])
}
}
return keys
}
},
methods: {
click(i, j) {
this.r = i
this.c = j
}
}
}).mount('#app')
</script>
<style>
.grid-container {
display: inline-grid;
grid-template-columns: auto auto auto auto auto auto;
}
.grid-item {
border: 1px solid;
width: 36px;
height: 36px;
font-size: 22px;
text-align: center;
margin-top: -1px;
margin-left: -1px;
cursor: pointer;
}
</style>
<!DOCTYPE html>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app" style="display: flex; flex-direction: column;">
<div style="display: flex; flex-direction: row;">
<div class="grid-container">
<button
class="grid-item"
v-for="key in keys"
@click="click(key.r, key.c, charAtIndex(key.ranking))"
:disabled="charAtIndex(key.ranking) === undefined"
:style="key.r == r & key.c == c ? {'border-color': 'red', 'border-width': '2px', 'position': 'relative'} : {}"
>
{{ charAtIndex(key.ranking) }}
</button>
</div>
<div style="display: flex; flex-direction: column; margin-left: 20px; justify-content: center;">
<h1 style="margin: 5px">✍️ — '{{ input }}'</h1>
<h1 style="margin: 5px">📐 — {{ distances.reduce((sum, x) => sum + x, 0) }}</h1>
<button
@click="cancel()"
:disabled="input.length === 0"
style="margin: 5px; margin-top: 10px; width: 120px;"
>
Delete
</button>
</div>
</div>
<div style="display: flex; flex-direction: row; margin-top: 20px;">
<button @click="write('the last dance')">The Last Dance</button>
<button @click="write('house of cards')" style="margin-left: 12px;">House of Cards</button>
<button @click="write('peaky blinders')" style="margin-left: 12px;">Peaky Blinders</button>
</div>
</div>
<script>
const { createApp } = Vue
createApp({
data() {
return {
cols: 6,
rows: 6,
distances: [],
keysPressed: [],
mostCommon: 'tsbacmdhfprlwngiekjovu31yqz2x456897',
mostCommonAfter: {
"0": " 01s34t52798",
"1": "9310 26857s4",
"2": " 0159428ghkmno67",
"3": "0 1dt5249br367",
"4": " 0t312469578",
"5": " 0t814i57",
"6": " 6t07el35",
"7": " 06t1345",
"8": " 024813hmt67",
"9": "18 790245ta36",
" ": "tsoabmcfwdligphrenk jvuy231qz75x49680",
"a": "nrlts mdciypgkvubfwhazxejoq",
"b": "eaoluri ybcsjtmhdfknqwz13",
"c": "haoekrt iluyncswbdgqmv",
"d": " eaiosryduvlgtnhwmbfzcjkpx",
"e": " rsnadltecyvmxogpwfibkuhzqj12",
"f": " roiaefultygsknbcdmpx",
"g": " ehrioauslgnytdmfbkvcjw",
"h": "eoia turynsmlbwdfchjqvgp2",
"i": "ncteslogrdvma fpbkizxuqjwhy58",
"j": "oaeui hrfcdmny",
"k": "ie sanyoluhrtmbdfk19gjpvw2",
"l": "eial odsyutkbmfvpcrhwgnzj1",
"m": "aeoi ypubsmrncwltdhfxgjk1",
"n": " gdetaisconkybufvhljrmzqwxp",
"o": "nrfum lowsdvtcpgbykaiehxjzq",
"p": "earoihl psutydfbmkncw5",
"q": "u asiow",
"r": "ei aosytldnurkcmgvpbfhwzjqx",
"s": " teishaoupclkwmynqbfdrgvz2",
"t": "h eioarsutylcmwznbdgpfkjv2",
"u": "rnstlmeipgcb adfxykovjzhuq25",
"v": "eiaos yrudjknp",
"w": "aieoh nswrblydkucmtfgjpz",
"x": " ptiaexyomfucswbhr2",
"y": " soealnmptibwcrdzfgkuhvjqy",
"z": "aoe izyluhmktw"
}
}
},
computed: {
keys() {
// Returns a list of coordinates, along with the ranking of the key with respect to the
// last pressed key. That allows determining what will be the new character for that
// key in the next iteration.
let keys = []
let id = 0
for (r = 0; r < this.rows; r++) {
for (c = 0; c < this.cols; c++) {
keys.push({
id,
r,
c,
d: Math.abs(r - this.r) + Math.abs(c - this.c),
dc: Math.hypot(r - (this.rows - 1) / 2, c - (this.cols - 1) / 2),
ranking: null
})
id += 1
}
}
let sorted = structuredClone(keys).sort((a, b) => (
a.d - b.d || a.dc - b.dc || a.r - b.r || a.c - b.c
))
keys.forEach((key, i) => {
key.ranking = sorted.findIndex(x => x.id === key.id)
})
return keys
},
input() {
return this.keysPressed.map(x => x.char).join('')
},
r() {
return this.keysPressed[this.keysPressed.length - 1]?.r || 0
},
c() {
return this.keysPressed[this.keysPressed.length - 1]?.c || 0
},
prevChar() {
return this.keysPressed[this.keysPressed.length - 1]?.char
},
},
methods: {
click(r, c, char) {
this.distances.push(Math.abs(r - this.r) + Math.abs(c - this.c))
this.keysPressed.push({r, c, char})
},
charAtIndex(index) {
if (this.prevChar === undefined) {
return this.mostCommon[index]
}
return this.mostCommonAfter[this.prevChar][index]
},
cancel() {
this.keysPressed.pop()
this.distances.pop()
},
write(sentence) {
while (this.input.length > 0) {
this.cancel()
}
sentence.split('').forEach(char => {
let key = this.keys.find(x => this.charAtIndex(x.ranking) === char)
this.click(key.r, key.c, char)
})
}
}
}).mount('#app')
</script>
<style>
.grid-container {
display: inline-grid;
grid-template-columns: auto auto auto auto auto auto;
}
.grid-item {
border: 1px solid;
width: 36px;
height: 36px;
font-size: 22px;
text-align: center;
margin-top: -1px;
margin-left: -1px;
cursor: pointer;
}
</style>
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
<!DOCTYPE html>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="memorized" style="display: flex; flex-direction: column;">
<div style="display: flex; flex-direction: row;">
<div class="grid-container">
<button
class="grid-item"
v-for="key in keys"
@click="click(key.r, key.c, charAtIndex(key.ranking))"
:disabled="charAtIndex(key.ranking) === undefined"
>
{{ charAtIndex(key.ranking) }}
</button>
</div>
<div style="display: flex; flex-direction: column; margin-left: 20px; justify-content: center;">
<h1 style="margin: 5px">✍️ — '{{ input }}'</h1>
<h1 style="margin: 5px">📐 — {{ distances.reduce((sum, x) => sum + x, 0) }}</h1>
<button
@click="cancel()"
:disabled="input.length === 0"
style="margin: 5px; margin-top: 10px; width: 120px;"
>
Delete
</button>
</div>
</div>
<div style="display: flex; flex-direction: row; margin-top: 20px;">
<button @click="write('the last dance')">The Last Dance</button>
<button @click="write('house of cards')" style="margin-left: 12px;">House of Cards</button>
<button @click="write('peaky blinders')" style="margin-left: 12px;">Peaky Blinders</button>
</div>
</div>
<script>
const { createApp } = Vue
createApp({
data() {
return {
cols: 6,
rows: 6,
distances: [],
keysPressed: [],
mostCommon: 'tsbacmdhfprlwngiekjovu31yqz2x456897',
mostCommonAfter: {"1-1": "30 16982", "1-2": "0 1h4568n", "1-3": "0 d512", "1-4": "2 09348t", "1-5": " 084i", "1-6": "6t03", "1-7": " ", "1-8": "0 42m", "1-9": " 01579t", "1-a": " nlmrfdbstpcguiavkweyjqhz", "1-b": "aoelruihy bkmw", "1-c": "oahrlnieuys q", "1-d": "eaoiruhycndg lmw", "1-e": "lxvdamnystecigrupqk2", "1-f": "raioleuxdy", "1-g": "oraeiuhlyn", "1-h": "oeaiuyrgh2w", "1-i": "n msrtlfpcdvkoqw", "1-j": "oauei dfhry", "1-k": "ieanuoh9l12rty", "1-l": "oiaeuybf", "1-m": "aoyieurcsnx", "1-n": "aoeiuynsb", "1-o": "nuplfvrcmstkhdbyjawx", "1-p": "aroeuilhds y", "1-q": "ua", "1-r": "eoaiuhp ", "1-s": "taheopuicwlknmygq2srv", "1-t": "hreoaiwuyn", "1-u": "nlpfgrsdh", "1-v": "iaeor", "1-w": "hiaeowrycmu", "1-x": "xamseo", "1-y": "oea ", "1-z": "oeauz", "10- ": "taocsbmwdlhigpfryeknujv 2q13x7z45", "10-0": "0 t7", "10-1": "3", "10-2": " ", "10-3": " ", "10-4": "1", "10-5": "0", "10-6": " ", "10-7": "0 ", "10-8": "7", "10-9": "1", "10-a": "nr ltcsdmgvyipukbhfawxjzq", "10-b": "aeloruiby1", "10-c": "ehaiotkr ulycs", "10-d": " eaoisrdyuvwnh", "10-e": " rsnadxtlvceyipmofgbwkqhu", "10-f": " oraeiftulk", "10-g": "e aihorulsgcy", "10-h": "eoai utrmybn", "10-i": "ntslacergdvomf bixkpu", "10-j": "ueoiar", "10-k": " eisnlyuhkao", "10-l": "ealio bdysutmvnfghkz", "10-m": "eaoyi bspumr", "10-n": " gdtiesaconukyhfjz", "10-o": "nf rumlowsvtpgdciyzhkaexb", "10-p": "aeroihlp suy", "10-q": "u", "10-r": "i eoaslvytdurknmgbpcwf", "10-s": " tehisaoucplmwqnbky", "10-t": "h eoisrauytwlcmz", "10-u": "inrstlp mgceafdbxy", "10-v": "eiaos ", "10-w": "aioneh kl", "10-x": " iatp", "10-y": " seaopdlztwnm", "10-z": "yeo mi", "11- ": "tsoamwihfcbgdlprk2vejn 3y1u4q985", "11-0": "0 ", "11-1": "32491", "11-2": " ", "11-3": " 0", "11-4": " ", "11-5": "7", "11-7": "0 ", "11-a": "nrlm tdsiyckvbgupfwxzaeh", "11-b": "ueolarisyb", "11-c": "oeahktirluys ", "11-d": " eaisroydglmnuthv", "11-e": " ronsaltdecfymxvgpwbi", "11-f": " oiefaltru", "11-g": " ehioursaglfnt", "11-h": "eoai trunjywm", "11-i": "enlsgtrcdomav bfkizhujp", "11-j": "aou", "11-k": "eis alhrnot", "11-l": "ieloa sduythpw", "11-m": "a eiouympbsn", "11-n": " aegdtscionkvybuwhlrm", "11-o": "fnr umovltwdpsybgieckzhja", "11-p": "aeol isprhyuwt", "11-q": "u", "11-r": " esoiatdyuknlrcmvgbpfh", "11-s": " tsiehaouplmcwdqrvkb", "11-t": "he oiarstyunlwmcz", "11-u": "rnsemtlpgb idcakoxy", "11-v": "eiao", "11-w": "iaohesn bdyl", "11-x": "piat x2o", "11-y": " soecpmagitnb", "11-z": "a eoi", "12- ": "tmsadobclwfphigrnekvy2u jz1x3q5", "12-0": " ", "12-1": "1956", "12-2": " 098", "12-3": " 45", "12-4": "35 ", "12-5": " ", "12-8": "4", "12-9": "18", "12-a": "nlrt mscdiyvpgbufkzwhaox", "12-b": "leaoirubyc ", "12-c": "ethaorilku ysc", "12-d": " eaioryslgvtjnuf", "12-e": " nrslaetdvmycoxfphwkbugi", "12-f": " oareiuflgyt", "12-g": "h aeoisrulgmdyn", "12-h": "eoa itryuwdmnslcv", "12-i": "nlstercgodav fmikbuzpq", "12-j": "oeuai", "12-k": "ei snouht", "12-l": "delaios myupfckvztw", "12-m": "eaipo ubsyfr", "12-n": " dgetcsioankqjyvlmzbhf", "12-o": "gnrfu mlowdsvptycaxkieb", "12-p": "eroaily pthus", "12-q": "u", "12-r": "es oialdtyrcgmuvnfkbwx", "12-s": " teisohuapclkmqfybrw", "12-t": "h eiorsayultcmndz", "12-u": "nmrseltigdpab hfcy", "12-v": "eias o", "12-w": "aioen brlh", "12-x": "pit aeu", "12-y": " seorladbg", "12-z": "ioa", "13- ": "tsamobcdflpwighrknveyju127z6q3 589", "13-0": "15", "13-1": "12", "13-2": " 0", "13-3": "1", "13-4": "t", "13-5": "10", "13-6": " ", "13-8": "0", "13-9": "3a", "13-a": "nrltsc midygvukfpwahbq", "13-b": "elaoiruycb", "13-c": "ehoklatriu ywc", "13-d": "e aiosrduynzhmglb", "13-e": " rsnaldetycvxwmkgopfiuzhjb", "13-f": " eroiafultg", "13-g": "re hoislaundy", "13-h": "etoia rumld", "13-i": "ntlsdecgrmvoaip fbzx", "13-j": "ao", "13-k": "ie ynslouafg", "13-l": "eslioa dyfutvbwckr", "13-m": "easoi yupbmc", "13-n": "d egtcisnoakyfuljbrzqv", "13-o": "nrf uwmlsvkotpdaygcbeix", "13-p": "oealrpiyht bs", "13-q": "u", "13-r": "ei saoltdnyrmcugkfbpvh", "13-s": " teioshapucykmwldb", "13-t": "hei orasultycnwmz", "13-u": "rsntlge pmcdaibkfo", "13-v": "eiaos uy", "13-w": "aioeh nrsbmlc", "13-x": " tmeyfp", "13-y": " saomijlrebfd", "13-z": "ayezo", "14- ": "tscomalbdpwfirhgneujykv 2zq1796", "14-0": " ", "14-1": "9251 s", "14-2": " m", "14-3": "16 ", "14-5": "0", "14-6": "05", "14-7": "3t", "14-9": "1", "14-a": "nr dsmtlyigckvbhwfeouzpx", "14-b": "eoalriuy s", "14-c": "ehoakrti clwsu", "14-d": "s eaiourygfvlndhp", "14-e": " rsantdeclyvmgwxopbkihfu", "14-f": " oeiruafl", "14-g": "ei hoasrulngdtk", "14-h": "eioa trsufy", "14-i": "netcolsgrmdvaf pbixwz", "14-j": "oaue", "14-k": "ie snaydkho", "14-l": "ealoi ydsutnkbprc", "14-m": "aeoi brupysm", "14-n": "g edtisoacnyfkhzp", "14-o": "nrfuo tvmwlsdpcyjegkibazh", "14-p": "elriao sutyhp", "14-q": "u", "14-r": "aie osdlyuntrmgcbkvf", "14-s": " tiesahupolkwqcmnby", "14-t": "h eiasroyutlncmw", "14-u": "rstnlepbmagc idjk", "14-v": "eiaosp", "14-w": "eoaih snrl", "14-x": "ei o", "14-y": " soencludparw", "14-z": "eozk a", "15- ": "tomasldcbphrgfiwnej ukvy1zq2347", "15-1": "691", "15-2": " 10", "15-5": " 0", "15-6": "7", "15-9": "0 5", "15-a": "pnrtscdml ivgyuwkbehaqzfj", "15-b": "eauiolryb s", "15-c": "oeahkriul tsy", "15-d": "e oaisyruvcwbnlk", "15-e": " rsnaldxeycmtwfopvgbikh", "15-f": " rieoautlgf", "15-g": "ehai slrounmg", "15-h": "eiao rtunyqf", "15-i": "nescolrdtvag mpfbixu", "15-j": "eoaufhi", "15-k": "ei soanblr", "15-l": "iaelo dytuskvpfw", "15-m": "eaoiy psmurnb", "15-n": "g detiancsoymkjblfwqruvhx", "15-o": "nrfumvo wpdtslckhiybegxj", "15-p": "aerilhos uy", "15-q": "u", "15-r": " iesotadklnryubvfpg", "15-s": " teihsaocpulwnykb", "15-t": "h eiroasyutlmwdcbpn", "15-u": "nsrtlpec bdmgkifa", "15-v": "eiao", "15-w": "a oishenby", "15-x": "apot ", "15-y": " oseamwktc", "15-z": "oyale", "16- ": "tsabcmopwhfdlrgiuknevjy21 34z78569q", "16-0": "0", "16-1": "71 30", "16-2": " ", "16-3": " ", "16-4": " ", "16-5": "5", "16-6": "t", "16-7": "0 ", "16-9": "4", "16-a": "rnl mstcidygufzkbpaoxw", "16-b": "oairelusyct bj", "16-c": "aheotkirul nyc", "16-d": "e aiosruyvgndc", "16-e": " rsnladtcvexmwgiofykpqju", "16-f": " roaielfuk", "16-g": "eh orailtdus", "16-h": "eoa tiurmsncylw", "16-i": "neslcrovmgtdafb ixypkz", "16-j": "eouar", "16-k": "e isnoyt", "16-l": "eila odsuythkzcb", "16-m": "eaoip uybsmr", "16-n": " gedtsacionkyfbmwvuqhr", "16-o": "nfrulm wovspgbdycaetikj", "16-p": "heaoilrspm bud", "16-q": "u", "16-r": "eoi saldtyukrcmgnhb", "16-s": " tesaiuopmhcnbwklfg", "16-t": "heo iasryultmwcgn", "16-u": "nrtslgipmcba2 eu", "16-v": "eias ", "16-w": "eao inhsb", "16-x": "patiou ", "16-y": " soeiwalzbtpm", "16-z": "oe", "17- ": "tasobchdwflmirgpneyjku2 3v4q6", "17-0": "s10", "17-1": "08 1", "17-2": " 4", "17-3": " t", "17-4": "4 3", "17-5": " ", "17-6": " ", "17-7": "t 6", "17-8": " 8", "17-9": " ", "17-a": "nrt lsmyidcugpkwfhvoz", "17-b": "oeuialrbys", "17-c": "aeothkilruysd c", "17-d": " eiaosndrmvbhugl", "17-e": " rsnaedtlcmvgypfobxiuwzk", "17-f": " iuaorelftc", "17-g": "e houiraymglnf", "17-h": "ieaot rus", "17-i": "nvecstlgrdoampfbiuk8 ", "17-j": "aeuo", "17-k": "i eonasumy", "17-l": "el aoiydsutpfhwvk", "17-m": "eaopuiby mshnr", "17-n": "cega dstoinykrzhlbjfw", "17-o": "nrfmuv wosltcdkyjbpegxiha", "17-p": "eraio puthlyd", "17-q": "u", "17-r": "esa ioytdnlrcubgkfmvp", "17-s": " tiesahupckolywmbnqg", "17-t": "hi eoratsyculmbp", "17-u": "nrsetlgbpmdac ifk", "17-v": "eioas", "17-w": "oiaehn rdbs", "17-x": "tpci", "17-y": " oesait", "17-z": "oytei", "18- ": "tsmaobpdiwfcrlhenuvgkyj21 3qzx", "18-0": " t", "18-1": " ", "18-2": " ", "18-3": " ", "18-4": " 7", "18-6": "t", "18-8": " h", "18-a": "n rltdcimskywgvuphxfqb", "18-b": "ieaorlu cybt", "18-c": "ehaotirkyl u", "18-d": "e aiosrduvwygzp", "18-e": " rsnatdlecxygvwmikpfhou", "18-f": " reoiafutyl", "18-g": " eorihaugsl", "18-h": "eioa turysmnb", "18-i": "cneosmrtgldf avxbzu", "18-j": "oeai", "18-k": " eisnyoamf", "18-l": "ileo asdyutkzp", "18-m": "eao ipbyumn", "18-n": "gd etsiacokyrbuljnz", "18-o": "nfrulovmd wbcptsyaeghj", "18-p": "eil roahupmyst", "18-q": "u", "18-r": "eios yatnudrcklmvgbf", "18-s": " tesihuoacpmqyrlkb", "18-t": "h eioasrytulmcz", "18-u": "nrsitlge ypcmbxfad", "18-v": "eioa ", "18-w": "anioes hr", "18-x": "baep ", "18-y": " osepidcwtfr", "18-z": "ziae", "19- ": "tafobrhwcsgmdplienk2v uyjqz435", "19-1": "0 ", "19-2": " ", "19-3": " ", "19-7": " ", "19-a": "nrtlms idcyvfgkuaxwhpbe", "19-b": "euailrsob y", "19-c": " ehoakrtusilyc", "19-d": " eairodvsylnm", "19-e": " rasndlcetyxvmwfzuibop", "19-f": " reoiatufsl", "19-g": "e hiolsragd", "19-h": "ea oiturdml", "19-i": "ntlvcseogmdrbaf ipzjkx", "19-j": "aoiue", "19-k": "e isuaon", "19-l": " eliaodsyupfmhktr", "19-m": "eao yubipc", "19-n": " dgteascoiylknzv", "19-o": "nrmfulsvo wdtgcapbxkeiy", "19-p": "aeriloput hys", "19-q": "u", "19-r": "eio astyrndcumkblgjfpv", "19-s": "t esohpaicuwlmyqn", "19-t": "h eiosarutyclzwmk", "19-u": "nsrtcmpfxibglaedy", "19-v": "eaoi", "19-w": " iaoenhsr", "19-x": "tpime", "19-y": " ospnildmew", "19-z": "azoi", "2- ": "mstwldcgbpahnfrk1vyj6e", "2-0": " 01352", "2-1": " 1459", "2-2": " 10o", "2-3": "1 bt23", "2-4": " 6", "2-5": " 0", "2-6": " 6l", "2-7": "6", "2-8": " 08", "2-9": " 180", "2-a": "rtnlsmdcikpybvguw afhxjzqeo", "2-b": "seobdjnrqt", "2-c": "hacreot wilm", "2-d": " davgioreswu", "2-e": "arndltsevcgm oxyfiwbphqkuj", "2-f": "t frogcke", "2-g": "ayetnl ", "2-h": "eoairuy f", "2-i": "nslgrtdcvmafpekoxzu b5hj", "2-j": "a ", "2-k": "ieaylo u", "2-l": "aioelut mdybpvfwsc", "2-m": "eapo imbrxtgd", "2-n": " tdbcgeiosnavuflhkymjz", "2-o": "nrumlbwocds vtapyhgeixkfz", "2-p": "eiaorl yphn5ts", "2-q": "u", "2-r": "aoei utmcsyrjgdbnk", "2-s": "s clytanhipreo", "2-t": "raeo tsihulmy", "2-u": "nrstmlpcebidgafyjov kzh", "2-v": "eiao", "2-w": "eoialj", "2-x": "tipxaoyc ", "2-y": " selpnbcmiturado", "2-z": "o ", "20- ": "tsamoicwlbgpdhefr2nk1uj yv3z745qx", "20-0": " ", "20-2": " 59", "20-3": " ", "20-4": " ", "20-5": " ", "20-a": "ntrsldmci ypgkzfvabuh", "20-b": "leaoubiyrt", "20-c": "haoketrly ius", "20-d": " eoaisrulvymng", "20-e": " rsnadeltcyvmibxpgwfzu", "20-f": " oauireftn", "20-g": " ehuariolsyfn", "20-h": "eoi aturslb", "20-i": "nsocemgltrdpafvib z", "20-j": "uo a", "20-k": " islaen", "20-l": "elia dyotuskpw", "20-m": "aeo mspuyinwk", "20-n": " gdteaiokcsyxunjhrbz", "20-o": "nrfulomtvs pwidagcbxykej", "20-p": "eioalr hstp", "20-q": "u", "20-r": "eioas ytdulkrnvmcfphb", "20-s": " teishompaucwkn", "20-t": "h oeirsayutzwmcgdlp", "20-u": "rsnltecmx ajdipb", "20-v": "eioay k", "20-w": "iheoan spw", "20-x": " iptsa", "20-y": " seowlgnai", "20-z": "yozm", "21- ": "toamsdipfbclwrhevngujyx 25673k", "21-1": "936 ", "21-2": " 1", "21-3": " 0", "21-4": " ", "21-5": "t ", "21-9": "2", "21-a": "nstrmlcgp diykuvhjbaxwzf", "21-b": "eiaorlbsy", "21-c": "hoaktierl uys", "21-d": " eoisadblry", "21-e": " rnslatdceygpxwkvih", "21-f": " oiufradlte", "21-g": " eiorhuafdtyl", "21-h": "eai ortuyvd", "21-i": "ntercoalsgm fkpdvibx", "21-j": "aoieu", "21-k": "i easnyu", "21-l": "eoai ldysbuht", "21-m": "eaoi pyubnm", "21-n": " detgsckoiayvbfn", "21-o": "rnfmwl svubocdpktzay", "21-p": "eraiosl hput", "21-q": "u", "21-r": "esia ytounklgvmbwdfc", "21-s": " tesihucaoplmbnky", "21-t": "he oirmsaluwtycnb", "21-u": "nretlascmipxb ", "21-v": "eiao", "21-w": "oeains hu", "21-x": " iat", "21-y": " stoeam", "21-z": "eazuo", "22- ": "taosmcidfwblprghn2juek 5vyz134q", "22-0": " ", "22-1": "1 ", "22-2": " 90", "22-3": " ", "22-5": " ", "22-6": "6 ", "22-7": " ", "22-9": "9", "22-a": "rntlscdmyib fpugvawoh", "22-b": "oaeiul jbrsy", "22-c": "ektiaoh ruly", "22-d": " eaiosyruwlgfnx", "22-e": " rnsadectlyifowvxmpg", "22-f": " eoairful", "22-g": "e hoaluysir", "22-h": "eoa ritydufml", "22-i": "ntocgevrlsd fxaipmkub", "22-j": "oam", "22-k": "e silyan", "22-l": "ilea dysotufk", "22-m": "eaoi pybrucm", "22-n": "gt descioanybhfv", "22-o": "nrfwu olmsvebykdtgaphx", "22-p": "ea ohrpslibu", "22-r": "e iasoytlcgunrdhkpm", "22-s": " tehsaucoilpwkmb", "22-t": "h eioarutsymcfz", "22-u": "nrseptlmf aic", "22-v": "eia ", "22-w": "eoia rlhc", "22-x": " tpia", "22-y": " oesmtn", "22-z": "eila ", "23- ": "tswalbcfmopdgnir khey2u1jvq3", "23-0": "0", "23-1": "2", "23-2": "0 9", "23-5": "t", "23-6": "6", "23-9": "4", "23-a": "nrstlmcigyxd zvukfwhqpb", "23-b": "eaourilcb", "23-c": "oehrtiu klasw", "23-d": " esaoiuvlyr", "23-e": " rsndaclytemboixwhzupkgf", "23-f": " iuraoeflt", "23-g": " euaoirshdn", "23-h": "eaio tursym", "23-i": "noetsclgdarmfv ipkh", "23-j": "oare", "23-k": " isaeyol", "23-l": "iea lodsprcvy", "23-m": "aeopmyuis ", "23-n": " gtdesoanciuzflb", "23-o": "nrfmud wtkvlogspcyhabi", "23-p": "elapo rih", "23-q": "u", "23-r": " eioaldsytknprvgumfch", "23-s": "t ieshacpoyurq", "23-t": "he iosaruylt", "23-u": "nrtspi dmaxbce", "23-v": "eiao ", "23-w": "iaon ersbfc", "23-x": "op ", "23-y": " otawedlp", "23-z": "o ", "24- ": "tsbacolfmwpd3gihnr12jekyv u4", "24-0": "03", "24-1": "9", "24-2": " ", "24-6": " ", "24-9": "t", "24-a": "nrtlsm yivgbcwpudj", "24-b": "eaolui r", "24-c": "aretlh oikysucw", "24-d": " eiaosydvwu", "24-e": " rsnadtlmfhegcvyupxw", "24-f": " aeoirful", "24-g": " earihoyltus", "24-h": "eoi ruamnyt", "24-i": "ndtseolmarcvg fipq", "24-j": "o", "24-k": "ien ays", "24-l": "aeloid ysutgbk", "24-m": "eaoi ybum", "24-n": " gdetsaiocynuv", "24-o": "nr vuflosmtwpcdjeiakxyhb", "24-p": "aheliro tsyu", "24-q": "us", "24-r": "ei oyatnsdlkcrumfg", "24-s": " tihsealokrcypn", "24-t": "h eaoirsutmnyl", "24-u": "rslntekcgidmpy", "24-v": "eiao", "24-w": "oehai sr", "24-x": " ty", "24-y": " osafen", "24-z": "ia ", "25- ": "tasobmwfcildperhuvngk 27yj6", "25-0": "4", "25-1": "9 ", "25-2": " 0", "25-3": "0 ", "25-4": "0", "25-9": "7", "25-a": "nrtlis dcvgympfujkbw", "25-b": "euarobil", "25-c": "aheritko uly", "25-d": "e siarydow", "25-e": " rsantmdcveyhglfoxuw", "25-f": " oeiruatb", "25-g": "e aorhiuntf", "25-h": "eioa tyusrwmn", "25-i": "nceovtdlmafrgb sxhzpu", "25-j": "oae", "25-k": "e yansrid", "25-l": "al eiodutnsyr", "25-m": "aeoi bsymu", "25-n": " gedtaicnsofkyu", "25-o": "nrfoumv lwtdgpbcysia", "25-p": "alerh os", "25-q": "u", "25-r": "ei aostldgvckrmyunbp", "25-s": "t eisacpkuohl", "25-t": "h oiersauytcdml", "25-u": "rtnegcmsax dipy", "25-v": "eiao", "25-w": "oe ihnas", "25-x": "a", "25-y": " osn", "26- ": "toscawdmfbhgerulpyn 1vikj", "26-0": "01", "26-2": "k", "26-6": " ", "26-7": "16", "26-9": "7896", "26-a": "nlrtms cduyigkbepwvf", "26-b": "eaoiulbyr", "26-c": "aehtuokislnr ", "26-d": " eosaymuitg", "26-e": " srnadleuvxwyctgofipmk", "26-f": " uiarlefoty", "26-g": " eahirosglytu", "26-h": "eoai uty", "26-i": "nsroetcgaldvfb kmx", "26-j": "oa", "26-k": "iyens ", "26-l": " eliaodsvmy", "26-m": "aeo bywumis", "26-n": " dgtesikaoclyn", "26-o": "nrfum sldkwvcaoipgt", "26-p": "leoris h", "26-r": "ei oasntykrdlmvg", "26-s": " tiehpacsuwoyzkl", "26-t": "h oeaisutymrcbldw", "26-u": "srnlptimfxc bgde", "26-v": "eaois", "26-w": "aiho e", "26-x": " p", "26-y": " sobe", "26-z": "a", "27- ": "tsocbamwlferhdigkpnyu1j ", "27-0": "0", "27-1": "90", "27-6": "7", "27-7": "0", "27-8": "0", "27-9": "0", "27-a": "nrtsl gympdivcwzjbuhf", "27-b": "lira ueo", "27-c": "ahroiuektlc", "27-d": " eiosardnuyg", "27-e": " rnsadetclmvuxowyfip", "27-f": " euloiarft", "27-g": " houialesntr", "27-h": "eoi atsnyru", "27-i": "ncoltgevsrdap", "27-j": "e", "27-k": "e y1sahi", "27-l": "e lidasoupm", "27-m": "aeoyipsu bmc", "27-n": "d tgeiasocfkr", "27-o": "rfnl womyvsbauitkjpex", "27-p": "eipahro", "27-r": "esltny aiokdrbgcvhm", "27-s": "t pisuoehakcl", "27-t": "hoe irlstaycuvwm", "27-u": "rstnxelpbgma ", "27-v": "eai", "27-w": "ieoa y", "27-x": " yipt", "27-y": " soalewi", "27-z": "l", "28- ": "tosfcmladwgrbhie2pnk1jyu v", "28-0": " s", "28-1": "91", "28-7": "1", "28-9": "87", "28-a": "nmtsldricy zoufqax", "28-b": "ileu aroys", "28-c": "aho retksigyu", "28-d": " eiosavrydg", "28-e": " rsdtaecnyfxlpwghmvuq", "28-f": " oiarlte", "28-g": "hia oeulr", "28-h": "eotai ynr", "28-i": "ntcseloagmv dzfpi", "28-j": "eai", "28-k": "neis y1", "28-l": "eoad isluy", "28-m": "aopeu ybmsi", "28-n": "d egsitcobhynua", "28-o": "nrfu womvlsckgtpby", "28-p": "eah uliosry", "28-r": "ei ysoalndrmctv", "28-s": " tehicopsukd", "28-t": "h oeirlaumsyzt", "28-u": "nlpetmxrsfad", "28-v": "eai", "28-w": "aohnier ", "28-x": " up", "28-y": " sotlen", "28-z": "a", "29- ": "toamscfpblwhrdige2 nuky1vj", "29-1": "92", "29-2": "05", "29-7": "4", "29-8": "03", "29-9": "89", "29-a": "nrcmtd slpgbkyij", "29-b": "lroiaseu", "29-c": "aterkhios ul", "29-d": " ieorsuangvd", "29-e": " rsncdayltvegxpqmukf", "29-f": " roayife", "29-g": "e roahi", "29-h": "e atiory", "29-i": "ntocsrelgam vdfpbq", "29-j": "oe", "29-k": "it r", "29-l": "elaoidyk pmtusf", "29-m": "aeioypu smb", "29-n": " egdsaiotuck", "29-o": "fnr mulosgwcpthbjzdvx", "29-p": "eloai sy", "29-q": "su", "29-r": "ie yolsuartkndb", "29-s": " tesicaoupnhfm", "29-t": "h eiosyarulzct", "29-u": "rsatnpemgjlybxz", "29-v": "ieo", "29-w": "ineaswoh", "29-x": " ept", "29-y": " soepml", "29-z": "ia", "3- ": "tfsamdplwbijchgrnoyeukqv92 z", "3-0": " 01", "3-1": "321 0", "3-2": "1", "3-3": "0 ", "3-4": "0", "3-5": " ", "3-6": " e", "3-8": "14 ", "3-9": " ", "3-a": "rtdsncmglyivpukfz bhwqoajxe", "3-b": " coebraiuylmshz", "3-c": "kthreiao cluybsg", "3-d": "e tidyanoszurwmglkhbf", "3-e": " raenstcpldvmyxgkfbowhi", "3-f": "efoiat lur", "3-g": "heg iarousflmbndt", "3-h": "noaie rtum", "3-i": "nltmdscvegaprz fuok", "3-j": "aie uohd", "3-k": "eiahnyo u", "3-l": "lied aokvtyfcupmshgbwrzn", "3-m": "epaoibm usynrcljhd", "3-n": "g ndteasicokfyvrubjqlmhwzxp", "3-o": "mnsortd kwlpucgbeizjvyah", "3-p": "ep atilrhsoynk", "3-q": "u ow", "3-r": "enaitdrlko scvmgbfypuwhz", "3-s": "tse ihacpouknmqyfwlrbg", "3-t": "i tehuarosclynwfzmb", "3-u": "nsertlgcb idmyfapvuo", "3-v": "eiao yd", "3-w": " eanbolidshkrtw", "3-x": " aietywcfxuh", "3-y": " oslbmcapidrzwefnhtk", "3-z": "aiez", "30- ": "tolbasfdmiphwcge r2junyq1", "30-0": "0", "30-1": "9", "30-2": "095", "30-5": "t", "30-8": "6", "30-9": "871", "30-a": "ntrs lmdcigvupey", "30-b": "aelorusb ", "30-c": "hteoaiksry lcu", "30-d": " eioyvbrlsd", "30-e": " rasncdytmileuxvboqwzgf", "30-f": " iauolyef", "30-g": " ryoheiasgm", "30-h": "eiaos tmur", "30-i": "netoalsvrcdwqgpmf", "30-j": "ahe", "30-k": "i esl", "30-l": "ieola dymfut", "30-m": "aeo pybuis", "30-n": " tgdseciaofzv", "30-o": "fnrdumowl vbpsycxa", "30-p": "earpoh itd", "30-q": "u ", "30-r": "ei ostarlynduwcpkhg", "30-s": " tesahpucinolwb", "30-t": "heo iasrlutcy", "30-u": "nsreldcaptxikm", "30-v": "eoi", "30-w": "aei os", "30-x": " p", "30-y": " soper", "30-z": "a z", "31- ": "taombefsprdwchvijl2ungy k", "31-0": "03", "31-1": "9 ", "31-2": "0", "31-5": " ", "31-7": "5", "31-8": "2", "31-9": "7", "31-a": "nrltcmds pviufgyxk", "31-b": "e ualyro", "31-c": "eakrhliou", "31-d": " easigouhry", "31-e": " rnastdmlcevxuwyk", "31-f": " raief", "31-g": "eo ahi", "31-h": "eiaotubr ", "31-i": "noectflrsmgvabk", "31-j": "ea", "31-k": "ei", "31-l": "eiad yosgml", "31-m": "eoai scybp", "31-n": "d gsitceoa", "31-o": "fnrmvulw oykitgb", "31-p": "eourslihap", "31-q": "u", "31-r": "ea sioytlnrkhmb", "31-s": " tseacuhliop", "31-t": "ho eirayutsnwm", "31-u": "nrstmxed", "31-v": "eia", "31-w": "eaonis", "31-x": "tp", "31-y": " sowa", "31-z": "ae ", "32- ": "tbacdomswjfplhrin gkey", "32-0": "05371", "32-2": "01", "32-7": "3", "32-9": "8", "32-a": "nrmtdsl icgubykopw", "32-b": "aeoruli", "32-c": "erutokaihdl", "32-d": " eroysvauw", "32-e": " rnsaevydxipgtzwlukmch", "32-f": " eiortg", "32-g": " eshidayt", "32-h": "e oiat", "32-i": "nelvcosatpmr", "32-j": "eao", "32-k": "es mi", "32-l": " aieldsuom", "32-m": "aeoi ups", "32-n": " tsnedgcfkawhijyo", "32-o": "fnruc wldamvejo", "32-p": "erliostap", "32-r": "eiyas orltgvnmbupd", "32-s": "t eihaocdpks", "32-t": "h eirsoyutcma", "32-u": "rslnep xmty", "32-v": "eiao", "32-w": "hao eni", "32-x": " pt", "32-y": " aseo", "33- ": "tsacmobpwehrildgfk1njv0u", "33-0": "50", "33-1": "1s", "33-8": "2", "33-a": "nrdltism bwycxgz", "33-b": "oaeruil", "33-c": "ohkaeliuy", "33-d": "ao eyrivsb", "33-e": " rsdantglehcvoxwmb", "33-f": " aioe", "33-g": "ies ohla", "33-h": "eioa utr", "33-i": "nelcvartmfgsdopux k", "33-j": "oei", "33-k": "eidn a", "33-l": " deialomth", "33-m": "aoeisnmp", "33-n": "e dtscgiyoavnu", "33-o": "rnvfumlbtwdh cgo", "33-p": "elrp hayu", "33-r": "ei anolytuskhcdp", "33-s": " ethsuopaiw", "33-t": "haeo irtsymlu", "33-u": "trs lcpn", "33-v": "eio", "33-w": "ioansh", "33-x": "p a", "33-y": " e", "34- ": "osltwabgcjdhemrv1kiypz fn", "34-0": "93", "34-1": "9", "34-a": "nltrscy imgdkv", "34-b": "aireulsbo", "34-c": "eoah ltkr", "34-d": " sevliyora", "34-e": "r sndacytlfe", "34-f": " riet", "34-g": "iho sgr", "34-h": "eoriaun", "34-i": "entlsorcdvmp fb", "34-j": "a", "34-k": "sie o", "34-l": "eia sdlotm", "34-m": "aoe iysb", "34-n": " tdgekcasio", "34-o": "nurfmlwvto yhageds", "34-p": "iealhy o", "34-r": "esi otdrluyamk", "34-s": "ti sehaouk", "34-t": "h eiosualrzb", "34-u": "ntsriem z", "34-v": "eiao", "34-w": "aheok yi", "34-x": "ap", "34-y": " em", "34-z": "y", "35- ": "staobrfdhwijemnpuckyl 1", "35-1": "89", "35-9": "289", "35-a": "rmnclsdyzw gxkie", "35-b": "eouair", "35-c": "akthoeiy", "35-d": " iegsav", "35-e": " snramxbcgdyfowtupl", "35-f": " esrf", "35-g": "eil oru", "35-h": "eioatbdwnr", "35-i": "neoclagsdtvjrp", "35-j": "ua", "35-k": " ise", "35-l": "lyeioau dmsg", "35-m": "eom rybs", "35-n": "d tesgcoan", "35-o": "fmnurdlop cvgews", "35-p": "ste", "35-r": "i eosyaultvdrgk", "35-s": " tehwiysoukanm", "35-t": " hoiayutercs", "35-u": "rlgtcsm", "35-v": "eiao", "35-w": "eiao", "35-y": " eanos", "35-z": "hz", "36- ": "castohplifdbgu2erwx k", "36-2": "9", "36-8": "18", "36-9": "92", "36-a": "rnls tcmivhgdwk", "36-b": "eialo", "36-c": "eaohtrkql ", "36-d": "e aiuojs", "36-e": " rsnadltmhiwgc", "36-f": " ro", "36-g": "eh iarsjy", "36-h": "ei ou", "36-i": "netlascvoidzfk", "36-j": "uao", "36-k": " es", "36-l": "ld uoieyfksa", "36-m": "eaosmpi yb", "36-n": " geotidasncy", "36-o": "nrfmouwdklbit psvy", "36-p": "e yotsa", "36-r": "e tisnoydrkpa", "36-s": "t eikocsuaphyq", "36-t": "hro aisleuy", "36-u": "tngirlbfaxds", "36-v": "eia", "36-w": "aoen i", "36-x": "e ", "36-y": " ngtol", "36-z": "zo", "37- ": "tsoalfcidhgbmpnreuwvyj1", "37-1": "2", "37-9": "9", "37-a": "nlt sdygmruifco", "37-b": "abule", "37-c": "oehar kuitl", "37-d": " ieyarso", "37-e": " rnaldsmbtewc", "37-f": " amofe", "37-g": "lr egobuhn", "37-h": "eao rtu", "37-i": "dnrsmtlcpogevufi", "37-j": "a", "37-k": "esuylif ", "37-l": "l eosadib1vt", "37-m": "e a", "37-n": "gt edloasvc", "37-o": "nrfwmugitasvdoyc", "37-p": "olauesit", "37-q": "u", "37-r": "eis yuontlbf", "37-s": " tpesach", "37-t": "ih ourenafs", "37-u": "trsneam", "37-v": "ea", "37-w": "a ", "37-x": " r", "37-y": " nr", "37-z": "e ", "38- ": "ctmfsbriloghap2dw19v", "38-1": "0", "38-2": " ", "38-a": "rtlndsibc uwypmk", "38-b": "ierlu", "38-c": "okuay h", "38-d": " eyswod", "38-e": " nsrdtlcuyembgf", "38-f": " iaoeur", "38-g": "e islrhna", "38-h": "eoa isr", "38-i": "onemczltpdu", "38-j": "e", "38-k": "s", "38-l": "e oldasiuy", "38-m": "eao y", "38-n": " edcatsgyinfbo", "38-o": "frnlwu pshvg", "38-p": "ehia", "38-r": "eo aidynscupkt", "38-s": " tesuhoak", "38-t": "hiou ealbytr", "38-u": "restlnicgmavp", "38-v": "aes", "38-w": " ao", "38-y": " sokf", "39- ": "tcaowsljedbhrqgpifk2v", "39-0": "3", "39-1": "9", "39-2": " 0", "39-9": "1", "39-a": "nlrmstic ", "39-b": "eroaui", "39-c": "oaheikrn ", "39-d": " saoyev", "39-e": "rs nyclatwodimv", "39-f": " rieau", "39-g": "eohuy", "39-h": "eaio", "39-i": "ongcsmrevltdbaif", "39-k": " ri", "39-l": "leioa yp", "39-m": "a eocp", "39-n": "dti asge", "39-o": "nurpfwsoylvg", "39-p": "es up", "39-r": "eiysaocdp v", "39-s": " tseipa", "39-t": "hs oairuteylm", "39-u": "rxnmeslt", "39-v": "ei", "39-w": "ean", "39-y": " n", "39-z": "ez", "4- ": "tbscmgladfwhporinekyvju qz72x1359", "4-0": " 08", "4-1": "1 0", "4-2": " ", "4-3": " ", "4-9": "0", "4-a": "nr lstmkcdihgypuawvbjxzef", "4-b": "aioelur ybsc3", "4-c": "kh eouaityrlwc", "4-d": " eioaylsbrhfwgtdmcnupv", "4-e": " rnlstemadpwcbviogykfzhx", "4-f": "ofa ieurltybsmp", "4-g": " ioeharsulmdngykt", "4-h": "te aoilsubynmrwhqf", "4-i": "noecsldtrmfga pbvzkuqhxw", "4-j": "aeouin", "4-k": " eiasynuomlbtfdjk", "4-l": " eioaldysrubtfhmvpgwjk", "4-m": "ae iopymsub1wtl", "4-n": "e tigdacyskonbhlrfmuj", "4-o": "rnd lsmtcouvpwiykegbhfa", "4-p": "e iahylpstufordk", "4-q": "u ", "4-r": "iey alogtcnsmdrkupvhfz", "4-s": " etsihoaupcylmdknw", "4-t": " ehaoilyzrtsucnbgw", "4-u": "rtsmplin ebgcadfz", "4-v": "eiaoy", "4-w": "ae oihnlbuzdg", "4-x": "a ite", "4-y": " oaiesbrfctmlghju", "4-z": "iyoa ezw", "40- ": "tasiwohp juv1kgf2rxm", "40-0": "0", "40-1": "1", "40-3": "7", "40-9": "7", "40-a": "nrtkymil dcbxpgsu", "40-b": "eal", "40-c": "ohiareclk", "40-d": "imshr e", "40-e": " srnetdxahmcg", "40-f": " rti", "40-g": " oih", "40-h": "eao tri", "40-i": "nstcelaofdugrb", "40-j": "eao", "40-k": "i e", "40-l": "eli osdyub", "40-m": "meaisp", "40-n": " dtseicbaog", "40-o": "numf tclreiv", "40-p": "hearyo ", "40-q": "u", "40-r": "e syoarivldtpn", "40-s": "t ehyicdbls", "40-t": "heiroalzc u", "40-u": "srndizael", "40-v": "ies", "40-w": " aie", "40-x": " ", "40-y": " den", "40-z": "l", "41- ": "obamsvlwcfthgeinrjpk2", "41-0": "8", "41-1": "9 ", "41-2": "0", "41-7": "4", "41-a": "nmstld rvfic", "41-b": "clye ", "41-c": "ealrhk", "41-d": "eis ovylag", "41-e": " rstclyahdgnm", "41-f": " ea", "41-g": "serh", "41-h": "eio yrta", "41-i": "snlacotrf d", "41-j": "eo", "41-k": "ei ", "41-l": "eiald ", "41-m": "einpa", "41-n": " dgetonisay", "41-o": "rnfumgswytl", "41-p": "iealh", "41-r": "eail nvsotrg", "41-s": " tepicbuma", "41-t": "h oeai", "41-u": "srtlbae", "41-v": "iae", "41-w": "oa", "41-x": "ta", "41-y": " m", "41-z": "ez", "42- ": "twsihmabgfcdnjl", "42-0": "1", "42-2": "0", "42-4": "1", "42-9": "5", "42-a": "nrtlymgikus d", "42-b": "eruol", "42-c": "toae ", "42-d": " stea", "42-e": " rdnsleyatx", "42-f": " far", "42-g": "er oi", "42-h": "eoi l", "42-i": "sncotvae", "42-j": "a", "42-k": "i", "42-l": "eolid ua", "42-m": "ye pa", "42-n": "eogdt iks", "42-o": "rfn tmgcuh", "42-p": "heai", "42-r": "siote yadn", "42-s": " htlpfmeou", "42-t": " ehsiotmlr", "42-u": "r", "42-v": "oea", "42-w": "ioa", "42-y": " sd", "42-z": "l", "43- ": "istcbhalpmwgonkuf27 vd", "43-0": "0", "43-1": "09", "43-5": "8", "43-a": "tsrcim nl", "43-b": "lor", "43-c": "soteh", "43-d": "e rvy", "43-e": " rnaedsowiymt", "43-f": " olr", "43-g": "ea i", "43-h": "oie maun", "43-i": "nvlrdspebzo", "43-j": "o", "43-k": "e", "43-l": "ealdi", "43-m": "ap oie", "43-n": "dt cgoiab", "43-o": "rnlsmauwcid", "43-p": "hea", "43-r": " yiaeltdskng", "43-s": "t esucro", "43-t": "iho ersctau", "43-u": "srbt", "43-v": "ei", "43-w": "rheao", "43-x": "p", "43-y": "s ", "44- ": "twcoamdnibpjek slrf", "44-0": "4", "44-2": "0", "44-7": "0", "44-8": "2", "44-9": "8", "44-a": "tndcsmlprxw", "44-b": "eaul", "44-c": "ehoki", "44-d": " oeiy", "44-e": "r scaenyl", "44-f": "a", "44-g": " uoar", "44-h": "eiaor", "44-i": "oncsglvdrpetu", "44-k": "i", "44-l": " odilcu", "44-m": " aeoim", "44-n": " docteigs", "44-o": "rl nufogt", "44-p": "asheui", "44-r": "eid aosglyvun", "44-s": "t aispeh", "44-t": "i hrosu", "44-u": "snprl", "44-v": "ea", "44-w": "ah o", "44-y": " ", "44-z": "a", "45- ": "vcofltsewp1d3rm8h2", "45-0": "t0", "45-2": "0", "45-8": "4", "45-a": "rnlctudegm", "45-b": "lr", "45-c": "hitekuao", "45-d": " oeswi", "45-e": "n rdsakcypt", "45-f": " o", "45-g": "r h", "45-h": "eo", "45-i": "nagocditvr", "45-j": "a", "45-k": "ei", "45-l": "eodliuam", "45-m": "eoa", "45-n": "dtg evi", "45-o": "nvlromgif tdw", "45-p": "eh t", "45-r": " iselypua", "45-s": "ot hne", "45-t": "eihtamorus", "45-u": "ratgkm", "45-v": "ie", "45-w": "oiea", "45-x": "i", "45-y": "i", "46- ": "otafbmswghp1n", "46-0": "30", "46-8": "t", "46-a": "nrugol ic", "46-c": "artlhoy", "46-d": "ei yus", "46-e": "rsn lwdcae", "46-f": "el i", "46-g": "hye ", "46-h": "eyta", "46-i": "nopsctlvemg", "46-k": " e", "46-l": "iol ud", "46-m": "aeo p", "46-n": " egdiycost", "46-o": "nflrcv pkdsw", "46-p": "os", "46-r": "ealioshyd nbg", "46-s": " iht", "46-t": "h ireao", "46-u": "rlt", "46-v": "oei", "46-w": "ihon", "47- ": "tviesrdb1ylgoh", "47-0": "9", "47-1": "3", "47-a": "tsipcm ln", "47-b": "uia", "47-c": "aeik", "47-d": " s", "47-e": "s rnevat", "47-f": " faol", "47-g": " ueih", "47-h": "e iotry", "47-i": "vedsncrog", "47-k": "i", "47-l": "laeidok", "47-m": "oau", "47-n": "s gatueyo", "47-o": "lnotfpewrhdm", "47-p": " eh", "47-r": "iesl mrho", "47-s": "ta oc", "47-t": "hoyisreu", "47-u": "ts", "47-v": "i", "47-w": " i", "47-y": " ", "48- ": "oarybfwsgmveidthlj", "48-1": "0", "48-3": "t", "48-a": "mpsurltn", "48-b": "o", "48-c": "eok", "48-d": "eai", "48-e": " ntlugxsrpyvd", "48-f": " s", "48-g": "sih", "48-h": "aes t", "48-i": "nemtalsc", "48-k": "e ", "48-l": " daiyloe", "48-m": "ea ", "48-n": "gaoc", "48-o": "nrlmdiyau", "48-p": "eh", "48-r": "oifsle", "48-s": "t hsocp", "48-t": "h iyaoe", "48-u": "star", "48-v": "eo", "48-y": "e s", "49- ": "tiwr12fas34nodgj", "49-0": "9", "49-a": "rlnpm h", "49-b": "ie", "49-c": "ea", "49-d": " r", "49-e": " srnxtec", "49-f": "re", "49-g": " er", "49-h": "ei ot", "49-i": "nvmcseo", "49-j": "e", "49-l": " ido", "49-m": "eos", "49-n": "td gcie", "49-o": "rlfnavw", "49-p": "ehoy", "49-r": "eyovc", "49-s": " seiyma", "49-t": "eisraho uc", "49-u": "sxt", "49-v": "oe", "49-w": "ia", "49-x": "p", "49-y": "o e", "5- ": "otmsaiwbdclgfrhnepk ujy2vz345qx697", "5-0": " 2", "5-1": "120", "5-2": "124", "5-3": "r9", "5-5": "t", "5-7": " t", "5-9": "1", "5-a": "snltr mdgbpcyiewvhkaufzox", "5-b": "aeouirlyb s", "5-c": "oaher ltiukysc", "5-d": "e aoirsyulhnwdbmt", "5-e": "r nystdlamcvxeifgkuphzbowq", "5-f": "aiorle utfysp", "5-g": "ear iouhlsgnyb", "5-h": "e oaiutsbwflyrhqpcmd", "5-i": "ncegstadlo vrfmbpixku", "5-j": "oaeui", "5-k": " ieasolytmrfpbwdn", "5-l": "eia oysludktmvnrbchw", "5-m": "aieoyup bswnrclm", "5-n": " gdtieaosycnkujfbzh", "5-o": "nrf uwlmtosycvpdgeikxabh", "5-p": "eairloh psuty", "5-q": "u", "5-r": " eaiodntsyclmurwgfbhkpvz", "5-s": " teihaouscklpwmfyqnbrd", "5-t": "h eoliraysutmwbnd2jgc", "5-u": "lnrsmpeigdt cafbok", "5-v": "eiaos", "5-w": "aoieh bnrly", "5-x": " yf", "5-y": " oeswbtmvdanzlfqpc", "5-z": " ealzyoi", "50- ": "fostwm rckd1b", "50-a": "drlu", "50-c": "ealt", "50-d": " ei", "50-e": "r sanivt", "50-f": " ro", "50-g": " o", "50-h": "es", "50-i": "ngrczlp", "50-j": "o", "50-l": " ue", "50-m": "nea", "50-n": " doae", "50-o": "vnlrubfs", "50-p": "al", "50-r": "oayditsc", "50-s": " tico", "50-t": "heas", "50-u": "r", "50-v": "ei", "50-w": "eo", "50-x": " p", "50-y": " m", "51- ": "pgmftsj12vdhbawn", "51-1": "9", "51-a": "sgckfr", "51-b": "ea", "51-c": "rhe ", "51-d": " vsei", "51-e": "r smpd", "51-f": "ra ", "51-g": "ah", "51-h": "er", "51-i": "cntmds", "51-k": "i", "51-l": " aiklu", "51-m": "uoa", "51-n": " tygde", "51-o": "rfnlbmvsh", "51-p": "e ", "51-r": " estkoi", "51-s": " tcio", "51-t": "i ohsa", "51-u": "tr", "51-v": "ei", "51-w": "ae", "51-z": "a", "52- ": "miwug2tsoka", "52-9": "7", "52-a": "ticrsy", "52-b": "se", "52-c": "shua", "52-d": "ue i", "52-e": "rsal n", "52-f": " afo", "52-g": "rol", "52-h": "eotn", "52-i": "aesntco", "52-j": "a", "52-k": " e", "52-l": "lu", "52-m": "ob ie", "52-n": "t igs", "52-o": "umi", "52-p": "rae", "52-r": " eloiydcus", "52-s": "tqp", "52-t": "h uias", "52-u": "sb", "52-v": "eia", "52-w": "e", "53- ": "grkidewfs", "53-7": "6", "53-a": "rlnztym", "53-b": "l", "53-c": "tkh", "53-d": "s", "53-e": "n abslv", "53-f": "i", "53-g": "oe", "53-h": "ed", "53-i": "ndomsgi", "53-k": "i", "53-l": "adey", "53-m": "yo ", "53-n": "egs", "53-o": "numrs", "53-p": "e", "53-q": "u", "53-r": "etoais", "53-s": "tespi ", "53-t": "ieh l", "53-u": "nsmfre", "53-w": "ar", "53-y": "l", "54- ": "al1th", "54-a": "tfs", "54-b": "t", "54-d": "ae", "54-e": "s reqaol", "54-f": "fo", "54-g": "aodh", "54-h": "eo", "54-i": "oltecn", "54-k": "n", "54-l": "e ali", "54-m": " eoib", "54-n": " tdscegm", "54-o": "usnb", "54-p": "e", "54-r": "im ke", "54-s": "t seop", "54-t": "o re", "54-u": "asn", "54-v": "e", "54-w": "i", "54-y": "sm ", "54-z": "z", "55- ": "taswmbd", "55-1": "9", "55-a": "nymr t", "55-b": "ir", "55-c": "e", "55-d": "eo ", "55-e": "s roylnc", "55-f": "f", "55-g": " ", "55-h": "ta", "55-i": "nks", "55-l": "lis", "55-m": "es", "55-n": "igt", "55-o": "nro", "55-p": "a", "55-q": "u", "55-r": " i", "55-s": "tesi", "55-t": " risuha", "55-u": "s", "55-z": " ", "56- ": "cgft hbop", "56-9": "7", "56-a": "iruc", "56-b": "u", "56-c": "i", "56-d": "a", "56-e": "n", "56-f": "i", "56-g": " ", "56-h": "e", "56-i": "c ofn", "56-k": "i", "56-l": "e", "56-m": "ae", "56-n": "dgcta", "56-o": "d m", "56-r": "yeagt ", "56-s": "ocei ts", "56-t": "heioma", "56-u": "ra", "56-w": "o", "56-y": " e", "57- ": "gpacfdjw", "57-7": "0", "57-a": "tpli", "57-b": "o", "57-c": "hekral", "57-d": "s ", "57-e": "l rsg", "57-f": "e", "57-g": "sie", "57-h": "ie", "57-i": "tolanr", "57-m": "a", "57-n": "tsg", "57-o": "nr ut", "57-p": "o", "57-r": "ae", "57-t": "oa l", "57-u": "sd", "58- ": "otgl", "58-a": "rlb", "58-c": "o", "58-d": "ei", "58-e": "s ", "58-f": "r", "58-g": "a ", "58-h": "o", "58-i": "nrp", "58-j": "r", "58-k": "s", "58-l": "laeui", "58-n": "s", "58-o": "rnxp", "58-p": "pu", "58-r": "ylib", "58-s": " oh", "58-t": "i uah", "58-u": "t", "58-w": "i", "59- ": "stjih", "59-a": "nlmt", "59-b": " r", "59-e": "as", "59-g": "a", "59-h": " e", "59-i": "s oeln", "59-l": "ad se", "59-n": "gs", "59-o": "orunt", "59-p": "lu", "59-r": "lptoe ", "59-s": " t", "59-t": "h", "59-u": "tnb", "59-x": "e", "59-y": " ", "6- ": "toasbcfdrwmiglphe kjnvuyz28q937451", "6-0": "t", "6-1": " 71", "6-2": " g175", "6-3": "9 0", "6-4": " 06", "6-5": " 0", "6-6": "0", "6-7": "0", "6-9": "1 ", "6-a": "nrtlsm dycvipkgbuwfazh", "6-b": "eoauirlytsjb", "6-c": "aohet iklrcuyv", "6-d": " aeiovusrdygjh", "6-e": " rsndaltevcymfgiwpbxouk", "6-f": " oiefaulrnt", "6-g": "e haiorunlwt", "6-h": "eioa rtuynlmcb", "6-i": "ntclsgredomavf bxipkzjy", "6-j": "auoic", "6-k": " eiualyotnrh", "6-l": "iaek lyoudstfbmpcwng", "6-m": "eaoi ypubmclrts", "6-n": " gadteiscounyklvfbhmxqrj", "6-o": "nrfum losctdwypvgxkaibhqze", "6-p": "eoaitphlru symc", "6-q": "ua", "6-r": " eoiaysuptdnmklrfcgvhbwq", "6-s": " tsheioacpulmwkvnqy", "6-t": "h ioerasulytmpbcnw", "6-u": "rsntmlpeicag dbkfyzv", "6-v": "eiaos", "6-w": "ioae hsnrbml", "6-x": "pety if", "6-y": " seolambnkdctr", "6-z": "oaeliu", "60- ": "lahiv", "60-a": "rks", "60-e": "r on", "60-h": "ea ", "60-i": "n", "60-j": "o", "60-l": "es l", "60-m": "e", "60-n": "dicg", "60-o": "lnm", "60-p": "e", "60-r": "eu", "60-s": "ipae", "60-t": "ih ", "60-u": "rl", "61- ": "goib", "61-a": "rkm", "61-c": "e", "61-e": "d tsr", "61-h": "eo", "61-i": "osnv", "61-k": "s", "61-l": "aeoi", "61-m": " ", "61-n": "s c", "61-o": "sn", "61-p": "i", "61-r": " d", "61-u": "s", "61-v": "e", "62- ": "sgbmo", "62-a": "nr", "62-b": "e", "62-c": "e", "62-d": "oe", "62-e": "r d", "62-g": "a", "62-i": "rna", "62-k": "e", "62-m": "e", "62-n": "ca", "62-o": "nu", "62-r": "tr", "62-s": "h e", "62-t": "h", "62-v": "a", "63- ": "ofr", "63-a": "mlr", "63-b": "l", "63-c": "r", "63-d": " ", "63-e": "n pra", "63-g": "r", "63-h": "om", "63-m": "y", "63-n": "d ", "63-o": "eu", "63-r": "i st", "63-s": "h", "63-u": "s", "64- ": "swoij", "64-a": "c", "64-d": "so", "64-e": "s", "64-f": "e", "64-h": "a", "64-i": "ts", "64-l": "o", "64-m": "be ", "64-o": "rf", "64-p": "h", "64-r": "eadi", "64-s": "ei", "64-u": "t", "64-y": " ", "65- ": "sc", "65-a": "n", "65-b": "l", "65-c": "h", "65-d": " ", "65-e": " dnlt", "65-f": " ", "65-i": "onc", "65-j": "a", "65-o": "fon", "65-r": "p", "65-s": "iou", "65-t": " ", "65-w": "a", "66- ": " aswo", "66-a": "lm", "66-c": "ao", "66-d": "i", "66-f": " ", "66-i": "d", "66-l": "il", "66-n": "ntd ", "66-o": "nd", "66-p": "e", "66-s": "e", "66-t": "u", "66-u": "p", "67- ": "sem", "67-a": "wn", "67-d": "ce", "67-e": "c", "67-i": "bn", "67-l": "lo", "67-m": "e", "67-n": "o", "67-o": "lf", "67-p": "e", "67-s": "p", "67-u": "r", "67-w": "o", "68-b": "l", "68-c": "hr", "68-e": "lsr", "68-f": " ", "68-l": "sb", "68-m": "u", "68-n": "g ", "68-o": "nwo", "68-p": "o", "68-r": "n", "68-s": "c", "68-w": "a", "69- ": "ec", "69-a": "r", "69-b": "y", "69-c": "o", "69-h": "i", "69-l": "e", "69-n": " ", "69-o": "kd", "69-r": "es", "69-s": " t", "69-u": "r", "69-w": "s", "7- ": "tosa bcmfwlipdhrg3nejkvyzu2179q50", "7-0": "704s ", "7-1": "031 ", "7-2": "0", "7-3": "1 ", "7-4": " ", "7-5": "4t", "7-7": " ", "7-8": "3", "7-9": "1", "7-a": "nlrtys dcmpigukvbwazhfoe", "7-b": "oaeyluirbf s", "7-c": "hkr aoeiltucybs", "7-d": " eaoisydrugfmtlhn", "7-e": " rasndeltcpyvgkmxwhifuo1qb", "7-f": " ioerufalt", "7-g": " ehoairlsgtdufmn", "7-h": "eo atiuysrl", "7-i": "ntlscrodvmge afzpbkiu", "7-j": "oeuai c", "7-k": "sei anlruyho", "7-l": "le aioydfstkuvcbm", "7-m": "ae oibpmysurctdn", "7-n": " gdteasiconkyfuxvqhjbpw", "7-o": "frnuo wdpmtlsvcgkiabehyj", "7-p": "eaoirp hltyuk", "7-q": "u", "7-r": "eia solndtrkcgfuympvhwb", "7-s": " tseihauopmlkywnqcf", "7-t": "h ieoartysucmlw", "7-u": "rnstm lebcpgiafydq5uk", "7-v": "eioasjrny", "7-w": "a ieohnlsyu", "7-x": " iept", "7-y": " sponarlzeimtbcgh", "7-z": "eauzi", "70- ": " o", "70-c": "o", "70-d": " ", "70-e": " ntx", "70-i": "l", "70-k": "e", "70-o": "t", "70-r": "d", "70-s": "ht", "70-t": "o", "71- ": "jcm", "71-d": "se", "71-e": "n", "71-h": "i", "71-l": "d", "71-n": "a", "71-o": "fwn", "71-t": "t a", "71-x": "p", "72- ": "p", "72-a": "r", "72-c": "a", "72-d": "r", "72-e": "r", "72-f": " ", "72-i": "p", "72-j": "o", "72-m": "i", "72-n": " t", "72-p": "e", "72-t": "y", "72-w": "n", "73- ": "wt", "73-a": "n", "73-e": "r", "73-i": "s", "73-o": "u", "73-p": "u ", "73-r": "e ", "73-t": "r", "73-y": "s", "74- ": "o", "74-e": "n", "74-n": "v", "74-r": "io", "74-s": " s", "74-t": "h", "74-u": "rb", "74-w": "o", "75- ": "c", "75-b": "l", "75-h": "e", "75-i": "e", "75-o": "frl", "75-r": "n", "75-s": "o", "75-v": "a", "76-a": "s", "76-c": "a", "76-e": " n", "76-f": " ", "76-l": "i ", "76-n": "e", "76-o": "u", "76-r": "d", "77- ": "tkma", "77-a": "s", "77-e": "y", "77-i": "c", "77-n": "c", "77-u": "r", "78-a": "l", "78-c": " e", "78-k": "i", "78-m": "a", "78-r": "i", "78-s": "t", "78-t": "h", "79- ": "j", "79-a": "t", "79-h": "e", "79-i": "n", "79-l": "l", "79-t": "l", "8- ": "tfbaosmwicdlhpgrjken uvy32zq9157x46", "8-0": "24", "8-1": "1 3809", "8-2": "0", "8-3": "0 ", "8-5": " 1", "8-7": " ", "8-9": " ", "8-a": "nl trdscmykbigpvujhwfaezx", "8-b": "learoiybusdj", "8-c": "ahkeotilr ysucd", "8-d": " eioyasdruglvnhm", "8-e": " rnasdltekxcmyvpgfoiwzub", "8-f": " oeriafultny", "8-g": " eihaorsuvfktgl", "8-h": "eaoit urynswm", "8-i": "ngotslecmdr avfkpbiwx", "8-j": "oaeu", "8-k": " einaslyodfv", "8-l": " eiloadsyukfmtvpbcz", "8-m": "aeoi pmuybsfcr", "8-n": " edgtsiaocnkhuyvjlb", "8-o": "fnrudow ltmvgycspkbxieha", "8-p": "eali prhosuytbdf", "8-q": "ui", "8-r": "e aiosyltdrmngukcpfbhzvw", "8-s": " teishocpuakwlmnqdy", "8-t": "h eoiasrtluycmzwkb", "8-u": "trsnlmp cageikbdxof", "8-v": "eaiso", "8-w": "hinaoe tur", "8-x": "ptim", "8-y": " oseanlrgkzmptdc", "8-z": "zioeyhu ", "80-e": " ", "80-j": "o", "80-l": "e ", "80-n": "g", "80-t": "c", "81- ": "rt", "81-c": "h", "81-o": "u", "82-h": "e", "82-r": "i", "82-t": "i", "82-u": "r", "83-e": "s", "83-i": "nm", "83-r": "n", "84-m": "e", "84-n": "ag", "85-a": "l", "9- ": "tgoabsmcfhdwiplrenvjk u2yqz137569", "9-0": " 10", "9-1": "085", "9-2": " 052", "9-3": " ", "9-4": " ", "9-5": "0", "9-7": "0", "9-9": "904", "9-a": "nrlt mcdsiygufkwpvzxbaohje", "9-b": "ueolairysbh ", "9-c": "hoeak irlutys", "9-d": " eaoisyrvugdlhnzjfm", "9-e": " rsnatdlceymvofxipkwugh", "9-f": " roeaifults", "9-g": " ieahrouslgndy", "9-h": "eo aitrnyulmb", "9-i": "ntsclergavod fmuibkp", "9-j": "aeuoif", "9-k": " iesaoynlubh", "9-l": "ei laosyduvmktrzfpb", "9-m": "aeoyi upsmrb", "9-n": " dgteiocsykanufhljq", "9-o": "nfr uomlwsdvytpkecgbizajh", "9-p": "ealripo hstyucd", "9-q": "u", "9-r": " iaeostydnrukmlcghvpfb", "9-s": " tehiocaspulwkyqn", "9-t": "h eoairytluscwdm", "9-u": "nsrteclmdpaviyogb ", "9-v": "eiaou", "9-w": "ihen aosbkr", "9-x": "xtpyae ", "9-y": " soanwetiydlvz", "9-z": "a oie"}
}
},
computed: {
keys() {
// Returns a list of coordinates, along with the ranking of the key with respect to the
// last pressed key. That allows determining what will be the new character for that
// key in the next iteration.
let keys = []
let id = 0
for (r = 0; r < this.rows; r++) {
for (c = 0; c < this.cols; c++) {
keys.push({
id,
r,
c,
d: Math.abs(r - this.r) + Math.abs(c - this.c),
dc: Math.hypot(r - (this.rows - 1) / 2, c - (this.cols - 1) / 2),
ranking: null
})
id += 1
}
}
let sorted = structuredClone(keys).sort((a, b) => (
a.d - b.d || a.dc - b.dc || a.r - b.r || a.c - b.c
))
keys.forEach((key, i) => {
key.ranking = sorted.findIndex(x => x.id === key.id)
})
return keys
},
input() {
return this.keysPressed.map(x => x.char).join('')
},
r() {
return this.keysPressed[this.keysPressed.length - 1]?.r || 0
},
c() {
return this.keysPressed[this.keysPressed.length - 1]?.c || 0
},
pos() {
return this.keysPressed.length
},
prevChar() {
return this.keysPressed[this.keysPressed.length - 1]?.char
},
},
methods: {
click(r, c, char) {
this.distances.push(Math.abs(r - this.r) + Math.abs(c - this.c))
this.keysPressed.push({r, c, char})
},
charAtIndex(index) {
if (this.prevChar === undefined) {
return this.mostCommon[index]
}
return this.mostCommonAfter[`${this.pos}-${this.prevChar}`][index]
},
cancel() {
this.keysPressed.pop()
this.distances.pop()
},
write(sentence) {
while (this.input.length > 0) {
this.cancel()
}
sentence.split('').forEach(char => {
let key = this.keys.find(x => this.charAtIndex(x.ranking) === char)
this.click(key.r, key.c, char)
})
}
}
}).mount('#memorized')
</script>
<style>
.grid-container {
display: inline-grid;
grid-template-columns: auto auto auto auto auto auto;
}
.grid-item {
border: 1px solid;
width: 36px;
height: 36px;
font-size: 22px;
text-align: center;
margin-top: -1px;
margin-left: -1px;
cursor: pointer;
}
</style>
<!DOCTYPE html>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="order">
<div class="grid-container">
<button class="grid-item" v-for="key in keys" @click="click(key.r, key.c)">
{{ key.ranking + 1 }}
</button>
</div>
</div>
<script>
const { createApp } = Vue
createApp({
data() {
return {
cols: 6,
rows: 6,
c: 0,
r: 0
}
},
computed: {
keys() {
let keys = []
let id = 0
for (r = 0; r < this.rows; r++) {
for (c = 0; c < this.cols; c++) {
keys.push({
id,
r,
c,
d: Math.abs(r - this.r) + Math.abs(c - this.c),
dc: Math.hypot(r - (this.rows - 1) / 2, c - (this.cols - 1) / 2),
ranking: null
})
id += 1
}
}
let sorted = structuredClone(keys).sort((a, b) => (
a.d - b.d || a.dc - b.dc || a.r - b.r || a.c - b.c
))
keys.forEach((key, i) => {
key.ranking = sorted.findIndex(x => x.id === key.id)
})
return keys
}
},
methods: {
click(r, c) {
this.r = r
this.c = c
}
}
}).mount('#order')
</script>
<style>
.grid-container {
display: inline-grid;
grid-template-columns: auto auto auto auto auto auto;
}
.grid-item {
border: 1px solid;
width: 36px;
height: 36px;
font-size: 22px;
text-align: center;
margin-top: -1px;
margin-left: -1px;
cursor: pointer;
}
</style>
<!DOCTYPE html>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app" style="display: flex; flex-direction: column;">
<div style="display: flex; flex-direction: row;">
<div class="grid-container">
<button
class="grid-item"
v-for="key in keys"
@click="click(key.r, key.c, charAtIndex(key.ranking))"
:disabled="charAtIndex(key.ranking) === undefined"
>
{{ charAtIndex(key.ranking) }}
</button>
</div>
<div style="display: flex; flex-direction: column; margin-left: 20px; justify-content: center;">
<h1 style="margin: 5px">✍️ — '{{ input }}'</h1>
<h1 style="margin: 5px">📐 — {{ distances.reduce((sum, x) => sum + x, 0) }}</h1>
<button
@click="cancel()"
:disabled="input.length === 0"
style="margin: 5px; margin-top: 10px; width: 120px;"
>
Delete
</button>
</div>
</div>
<div style="display: flex; flex-direction: row; margin-top: 20px;">
<button @click="write('the last dance')">The Last Dance</button>
<button @click="write('house of cards')" style="margin-left: 12px;">House of Cards</button>
<button @click="write('peaky blinders')" style="margin-left: 12px;">Peaky Blinders</button>
</div>
</div>
<script>
const { createApp } = Vue
createApp({
delimiters: ["[[", "]]"],
data() {
return {
cols: 6,
rows: 7,
distances: [],
keysPressed: [],
characters: 'abcdefghijklmnopqrstuvwxyz1234567890 '
}
},
computed: {
keys() {
// Returns a list of coordinates, along with the ranking of the key with respect to the
// last pressed key. That allows determining what will be the new character for that
// key in the next iteration.
let keys = []
let ranking = 0
for (r = 0; r < this.rows; r++) {
for (c = 0; c < this.cols; c++) {
keys.push({
r,
c,
ranking
})
ranking += 1
}
}
return keys
},
input() {
return this.keysPressed.map(x => x.char).join('')
},
r() {
return this.keysPressed[this.keysPressed.length - 1]?.r || 0
},
c() {
return this.keysPressed[this.keysPressed.length - 1]?.c || 0
}
},
methods: {
click(r, c, char) {
this.distances.push(Math.abs(r - this.r) + Math.abs(c - this.c))
this.keysPressed.push({r, c, char})
},
charAtIndex(index) {
return this.characters[index]
},
cancel() {
this.keysPressed.pop()
this.distances.pop()
},
write(sentence) {
while (this.input.length > 0) {
this.cancel()
}
sentence.split('').forEach(char => {
let key = this.keys.find(x => this.charAtIndex(x.ranking) === char)
this.click(key.r, key.c, char)
})
}
}
}).mount('#app')
</script>
<style>
.grid-container {
display: inline-grid;
grid-template-columns: auto auto auto auto auto auto;
}
.grid-item {
border: 1px solid;
width: 36px;
height: 36px;
font-size: 22px;
text-align: center;
margin-top: -1px;
margin-left: -1px;
cursor: pointer;
}
</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment