2019独角兽企业重金招聘Python工程师标准>>>

月前,江苏网警 在微博发布了一套《2018年刑侦科目推理试题》,可谓难倒了诸多英雄好汉,评论区内更是一片皮皮之音。

  • @二向箔icon: 高考前班主任教过我们,遇上不会的题,全部选C

  • 丶复杂动物:ABBCCADCDBE下一题

  • @活着就是要搞事情:好奇心让我点进去,求生欲让我退出来

  • 启禾公考:我把鲁迅的棺材板按着 你们尽管答题

不过当这事传入了程序猿族的耳中,画风顿时突变,Java、Python、PHP 等各派英雄纷纷使出门派语言,以 枚举法 之小小智谋便破解了江苏网警这 刑侦推理 之阵。

我等前端后生亦不甘落后,于是 便有了今天 这一 《Node.js力破江苏网警刑侦科推理试题》一说。

话不多说,先上图:

交出代码,以示清白:

question.js

/*** Created by lonelydawn at 2018-03-29.*/
let options = ['A', 'B', 'C', 'D']
// 定义题目答案数组,数组首个元素设置为空, 以偏移数组下标和题号对齐
let answers = [, 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A']
let result = []
/*** 01. 这道题的答案是* A. A    B. B    C. C    D. D*//*** 02. 第5题的答案是* A. C    B. D    C. A    D. B*/
let 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题*/
let 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题*/
let 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题*/
let 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题*/
let 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*/
let getQues07 = function (answers) {let 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: 这题可能出现多解,但由于试题明确地标注了“单项选择”,因此只取第一个*/
let getQues08 = function (answers) {let 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 值*/
let getQues09 = function (answers) {let arr = []let x = -1if (answers[1] === answers[6]) {for (let i = 0; i < answers.length; i++) {if (i !== 5 && answers[i] !== answers[5]) {let answer = ['A', 'B', 'C', 'D'][[6, 10, 2, 9].indexOf(i)]if (answer) {return answer}}}} else {for (let i = 0; i < answers.length; i++) {if (i !== 5 && answers[i] === answers[5]) {let 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*/
let getQues10 = function (answers) {let counter = [0, 0, 0, 0]answers.forEach(function (answer) {options.forEach(function (option, index) {if (answer === option) {counter[index]++}})})let max = Math.max(counter[0], counter[1], counter[2], counter[3])let min = Math.min(counter[0], counter[1], counter[2], counter[3])return {1: 'D',2: 'B',3: 'A',4: 'C'}[max - min]
}// 递归 + 循环 建立枚举队列
let recurse = function (answers, index) {if (index < 10) {for (let 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))}}
}let 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: 一切尽在注释中,如感兴趣,欢迎评论。

转载于:https://my.oschina.net/lonelydawn/blog/1787017

Node.js力破江苏网警刑侦科推理试题相关推荐

  1. Fun. 201x年刑侦科推理试题网图题的暴力求解

    每年这图都会换个年份重新出现. 用cpp写的,暴力枚举,没有丝毫优化,就是枚举+检验. 数组a保存枚举的一个结果,取下标1~10,0号位设为-1来避免干扰. 答案是 B C A C A C D A B ...

  2. 2018年刑侦科推理试题php版,2018年刑侦科目推理试题完整版分享

    有很多小伙伴说自己一直有一个侦探梦,最近网上有一个今年的刑侦科推理试题出来了哦,大家可以借此机会测试一砸自己的侦探水平了,小编给大家带来2018年刑侦科目推理试题完整版分享. 2018年刑侦科目推理试 ...

  3. 2018年刑侦科推理试题php版,2018年刑侦科推理试题

    一道解了我两个小时的题. 建议大家也试着解一下哦~ 题目如下: 2018年刑侦科推理试题 姓名 分数 单项选择,(每题10分,共100分) 1.这道题的答案是 AA BB CC DD 2第5题的答案是 ...

  4. 2018刑侦科推理试题c语言,2018年刑侦科推理试题(C++)(示例代码)

    上学期看到2018年刑侦科推理试题,直觉告诉我可以嵌套N层for循环来解答,但后面还是用组合算法穷举出所有组合算到答案,嵌套太深不好搞啊. 从 0b00000000000000000000 自增到 0 ...

  5. 2018年刑侦科推理试题php版,2018年刑侦科目推理试题

    2018年刑侦科目推理试题这肯定是一款非常令人烧题目,现在很多网友表示真的很烧脑,看见试卷之前5秒有一个刑侦梦,然而呢看完试题就表示一一想放弃了,不过没关系,小编为您带来推理试题答案完整版! 2018 ...

  6. 刑侦科推理试题(不知来源,最右APP看到)

    最右APP看到的一个帖子感觉挺有意思自己做一下 审视完题目,还是先找突破口,可知第二题是突破口,因此从第二题开始进行推理 (1)第二题选A 当第2题选A时第5题选C 第5题选C时59同答案,因此第9题 ...

  7. 2018刑侦推理 java_2018年刑侦科目推理试题

    importjava.util.Arrays;importjava.util.HashSet;importjava.util.Set;/*** 题目:如何看待2018年刑侦科推理试题 * 解法:穷举法 ...

  8. 被江苏网警点名后 咪蒙发道歉信:公众号停更2个月 微博永久关停

    在"寒门状元之死"文章刷屏被质疑造假后,"才华有限青年"团队作出了回应,但是显然回应的一切并不能说服围观者们,甚至引起网友们更大的愤怒,被指"毫无诚意 ...

  9. (附源码)node.js中小学生中文写作网 毕业设计 250623

    基于node.js中小学生中文写作网 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以 ...

最新文章

  1. 悬而未决的AI竞赛:全球企业人工智能发展现状
  2. java IDE的四大金刚
  3. 【01】为什么需要UML
  4. hdu1848(sg函数打表)
  5. 电脑cmd命令大全_电脑定时关机的方法(2)
  6. (转)Bootstrap 之 Metronic 模板的学习之路 - (4)源码分析之脚本部分
  7. Android抓包方法(三) 之Win7笔记本Wifi热点+WireShark工具
  8. 类加载与 Java主类加载机制解析
  9. python kmeans聚类_K-means聚类算法的Python实现
  10. 蓝牙hci主要作用是什么_我的“我”是您的“您”:为什么为HCI精调Deixis很困难
  11. Linux下多网卡绑定bonding bond6
  12. 安装vc2005运行库错误1935c处理
  13. 网络游戏防沉迷的理想与现实
  14. IOS和安卓微信打开网页,界面显示差异大的问题。
  15. 基础算法练习200题07、编框
  16. SpringBoot+Mybatis实现三级分类联动
  17. 自删除技术小记:Gary Nebbett
  18. 鄱.阳.湖.7月13日遥感数据汇总及共享
  19. Python之路----文件操作
  20. 有人说“星座对自己的运势预测和性格描述很准”。请谈读你的看法。 “星座热”的社会学解读

热门文章

  1. 华三交换机升级的ipe文件_H3C交换机版本升级
  2. 人体解剖学复习题(带答案的)
  3. 我的第一个音乐播放器
  4. 汇编代码——music(《送别》bgm)
  5. w3cschoolHTML1
  6. mysql安全加固配置(1)
  7. android打电话、发短信实现
  8. 雅礼集训 Function
  9. 关于MongoDB连接字符串URI格式
  10. IOS15 beta 8 开发者预览版更新【附升级通道】