💯 人人都能满分的秒刷·国家安全答题插件

2021/12/6 上午3:23:08

// ==UserScript==
// @name        💯 人人都能满分的秒刷·国家安全答题插件
// @namespace   gjaqzsjs
// @match       http://gjaqzsjs.haedu.cn/*
// @grant       none
// @version     4.12
// @author      star_even
// @description 2021/12/6 上午3:23:08
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// @grant unsafewindow

// ==/UserScript==

(function () {
  const mapping = 'ABCDEFGHI';
  const A20B21 = (arr)=>arr.map((e) => mapping.indexOf(e));
  const mim = (a, b, c) => (a < b ? (a < c ? a : c) : b < c ? b : c);
  const sim = function (s, t) {
    var n = s.length,
      m = t.length,
      d = [];
    var i, j, s_i, t_j, cost;
    if (n == 0) return m;
    if (m == 0) return n;
    for (i = 0; i <= n; i++) {
      d[i] = [];
      d[i][0] = i;
    }
    for (j = 0; j <= m; j++) {
      d[0][j] = j;
    }
    for (i = 1; i <= n; i++) {
      s_i = s.charAt(i - 1);
      for (j = 1; j <= m; j++) {
        t_j = t.charAt(j - 1);
        if (s_i == t_j) {
          cost = 0;
        } else {
          cost = 1;
        }
        d[i][j] = mim(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
      }
    }
    return d[n][m];
  };
  const onlyRemainCh = (sentenceWithSigns) =>
    sentenceWithSigns.replace(/[^\u4e00-\u9fa5]/gi, '');
  const match = (s, t) => {
    var l = s.length > t.length ? s.length : t.length;
    var d = sim(s, t);
    return (1 - d / l).toFixed(4);
  };
  l = console.log;

  const matchInTiku = (test, tikuBank) => {
    let len = test.length;
    let answerArr = [];
    tikuBank.forEach((e) => {
      let matchStem = e.charactor.slice(0, len);
      let rate = match(matchStem, test);

      let result = {
        answer:e.answer.toString(),
        matchRate: rate,
        matched: matchStem,
         answerArr: A20B21(e.answer)!=[-1]?A20B21(e.answer):location.reload(),
      };
      answerArr.push(result);
      // l(result)
    });
    let mostMatched = answerArr.reduce(function (x, y) {
      return x.matchRate > y.matchRate ? x : y;
    });

    l(mostMatched);
    return mostMatched
  };

  window.onload = () => {
    //     业务部分开始

    setTimeout(() => {
      let doc = document;
      let tikuBank = GM_getValue('tiku');
      tikuBank.forEach((e) => {
        e.charactor = onlyRemainCh(e.question);
      });
      let tests = [];
      doc.querySelectorAll('.issue').forEach((e) => {
        tests.push(onlyRemainCh(e.innerText));
      });
      
      let optionsGroup = doc.querySelectorAll('.options');
      let allResult = [];
      let lowestRate =0
//       查找每项
      tests.forEach((e, i) => {
        let r=matchInTiku(e, tikuBank)
        let aA=r.answerArr
        if(aA!=[-1]){
                  allResult.push(r);

          aA.forEach((ee,ii)=>{
            optionsGroup[i].childNodes[ee].click()
            
          })
        }else{
          
          l(`出错!即将跳转……`)
          location.reload()
        }
      });
     lowestRate= allResult.reduce(function (x, y) { 
      return x.matchRate < y.matchRate ? x.matchRate : y.matchRate;
    });
      // lowestRate = (parseFloat(lowestRate)).toFixed(2)
if((len =allResult.length),len===20){
      l(`匹配成功,20个`)
    }else{
      location.reload()
    }
      
          setTimeout(() => {
      if (
        (r = window.confirm(
          `所有题已完成,最低匹配度:${lowestRate}(越接近1满分率越高)
          如果没有答上,请刷新(ctrl+R)!如果不放心想要手动确认正确率,可以点击右键调出开发者控制台(F12)查看每一条的答案`
        ))
      ) {
        window.scrollTo(
          0,
          document.documentElement.offsetHeight - window.innerHeight
        );
        //   修改为一个正常的提交时间
        maxTime = parseInt(Math.random() * (500 - 200 + 1) + 200, 10);
      } else {
        maxTime = parseInt(Math.random() * (500 - 200 + 1) + 200, 10);
      }
    }, 600);
      
      
    }, 400);
  };
})();