schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
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;
};