1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
| 'use strict';
|
| const YES_MATCH_SCORE_THRESHOLD = 2;
| const NO_MATCH_SCORE_THRESHOLD = 1.25;
|
| const yMatch = new Map([
| [5, 0.25],
| [6, 0.25],
| [7, 0.25],
| ['t', 0.75],
| ['y', 1],
| ['u', 0.75],
| ['g', 0.25],
| ['h', 0.25],
| ['k', 0.25]
| ]);
|
| const eMatch = new Map([
| [2, 0.25],
| [3, 0.25],
| [4, 0.25],
| ['w', 0.75],
| ['e', 1],
| ['r', 0.75],
| ['s', 0.25],
| ['d', 0.25],
| ['f', 0.25]
| ]);
|
| const sMatch = new Map([
| ['q', 0.25],
| ['w', 0.25],
| ['e', 0.25],
| ['a', 0.75],
| ['s', 1],
| ['d', 0.75],
| ['z', 0.25],
| ['x', 0.25],
| ['c', 0.25]
| ]);
|
| const nMatch = new Map([
| ['h', 0.25],
| ['j', 0.25],
| ['k', 0.25],
| ['b', 0.75],
| ['n', 1],
| ['m', 0.75]
| ]);
|
| const oMatch = new Map([
| [9, 0.25],
| [0, 0.25],
| ['i', 0.75],
| ['o', 1],
| ['p', 0.75],
| ['k', 0.25],
| ['l', 0.25]
| ]);
|
| function getYesMatchScore(value) {
| const [y, e, s] = value;
| let score = 0;
|
| if (yMatch.has(y)) {
| score += yMatch.get(y);
| }
|
| if (eMatch.has(e)) {
| score += eMatch.get(e);
| }
|
| if (sMatch.has(s)) {
| score += sMatch.get(s);
| }
|
| return score;
| }
|
| function getNoMatchScore(value) {
| const [n, o] = value;
| let score = 0;
|
| if (nMatch.has(n)) {
| score += nMatch.get(n);
| }
|
| if (oMatch.has(o)) {
| score += oMatch.get(o);
| }
|
| return score;
| }
|
| module.exports = (input, options) => {
| if (getYesMatchScore(input) >= YES_MATCH_SCORE_THRESHOLD) {
| return true;
| }
|
| if (getNoMatchScore(input) >= NO_MATCH_SCORE_THRESHOLD) {
| return false;
| }
|
| return options.default;
| };
|
|