美文网首页
更无聊的人做什么:检查模仿游戏的答案

更无聊的人做什么:检查模仿游戏的答案

作者: 小粽 | 来源:发表于2015-02-14 18:14 被阅读34次

一个月前看到琉璃心仙人先生的《论无聊的人做什么:模仿游戏》,顿觉有趣。对于这种混杂缠绕在一起的问题,我立刻产生一个疑问:

答案是唯一的吗?

如果我来设计这类题目,我的做法是先列一个答案,按照这个答案来设计题目。但是这样做能保证它的唯一性吗?

原作者利用学了一个月的JAVA暴力求解这个问题。我作为非专业人员,用了一个月时间来写下面的一段非JAVA函数,亲手验证一下它的唯一性。结果发现它真的是只有一个,不由得对设计题目的牛逼感到由衷的敬佩。

结果:

ansLst=Tuples[{1,2,3,4},10];

Table[testFun[ansLst[[i]]],{i,1,Length@ansLst}];

Union@%

结果除了False就是这个{2, 3, 1, 3, 1, 3, 4, 1, 2, 1}(非程序员从1开始数数。)

即BCACACDABA。

附录函数:

testFun[x_,mode_:"noDebug"]:=Module[{rule},

rule=Thread[{"A","B","C","D"}->{1,2,3,4}];

option2={"C","D","A","B"};

option2A=option2/.rule;

test2=x[[5]]==option2A[[x[[2]]]];

If[mode=="Debug",Print[test2]];

If[test2==False,Return[test2]];

option3={x[[3]],x[[6]],x[[2]],x[[4]]};

test3=Module[

{lst1,lst2},

lst1=option3[[x[[3]]]];

lst2=Drop[option3,{x[[3]]}];

(Equal@@lst2)&&(lst1!=lst2[[1]])

];

If[mode=="Debug",Print["3->"test3]];

If[test3==False,Return[test3]];

option4={

{x[[1]],x[[5]]},

{x[[2]],x[[7]]},

{x[[1]],x[[9]]},

{x[[6]],x[[10]]}

};

test4=Module[{lst1,lst2},

lst1=option4[[x[[4]]]];

lst2=Drop[option4,{x[[4]]}];

(Equal@@lst1)&&And@@(Unequal@@@lst2)

];

If[mode=="Debug",Print["4->",test4]];

If[test4==False,Return[test4]];

option5={x[[8]],x[[4]],x[[9]],x[[7]]};

test5=Module[{lst1,lst2},

lst1=option5[[x[[5]]]];

lst2=Drop[option5,{x[[5]]}];

(x[[5]]==lst1)&&And@@(Unequal[x[[5]],#]&/@lst2)

];

If[mode=="Debug",Print["5->",test5]];

If[test5==False,Return[test5]];

option6={

{x[[2]],x[[4]]},

{x[[1]],x[[6]]},

{x[[3]],x[[10]]},

{x[[5]],x[[9]]}

};

test6=Module[{lst1,lst2},

option6A=Append[#,x[[8]]]&/@option6;

lst1=option6A[[x[[6]]]];

lst2=Drop[option6A,{x[[6]]}];

condition1=Equal@@lst1;

condition2=And@@(Not/@(Equal@@@lst2));

condition1&&condition2

];

If[mode=="Debug",Print["6->",test6]];

If[test6==False,Return[test6]];

option7={"C","B","A","D"};

test7=Module[{},

option7A=option7/.rule;

countLst=Count[x,#]&/@{1,2,3,4};

xNumMin=Min[countLst];

If[Count[countLst,xNumMin]==1,

Position[countLst,xNumMin][[1,1]]==option7A[[x[[7]]]],

False]

];

If[mode=="Debug",Print[test7]];

If[test7==False,Return[test7]];

option8={x[[7]],x[[5]],x[[2]],x[[10]]};

test8=Module[{lst1,lst2},

lst1=option8[[x[[8]]]];

lst2=Drop[option8,{x[[8]]}];

condition1=Abs[lst1-x[[1]]]!=1;

condition2=And@@(Abs[#-x[[1]]]==1&/@lst2);

condition1&&condition2

];

If[mode=="Debug",Print[test8]];

If[test8==False,Return[test8]];

option9={x[[6]],x[[10]],x[[2]],x[[9]]};

test9=Module[{lst1,lst2},

lst1=option9[[x[[9]]]];

lst2=Drop[option9,{x[[9]]}];

condition1=x[[1]]==x[[6]];

condition2=lst1==x[[5]];

condition3=((#==x[[5]])&/@lst2);

condition1!=condition2&&(Equal@@condition3)&&condition1==condition3[[1]]

];

If[mode=="Debug",Print[test9]];

If[test9==False,Return[test9]];

option10={3,2,4,1};

test10:=Module[{xMin,xMax,lst},

lst=Count[x,#]&/@{1,2,3,4};

{xMin,xMax}={Min@lst,Max@lst};

(xMax-xMin)==option10[[x[[10]]]]

];

If[mode=="Debug",Print[test10]];

If[test10==False,Return[test10]];

x

]

相关文章

  • 更无聊的人做什么:检查模仿游戏的答案

    一个月前看到琉璃心仙人先生的《论无聊的人做什么:模仿游戏》,顿觉有趣。对于这种混杂缠绕在一起的问题,我立刻产生一个...

  • 论无聊的人做什么:模仿游戏

    前几天看到同学在微博分享了一页逻辑题,大概是这样的: 粗略看了一下,确实费脑筋。年纪大了本不想动脑子,可今天突发奇...

  • 【游戏】萌犬便便便:你的时间就像便便一样被冲走了

    究竟是为了满足无聊的人创造无聊的游戏,还是无聊的游戏造就了无聊的人? 事先声明,我不是来推荐游戏的,也不是来诋毁游...

  • 多元思维模型,终身学习者的利器

    大部分的人对于问题,找到答案就结束了;优秀的人更关注思考答案的方式,这个方式是我们终身学习的利器。 为什么手机游戏...

  • 无聊的解药

    无聊的时候,你会做什么? 想要假装自己是一个有文化的人,说:“看书。” 实际上,最真实的答案应该是:刷手机。 今天...

  • 秀天赋秀热情

    1.我自己最擅长做什么,我做什么能更加轻而易举的成功,我能比别人更成功或者出色? 我的答案:看到这个答案,我觉得自...

  • 《亲密关系》第五章_沟通_2

    什么样的非语言沟通会让彼此的关系更亲密? 答案是模仿,如果发生了非语言的模仿,显然我们会感到高兴而舒心,而...

  • 模仿游戏

    影片"模仿游戏",根据事实改编而成。讲了二战时期在英国的曼彻斯特艾伦·图灵博士经过困难重重破解敌方密码机,...

  • 模仿游戏。

    昨天晚上饭后散步,微风习习,好不惬意。 有很多人在遛孩子,也有人在遛狗。哦不,我看到了一只狗在遛主人。 他穿着一件...

  • 模仿游戏

    “Sometimes it is the very people who no one imagines any...

网友评论

      本文标题:更无聊的人做什么:检查模仿游戏的答案

      本文链接:https://www.haomeiwen.com/subject/zlbetttx.html