• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mytry
V2EX  ›  程序员

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

  •  
  •   mytry · Nov 21, 2018 · 4542 views
    This topic created in 2755 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    function f3() {
    return /(x+x+)+y/.exec("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") || true; // > 10s
    }
    no1xsyzy
        12
    no1xsyzy  
       Nov 21, 2018
    30 bytes
    m=a=>(!a||m(a-1)+m(a-1));m(99)

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

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

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

    兄弟你是不是要搞事情…
    nanmu42
        25
    nanmu42  
       Nov 22, 2018 via Android
    while true ... (逃)
    mytry
        26
    mytry  
    OP
       Nov 22, 2018
    公布 10 个字符的答案:



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

    如果是 9n**9n**9n 未来几年的 CPU 都不可能在 10s 里算出答案,9^9^9 ≈ 4.28 x 10^369693099 这个数字的位数就有 3 亿多~
    night98
        27
    night98  
       Nov 22, 2018
    while(true){}
    cwang22
        28
    cwang22  
       Nov 22, 2018
    @mytry BigInt 还不是 JavaScript 标准
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5918 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 120ms · UTC 03:34 · PVG 11:34 · LAX 20:34 · JFK 23:34
    ♥ Do have faith in what you're doing.