【问题标题】:Is there a floating point error in this obfuscated code?此混淆代码中是否存在浮点错误?
【发布时间】:2017-01-03 04:01:12
【问题描述】:

作为一个谜题,我昨天收到了以下 sn-p 代码的问题

为什么这会给出 773.06..?

var _ = 10, __ = 21, ___ = 38;
var _______ = { _: { "yo":_/___*_+___ }};
var ___________ = [[[{"heh":{"hehe":[[[[12,71,82,91]]]][0][0][0][1]}}]]];
var ____________ = ___________[0][0][0].heh.hehe*_+__+_______._.yo/_+___;
console.log(____________);

我不记得预期的答案,但至少是 800。一位同事简单地看了看,说这是由于浮点不精确,但我认为它应该返回 773.06 ..

正确答案是什么?

整理代码

var a = 10, b = 21, c = 38;
var d = a/c*a+c;
var e = (71*a)+b+(d/a)+c;
console.log(e);

【问题讨论】:

  • 如果您将所有变量名称从 _ 更改为 a, b, c 或类似的以提高可读性,将对人们有很大帮助
  • 这个代码是高尔夫吗?
  • 好像孩子们在玩键盘
  • @EatPeanutButter 如果您想查看它是否返回 800 v 773.06 b/c 的浮点错误,为什么要让这个问题难以阅读?
  • 这可能是一个混淆竞赛条目。 :) 它基本上或多或少 (71 * 10) + 21 + ((10 / 38 * 10 + 38) / 10) + 38,这给了我 710 + 21 + 40,63 + 38 = 809,63 但我可能用过38 而不是 20,因为我 cba 计算_bars。 :)

标签: javascript arithmetic-expressions deobfuscation


【解决方案1】:

其实没有错误。这是故意混淆的,但如果你简化你会得到如下:

var A = 10;
var B = 21;
var C = 38;
var D = { A: { "yo": A / C * A + C }};
var E = [[[{"heh":{"hehe":[[[[12, 71, 82, 91]]]][0][0][0][1]}}]]];
var F = E[0][0][0].heh.hehe * A + B + D.A.yo / A + C;
console.log(F);

然后变成:

var D = 10 / 38 * 10 + 38;
var E = [[[[12, 71, 82, 91]]]][0][0][0][1];
var F = E * 10 + 21 + D / 10 + 38;
console.log(F);

然后变成:

var D = 10 / 38 * 10 + 38;
var F = 71 * 10 + 21 + D / 10 + 38;
console.log(F);

然后变成:

var F = 769 + (100 / 38 + 38) / 10;
console.log(F);

然后变成:

console.log(769 + 3.8 + 10 / 38);

【讨论】:

    【解决方案2】:

    最后一行相当于: 71*10+21+(10/38*10+38)/10+38 也就是 773.06...

    如果您忘记将d 除以a,您可以获得809.63157894

    【讨论】:

      【解决方案3】:

      让我们去掉臃肿,给这个东西一些可读的变量名:

      //translated line by line
      var a = 10, b = 21, c = 38;
      var d = a/c*a + c;
      //d = 100/38 + 38
      //d = 40.63157894736842
      var e = [12,71,82,91][1];
      //e = 71;
      var f = e*a + b + d/a + c;
      //f = 710 + 21 + 4.xxx + 38
      //f = 773.0631578947368
      console.log(f);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 2013-09-03
        相关资源
        最近更新 更多