Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 1853|回复: 32

[命令方块] [答案]CBer的execute问题

[复制链接]
发表于 2016-6-23 19:53:47 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
昨晚在茶馆发了个猜猜乐: http://www.mcbbs.net/thread-594475-1-1.html
问题是这样的: execute @e ~ ~ ~ ... summon ArmorStand,这个指令在初始实体不同数目的时候出来的结果是什么,并要求给出原理
由于没人成功猜出来,所以我今天就来开估啦~

其实这条问题是很容易的,不过你需要明白execute及选择器的运作
execute的运作就是先选择一堆实体,然后由选择了的实体去执行命令
选择器在选择好了实体之后就不会改变(比如execute @e ~ ~ ~ summon ArmorStand,初始实体数为2,那就只会执行2次),所以第一个execute的数目是不会无限增加下去
不过,后面嵌套的那些execute会根据执行时存在的实体去选择,所以那个执行次数会变大的很快(因此就不是2^嵌套数那么多个实体)

下面举个例子
(初始实体数为2)
  1. execute @e ~ ~ ~ execute @e ~ ~ ~ summon Armorstand
  2. execute @e ~ ~ ~
  3.   [当前实体数为2]
  4.     execute @e ~ ~ ~
  5.       [当前实体数为2]
  6.           summon Armorstand
  7.           summon Armorstand
  8.     execute @e ~ ~ ~
  9.       [当前实体数为4]
  10.           summon Armorstand
  11.           summon Armorstand
  12.           summon Armorstand
  13.           summon Armorstand
复制代码

所以实体数会是8

然后execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ summon Armorstand,这条命令,初始实体数为2,执行完的数量会是多少呢?
其实能够透过以上的方法去计算出来的,然而人手算就挺麻烦,mc算的话就卡,所以我写了个脚本(python的)
  1. def execute(count, depth):
  2.     if (depth > 0):
  3.         for i in range(count):
  4.             count = execute(count, depth-1)
  5.         return count
  6.     else:
  7.         return count * 2
复制代码

count就是实体数,depth就是execute的数量-1(就是需要嵌套的execute数量)

好了,可能昨天有很多人尝(zuo)试(si)去计算execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ summon Armorstand,然后发现即使初始实体数为2,那个最后出来的实体数会大得惊人(还没算完就卡死了),为什么会如此呢?
从以上那个想法来看,我们可以把execute(2,3)简化为execute(execute(2,2),2)。(最外层的执行第一次可以省略,第二次就是把第一次的count拿过来当初始数值)
问题来了,execute(2,2)的输出是2048,所以execute(2,3)=execute(2048,2)
2048次貌似不多对吧,问题在于这还有嵌套...嵌套下去就是2048*(天文数字)的循环次数...
而这个数就是execute(2048,1)的数目:66185228434044942951864067458396061614989522267577311297802947435570493724401440549267868490798926773634494383968047143923956857140205406402740536087446083831052036848232439995904404992798007514718326043410570379830870463780085260619444417205199197123751210704970352727833755425876102776028267313405809429548880554782040765277562828362884238325465448520348307574943345990309941642666926723379729598185834735054732500415409883868361423159913770812218772711901772249553153402287759789517121744336755350465901655205184917370974202405586941211065395540765567663193297173367254230313612244182941999500402388195450053080383488
也就是说,execute(2048,2)里面循环执行的第二次,里面就需要执行66185228434044942951864067458396061614989522267577311297802947435570493724401440549267868490798926773634494383968047143923956857140205406402740536087446083831052036848232439995904404992798007514718326043410570379830870463780085260619444417205199197123751210704970352727833755425876102776028267313405809429548880554782040765277562828362884238325465448520348307574943345990309941642666926723379729598185834735054732500415409883868361423159913770812218772711901772249553153402287759789517121744336755350465901655205184917370974202405586941211065395540765567663193297173367254230313612244182941999500402388195450053080383488次循环...问题在于这个数字还会指数式的上涨,会上涨2047次...而且只是这循环我估计我的电脑也很难计算出来了...我选择狗带

因此,我们可以放弃计算最后那个给dalao的题目了(有数学dalao的话或许可以试试,起码我不会)
我们也能看到execute选择器挺特别的执行方式,也是挺一颗赛艇的
//最重要的是,我们得到了以很短的指令生成大量实体的方法(误)
来自群组: Command Block Logic

评分

参与人数 1人气 +1 收起 理由
阴阳师元素祭祀 + 1 我被吓到了

查看全部评分

回复

使用道具 举报

发表于 2017-11-26 20:27:51 | 显示全部楼层
本帖最后由 ruhuasiyu 于 2017-11-26 20:51 编辑

