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