Node.js力破江苏网警刑侦科推理试题
时间:2022-05-08
本文章向大家介绍Node.js力破江苏网警刑侦科推理试题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
月前,江苏网警 在微博发布了一套《2018年刑侦科目推理试题》,可谓难倒了诸多英雄好汉,评论区内更是一片皮皮之音。
- @二向箔icon: 高考前班主任教过我们,遇上不会的题,全部选C
- 丶复杂动物:ABBCCADCDBE下一题
- @活着就是要搞事情:好奇心让我点进去,求生欲让我退出来
- 启禾公考:我把鲁迅的棺材板按着 你们尽管答题
不过当这事传入了程序猿族的耳中,画风顿时突变,Java、Python、PHP 等各派英雄纷纷使出门派语言,以 枚举法 之小小智谋便破解了江苏网警这 刑侦推理 之阵。
我等前端后生亦不甘落后,于是 便有了今天 这一 《Node.js力破江苏网警刑侦科推理试题》一说。
话不多说,先上图:
交出代码,以示清白:
question.js
/**
* Created by lonelydawn at 2018-03-29.
*/
var options = ['A', 'B', 'C', 'D']
// 定义题目答案数组,数组首个元素设置为空, 以偏移数组下标和题号对齐
var answers = [, 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A']
var result = []
/**
* 01. 这道题的答案是
* A. A B. B C. C D. D
*/
/**
* 02. 第5题的答案是
* A. C B. D C. A D. B
*/
var getQues02 = function (answers) {
if (answers[5] === 'C') {
return 'A'
} else if (answers[5] === 'D') {
return 'B'
} else if (answers[5] === 'A') {
return 'C'
} else if (answers[5] === 'B') {
return 'D'
}
return -1
}
/**
* 03. 以下哪一题答案与其他三项不同
* A. 第3题 B. 第6题 C. 第2题 D. 第4题
*/
var getQues03 = function (answers) {
if (answers[3] !== answers[6] && answers[3] !== answers[2]
&& answers[3] !== answers[4]) {
return 'A'
} else if (answers[6] !== answers[3] && answers[6] !== answers[2]
&& answers[6] !== answers[4]) {
return 'B'
} else if (answers[2] !== answers[3] && answers[2] !== answers[6]
&& answers[2] !== answers[4]) {
return 'C'
} else if (answers[4] !== answers[3] && answers[4] !== answers[6]
&& answers[4] !== answers[2]) {
return 'D'
}
return -1
}
/**
* 04. 以下选项中哪两题答案相同
* A. 第1,5题 B. 第2,7题 C. 第1,9题 D. 第6,10题
*/
var getQues04 = function (answers) {
if (answers[1] === answers[5]) {
return 'A'
} else if (answers[2] === answers[7]) {
return 'B'
} else if (answers[1] === answers[9]) {
return 'C'
} else if (answers[6] === answers[10]) {
return 'D'
}
return -1
}
/**
* 05. 以下选项中哪一题答案与本题相同
* A. 第8题 B. 第4题 C. 第9题 D. 第7题
*/
var getQues05 = function (answers) {
if (answers[8] === 'A') {
return 'A'
} else if (answers[4] === 'B') {
return 'B'
} else if (answers[9] === 'C') {
return 'C'
} else if (answers[7] === 'D') {
return 'D'
}
return -1
}
/**
* 06. 以下选项中哪两题的答案与第八题相同
* A. 第2,4题 B. 第1,6题 C. 第3,10题 D. 第5,9题
*/
var getQues06 = function (answers) {
if (answers[8] === answers[2] && answers[8] === answers[4]) {
return 'A'
} else if (answers[8] === answers[1] && answers[8] === answers[6]) {
return 'B'
} else if (answers[8] === answers[3] && answers[8] === answers[10]) {
return 'C'
} else if (answers[8] === answers[5] && answers[8] === answers[9]) {
return 'D'
}
return -1
}
/**
* 07. 在此十道题中,被选中次数最少的选项字母为
* A. C B. B C. A D. D
*/
var getQues07 = function (answers) {
var counter = [0, 0, 0, 0]
answers.forEach(function (answer) {
options.forEach(function (option, index) {
if (answer === option) {
counter[index]++
}
})
})
return options[counter.indexOf(Math.min(counter[0], counter[1], counter[2], counter[3]))]
}
/**
* 08. 以下选项中哪一题的答案与第一题的答案在字母中不相邻
* A. 第7题 B. 第5题 C. 第2题 D. 第10题
* 解: A、B、C、D 四个字母,先列出每个字母不相邻的都有哪些,再进行判断
* PS: 这题可能出现多解,但由于试题明确地标注了“单项选择”,因此只取第一个
*/
var getQues08 = function (answers) {
var notNeighbor = {
A: ['C', 'D'],
B: ['D'],
C: ['A'],
D: ['A', 'B']
}[answers[1]]
if (notNeighbor.indexOf(answers[7]) > -1) {
return 'A'
} else if (notNeighbor.indexOf(answers[5]) > -1) {
return 'B'
} else if (notNeighbor.indexOf(answers[2]) > -1) {
return 'C'
} else if (notNeighbor.indexOf(answers[10]) > -1) {
return 'D'
}
return -1
}
/**
* 09. 已知"第一题与第六题的答案相同"与"第X题与第5题的答案相同"的真假性
* A. 第6题 B. 第10题 C. 第2题 D. 第9题
* 解:
* 题干意思简单来说就是: 第X题答案可能与第5题相同,也可能不同,
* 因此我们分两种情况进行判断
* PS:
* 如果第一题和第六题答案相同,则X与5答案不相同,X的答案有多个取值可能(A/B/C/D)
* 如果不同,则x与5答案相同,X的答案只能取唯一值
* 但即使X的答案取值唯一,X也有多个取值可能(1-10)
* 我将这些取值的候选数组和题目的4个选项取交集,从而可以限定出唯一 X 值
*/
var getQues09 = function (answers) {
var arr = []
var x = -1
if (answers[1] === answers[6]) {
for (var i = 0; i < answers.length; i++) {
if (i !== 5 && answers[i] !== answers[5]) {
var answer = ['A', 'B', 'C', 'D'][[6, 10, 2, 9].indexOf(i)]
if (answer) {
return answer
}
}
}
} else {
for (var i = 0; i < answers.length; i++) {
if (i !== 5 && answers[i] === answers[5]) {
var answer = ['A', 'B', 'C', 'D'][[6, 10, 2, 9].indexOf(i)]
if (answer) {
return answer
}
}
}
}
}
/**
* 10. 在此10道题中, ABCD四个字母出现次数最多与最少者的差为
* A. 3 B. 2 C. 4 D. 1
*/
var getQues10 = function (answers) {
var counter = [0, 0, 0, 0]
answers.forEach(function (answer) {
options.forEach(function (option, index) {
if (answer === option) {
counter[index]++
}
})
})
var max = Math.max(counter[0], counter[1], counter[2], counter[3])
var min = Math.min(counter[0], counter[1], counter[2], counter[3])
return {
1: 'D',
2: 'B',
3: 'A',
4: 'C'
}[max - min]
}
// 递归 + 循环 建立枚举队列
var recurse = function (answers, index) {
var answers = JSON.parse(JSON.stringify(answers))
if (index < 10) {
for (var i = 0; i < options.length; i++) {
answers[index] = options[i]
recurse(answers, index + 1)
if (getQues02(answers) !== answers[2]) {
continue
}
if (getQues03(answers) !== answers[3]) {
continue
}
if (getQues04(answers) !== answers[4]) {
continue
}
if (getQues05(answers) !== answers[5]) {
continue
}
if (getQues06(answers) !== answers[6]) {
continue
}
if (getQues07(answers) !== answers[7]) {
continue
}
if (getQues08(answers) !== answers[8]) {
continue
}
if (getQues09(answers) !== answers[9]) {
continue
}
if (getQues10(answers) !== answers[10]) {
continue
}
result = JSON.parse(JSON.stringify(answers))
}
}
}
var begin = new Date().getTime()
recurse(answers, 1)
console.log('nresult:', result.length > 0 ? result.slice(1, result.length) : 'none')
console.log('time:', (new Date().getTime() - begin) / 1000 + 's')
PS: 一切尽在注释中,如感兴趣,欢迎评论。
- 江湖秘笈:说烦了破解、渗透等,不如大家一起聊聊硬盘加密?
- Nodejs学习笔记(十三)— PM2
- 十分钟带你了解服务化框架
- 十分钟带你了解服务化框架
- WCF技术剖析之十七:消息(Message)详解(上篇)
- 微信年底重磅更新,这次小程序才是重头戏!
- 《EnterLib PIAB深入剖析》系列博文汇总
- Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)
- 大牛教你使用7种卷积神经网络进行物体检测!
- Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Handling引入MVP模式.. .. ..
- 别对我说谎!你的小九九我都知道
- Spring集成RabbitMQ-使用RabbitMQ更方便
- Nodejs学习笔记(三)--- 模块
- 使用JClouds在Java中获取和发布云服务器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 活见鬼,明明删除了数据,空间却没减少!
- 原创 | Git仓库的提交记录乱成一团,怎么办?
- 原创 | 平面内有N个点,如何快速求出距离最近的点对?
- 原创 | codeforces 1426F,初学者也能做,div3的最难题
- 安全研究 | YARA规则阻止Windows事件日志记录
- 研究人员如何使用Shhgit搜索GitHub中的敏感数据
- 使用nProbe监控移动网络(2G,3G和LTE)
- Mykings僵尸网络新变种已感染超5万台电脑
- 谁告诉你鸿蒙(HarmonyOS)不能在macOS下玩,一副没见过世面的样子!
- 连Python产生器(Generator)的原理都解释不了,还敢说Python用了5年?
- WordPress插件File-Manager任意文件上传复现
- CVE-2020-15778:OpenSSH命令注入漏洞复现
- TokyoWesterns CTF 6th 2020 部分WP
- 极客巅峰2020 部分WriteUp
- norecon:一款自动化recon工具