f_a(n)=f_{a-1}^n(n)
f_2(n)=2^n n, f_2(n)=8
f_3(n)=f_2(f_2(...(f_2(n))...)),f_3(n)=2^11=2048
f_4(n)=f_2(f_2(...(f_2(2-48)) 共嵌套2048次,所以大概和 2↑↑2048相当
所以a个execute n个实体的话应该和 2↑↑...↑↑n相当,一共a-1个箭头



a↑↑b表示b个a形成的指数塔
a↑↑↑b=a↑↑(a↑↑b)
a↑↑↑↑b=a↑↑↑(a↑↑↑b)
以此类推
回复

使用道具 举报

发表于 2016-6-23 19:58:18 | 显示全部楼层
几何倍数增长的魔性盔甲架(滑稽
回复

使用道具 举报

发表于 2016-6-23 20:07:40 | 显示全部楼层
这个故事告诉我们,学好数学很重要
说白的了就是2的n次方?= =||
然而我至今都没有去实验

点评

对,因为execute @e summon就是把实体数*2而已,问题只是是2的多少次方而已23333 看来那个次方数还是蛮大的  详情 回复 发表于 2016-6-23 20:23
回复

使用道具 举报

发表于 2016-6-23 20:11:15 | 显示全部楼层
后面一堆数字。
生动形象的告诉了我们这些不是一般人能看的懂的。
回复

使用道具 举报

 楼主| 发表于 2016-6-23 20:23:46 | 显示全部楼层
FHC红石 发表于 2016-6-23 20:07
这个故事告诉我们,学好数学很重要
说白的了就是2的n次方?= =||
然而我至今都没有去实验 ...

对,因为execute @e summon就是把实体数*2而已,问题只是是2的多少次方而已23333
看来那个次方数还是蛮大的
回复

使用道具 举报

发表于 2016-6-24 16:51:24 | 显示全部楼层
用TNT把,保证你够爽

评分

参与人数 1金粒 +1 收起 理由
pca006132 + 1 你还没等到炸的时候MC早就崩了.

查看全部评分

回复

使用道具 举报

发表于 2016-6-24 17:44:29 | 显示全部楼层
的确是一个很简单的问题来着……(卡死电脑必备233)
回复

使用道具 举报

发表于 2016-6-24 23:15:59 | 显示全部楼层
卡死电脑新技能get√
要不是有上限的话我早就算出来了= =
再嵌套10~20次会怎样...
再配合循环性命令方块会怎样...

算了java虚拟机都不一定活的了

点评

那个算不出来吧,那循环次数简直了...  详情 回复 发表于 2016-6-24 23:27

评分

参与人数 1金粒 +1 收起 理由
pca006132 + 1 那么你算出是多少了。天文数字循环啊....

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-6-24 23:27:22 | 显示全部楼层
cx62d 发表于 2016-6-24 23:15
卡死电脑新技能get√
要不是有上限的话我早就算出来了= =
再嵌套10~20次会怎样...

那个算不出来吧,那循环次数简直了...

点评

你忘了c语言的有上限啦! 于是unsigned为0,没有那个unsigned为一坨负数√ 最后我能说什么呢= =  详情 回复 发表于 2016-6-24 23:47

评分

参与人数 1金粒 +1 收起 理由
cx62d + 1 我用C你用py...看看哪个效率睾些.

查看全部评分

回复

使用道具 举报

发表于 2016-6-24 23:26:19 | 显示全部楼层
卧槽有毒。。
这东西真他妈猜得出来才怪了=,=
回复

使用道具 举报

发表于 2016-6-24 23:47:23 | 显示全部楼层
pca006132 发表于 2016-6-24 23:27
那个算不出来吧,那循环次数简直了...

你忘了c语言的有上限啦!
于是unsigned为0,没有那个unsigned为一坨负数√

最后我能说什么呢= =
要是计算器上能编程那就好了XD应该不会有上限的

点评

没bigint吗  详情 回复 发表于 2016-6-25 00:33
回复

使用道具 举报

 楼主| 发表于 2016-6-25 00:33:45 | 显示全部楼层
cx62d 发表于 2016-6-24 23:47
你忘了c语言的有上限啦!
于是unsigned为0,没有那个unsigned为一坨负数√

没bigint吗

评分

参与人数 1金粒 +1 收起 理由
cx62d + 1 64位整形不管用啦!还有别成版聊了....

查看全部评分

回复

使用道具 举报

发表于 2016-7-2 17:07:29 | 显示全部楼层
exe让mc崩溃的最快方法 = = (手动滑稽)
回复

使用道具 举报

发表于 2016-7-3 13:09:42 | 显示全部楼层

感想楼主分享

评分

参与人数 1人气 -1 金粒 -10 收起 理由
贰逼 -1 -10 无意义

查看全部评分

回复

使用道具 举报

发表于 2016-7-23 14:56:02 | 显示全部楼层
本帖最后由 MODlover 于 2016-7-23 14:59 编辑

execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ execute @e ~ ~ ~ summon Armorstand
放进CB里面执行
保证电脑卡爆要是我找到了能在服务器无权限执行指令的BUG,我一定会执行一次这个指令23333
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2017-12-18 17:02 , Processed in 0.149557 second(s), 9 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表