| '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], |
| ['j', 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; |
| }; |