一个 Javascript 挑战题,用最短的代码消耗最多的时间 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mytry
V2EX    程序员

一个 Javascript 挑战题,用最短的代码消耗最多的时间

  •  
  •   mytry 2018-11-21 14:32:58 +08:00 4263 次点击
    这是一个创建于 2589 天前的主题,其中的信息可能已经有所发展或是发生改变。

    让函数 f 运行 10s 以上,最终输出 true,代码越短越好。(不能有交互。CPU 性能以目前主流配置为参考~)

    在线代码: https://jsfiddle.net/kntqmoeb/

    28 条回复    2018-11-22 12:54:50 +08:00
    CivAx
        1
    CivAx  
       2018-11-21 14:38:31 +08:00
    这家伙发的帖子都是这种风格的……
    1039460820
        2
    1039460820  
       2018-11-21 14:55:24 +08:00
    function f() {
    // 在此写入你的代码:
    // ...
    setTimeout(()=>{alert("10 秒过了")},10000)
    }
    no1xsyzy
        3
    no1xsyzy  
       2018-11-21 15:13:49 +08:00
    这个还是上 codegolf.stackexchange 吧
    no1xsyzy
        4
    no1xsyzy  
       2018-11-21 15:16:53 +08:00
    @1039460820 并不能,在 setTimeout 将函数和数值交给 WebAPI 了以后 f() 就退出了。而上述测试代码是看 f() 运行前后的时间差。
    wwwe
        5
    wwwe  
       2018-11-21 15:17:19 +08:00 via Android
    t=Date.now()+10001;
    while(Date.now()<t);
    yulitian888
        6
    yulitian888  
       2018-11-21 15:19:18 +08:00
    如果允许加载一段外部 js 的话~~~~~
    随便挂一段挖矿病毒进去吧!
    mytry
        7
    mytry  
    OP
       2018-11-21 15:22:36 +08:00
    @yulitian888 加载一段外部 js 的代码量足够写一段循环代码了~
    mytry
        8
    mytry  
    OP
       2018-11-21 15:27:53 +08:00
    @wwwe 不用这么精准,比如用 for(i=0;i<9e9;i++); 也可以,符合目前主流 CPU 性能就可以~
    Mutoo
        9
    Mutoo  
       2018-11-21 15:28:36 +08:00
    无法匹配正则是最消耗时间的:

    function f1() {
    return /(x+x+)+y/.exec("xxxxxxxxxxxxxxxxxxxx") || true; // 10s
    }

    function f2() {
    return /(x+x+)+y/.exec("xxxxxxxxxxxxxxxxxxxxx") || true; // 20s
    }
    momocraft
        10
    momocraft  
       2018-11-21 15:29:47 +08:00
    for(;Math.random()>1e-9;);
    Mutoo
        11
    Mutoo  
       2018-11-21 15:30:40 +08:00
    @Mutoo 单位错了,是 10ms 和 20ms
    增加到 30 个 x 可以超过 10s

    function f3() {
    return /(x+x+)+y/.exec("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") || true; // > 10s
    }
    no1xsyzy
        12
    no1xsyzy  
       2018-11-21 15:36:35 +08:00
    30 bytes
    m=a=>(!a||m(a-1)+m(a-1));m(99)

    应该上服务器也能 10s 以上,我的电脑 99 换 31 就 true 了
    lzuntalented
        13
    lzuntalented  
       2018-11-21 15:42:30 +08:00
    好一手空手套代码 [逃]
    nekoneko
        14
    nekoneko  
       2018-11-21 15:44:28 +08:00
    console.log(true)
    mytry
        15
    mytry  
    OP
       2018-11-21 15:53:41 +08:00
    之前尝试最短的是 10 个字符~ (提示:可以用 ES6 )
    vicvinc
        16
    vicvinc  
       2018-11-21 18:03:05 +08:00
    蛋疼。。
    Luckyray
        17
    Luckyray  
       2018-11-21 18:06:34 +08:00
    嘿嘿有点好玩
    fulvaz
        18
    fulvaz  
       2018-11-21 18:11:26 +08:00
    用 console.time()和 console.timeEnd()记录时间呀
    TomatoYuyuko
        19
    TomatoYuyuko  
       2018-11-21 18:21:32 +08:00
    function f() {
    alert("泽挖耳朵!")
    }

    (function() {
    var now = Date.now;
    var t1 = now();
    f();
    var t2 = now();
    console.log(t2 - t1 > 10000);
    })();

    阻断就行了,你不点想要多久都 ok
    AsaMyth
        20
    AsaMyth  
       2018-11-21 18:24:47 +08:00 via Android
    @TomatoYuyuko “ The world ”?
    azhi
        21
    azhi  
       2018-11-21 19:14:15 +08:00
    await 内部 setTimeout
    lamtim
        22
    lamtim  
       2018-11-21 19:35:18 +08:00 via iPhone
    function f(){
    let start=window.performance.now(),end=window.performance.now()
    while(end-start<10001){
    end=window.performance.now()
    }
    }
    不知道可不可以
    valentin508
        23
    valentin508  
       2018-11-22 00:32:33 +08:00 via Android
    求求楼上楼下的审题吧,是让 CPU 跑十秒不是让浏览器窗口卡十秒行吗
    meepo3927
        24
    meepo3927  
       2018-11-22 09:46:51 +08:00
    连续出了几个"挑战题",

    兄弟你是不是要搞事情…
    nanmu42
        25
    nanmu42  
       2018-11-22 09:49:31 +08:00 via Android
    while true ... (逃)
    mytry
        26
    mytry  
    OP
       2018-11-22 10:27:33 +08:00
    公布 10 个字符的答案:



    如果 CPU 太快可以把 7n 改成 8n 就可以。

    如果是 9n**9n**9n 未来几年的 CPU 都不可能在 10s 里算出答案,9^9^9 ≈ 4.28 x 10^369693099 这个数字的位数就有 3 亿多~
    night98
        27
    night98  
       2018-11-22 11:24:29 +08:00
    while(true){}
    cwang22
        28
    cwang22  
       2018-11-22 12:54:50 +08:00
    @mytry BigInt 还不是 Javascript 标准
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1209 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:32 PVG 01:32 LAX 09:32 JFK 12:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86