📜  JavaScript 代码打高尔夫球

📅  最后修改于: 2022-05-13 01:56:37.007000             🧑  作者: Mango

JavaScript 代码打高尔夫球

JavaScript 中的Code Golf是指尝试使用尽可能少的字符来解决问题。就像在高尔夫中一样,低分获胜,最少的字符“获胜”。由于向后兼容性、怪癖、它是一种高级语言以及所有的强制,JavaScript 是一种用于代码打高尔夫球的绝佳语言。所以,在这里我们将看一些 JavaScript 语言的 Code Golfing 技术:

1. 检查一个变量是否等于某个正数:我们可以简单地用一堆 if-else 语句来做到这一点,但我们也有不同的方法,比如从数字中减去那个正整数并检查它是否大于零或不是。

  • 原始代码:
    if(a == 5){
        yes();
    }else{
        no();
    }
    
  • 打高尔夫球的代码 - 我
    x == 3 ? "y" : "n";
    
  • 打高尔夫球的代码 – II
    x-3 ? "y" : "n";
    
  • 打高尔夫球的代码 - III
    x^3 ? "y" : "n";
    

2. 检查字面量大小写:我们甚至可以将字面量量与{}进行比较以检查其大小写,大写返回true ,小写返回false

  • 打高尔夫球的代码:
    'g' < {}     // Returns false, lower case
    'G' < {}     // Returns true, upper case
    

3. 取值:在数学库中的 floor函数中使用了一个直接的解决方案,但它需要更多的字符。我们可以使用|在几个字符中做同样的事情运算符。

  • 原始代码:
    a = Math.floor(a);
    
  • 打高尔夫球的代码:
    a = 0 | a;
    

4. ceil 值:一个直接的解决方案是使用数学库中存在的 ceil函数,但它需要更多的字符。我们可以使用%, ~运算符的组合在几个字符中做同样的事情。

  • 原始代码:
    a = Math.ceil(a);
    
  • 打高尔夫球的代码:
    a = a%1 ? -~a : a;
    

5. 舍入值:直接的解决方案用于舍入数学库中存在的函数,但它需要更多的字符。我们可以通过使用|、+运算符的组合在几个字符中执行相同的操作。

  • 原始代码:
    a = Math.round(a);
    
  • 打高尔夫球的代码:
    a = 0 | a + .5;
    

6. 箭头函数:箭头函数提供了一种在 JavaScript 中编写函数的简洁方式。

  • 原始代码:
    g = function (a) {
       return a * a * a;
    }
    
  • 打高尔夫球的代码:
    g = a => a*a*a;
    

7. min函数的替代方案:三元运算符总是节省字节。我们可以使用三元运算符比较两个数字。

  • 原始代码:
    Math.min(x, y);
    
  • 打高尔夫球的代码:
    a < b ? a : b
    

8. max函数的替代方案:三元运算符总是节省字节。我们可以使用三元运算符比较两个数字。

  • 原始代码:
    Math.max(x, y);
    
  • 打高尔夫球的代码:
    a < b ? b : a
    

9.绝对值:一个直接的解决方案是使用数学库中存在的绝对函数,但它需要更多的字符。我们可以使用三元运算符在几个字符中做同样的事情。

  • 原始代码:
    Math.abs(x)
    
  • 打高尔夫球的代码:
    x < 0 ? -x : x
    

10. 在循环中保存字节:我们可以通过更改上次使用的变量来保存字节。

  • 原始代码:
    for(x = 0; x < 10; x++){
      alert(x);
    }
    
  • 打高尔夫球的代码:
    for(x = 0; x < 3 ; ){
      alert(x++);
    }
    

11. 计算数组的总和或乘积:我们可以选择通过迭代循环来完成任务,但为了节省字节,我们可以使用eval和算术运算运算符,如+、*、^等。

  • 打高尔夫球的代码:
    eval(a.join('+'))
    eval(a.join`+`)
    
    eval(a.join('*'))
    eval(a.join`*`)
    

12. 检查 NaN: JavaScript 中的 NaN 方法用于判断传入的值是否为 NaN(Not a Number) 且是否为“Number”类型。

  • 原始代码:
    if(isNaN(x)){
        alert(x);
    }
    
  • 打高尔夫球的代码:
    if(x != x){
        alert(x);
    }
    

注意:仅当 typeof(x) == “number” 时才有效

13. for vs while 循环:两个循环在时间复杂度方面都很有效,但在空间复杂度方面, for循环很多时候胜过while循环。

  • 打高尔夫球的代码:
    i = 10;
    while(i--);    # While loop
    
    for(i = 10; i--; );     # For loop
    

14.将嵌套循环组合成一个循环:我们可以将2度或更多度的嵌套循环组合成一个循环。

  • 原始代码:
    for(i = 10; i--; )
        for(j = 5; j--; )
            do_something(i, j)
    
  • 打高尔夫球的代码:
    for(i = 50; i--; )
        do_something(0 | i/5, i%5)
    

15. 生成范围之间的随机数:我们可以使用 Date 类来生成随机数,因为 Date 在 JavaScript 内部存储为自一个纪元以来的毫秒数。

  • 打高尔夫球的代码:
    new Date%1500   // Random integer 0 <= x < 1500