哈克塞高尔夫技巧


12

您在Haxe打高尔夫球有哪些一般提示?我正在寻找可以应用于代码高尔夫球问题的想法,并且这些想法至少也特定于Haxe(例如,“删除评论”不是答案)。

请为每个答案发布一个提示。

Haxe可以在这里在线运行!


过去,我已经使用Haxe了很多,但是自从我开始打高尔夫球以来,我并没有经常使用它。我将不得不尝试将其用于打高尔夫球...
ETHproductions

@ETHproductions同样在这里。今天,我打了两次高尔夫球,这很有趣。它具有一些不错的高尔夫功能,例如,它的列表理解和迭代器,因此我决定公开问题,看看是否有人可以分享技巧。
Yytsi

Answers:


8

字符串插值

Haxe支持对单引号字符串进行字符串插值。就像JavaScript ES6中的模板字符串一样,您可以在字符串中包含一个表达式,其中包括${...}

trace('2 + 2 = ${2 + 2}');

但是,与ES6不同,当表达式为单个变量时,可以省略大括号:

var x = 2 + 2;
trace('2 + 2 = $x');

这两个示例都可以打印2 + 2 = 4


7

数组理解

Haxe支持数组推导:

trace([for (i in 0...5) i]); // Prints 0,1,2,3,4

与许多其他语言不同,您还可以while在理解中使用:

var i = 5;
trace([while (i > 0) i--]); // Prints 5,4,3,2,1

当您不知道需要多长时间时,这将非常有用。

您还可以链forwhileif语句:

trace([for (x in ['A','B','C','D'])
       for (y in ['x','y'])
       if (x + y != "Cx")
       x + y
]); // Prints Ax,Ay,Bx,By,Cy,Dx,Dy

哇。我将删除答案。我从字面上提出了同样的答案,只是迟到了一分钟。另外,您可能要注意,它实际上在列表周围打印了方括号,因此读者不会感到困惑,因为某些挑战需要严格的输出格式。
Yytsi

@TuukkaX哈哈,有时会发生:)如果您不介意,我将在这里提供您的示例之一。另外,try.haxe.org似乎没有打印方括号...
ETHproductions 2016年

计算笛卡尔积的那个是整齐的。我认为这将是对您的帖子的一个很好的补充:)
Yytsi

6

范围运算符

Haxe具有范围运算符...,可用于创建整数范围。例如,代替此:

var i = 0;
while (i < 10) trace(i++);

你可以这样做:

for (i in 0...10) trace(i++);

具体内容x...y

  • x并且都y必须是Ints。
  • x不能大于y
  • 这将返回一个IntIterator对象,该对象可以在任何Iterable的相同位置使用。

1

有条件地运行一条语句

显然,您可以使用if

if(n>5)doSomething(n);

但是,如果只有上述一条语句,则可以使用三元条件运算符保存一个字节:

n>5?doSomething(n):0;

有时您可以使用来保存另一个字节&&,尽管这种情况很少见,因为&&仅当两个表达式都返回布尔值时,它才有效:

n>5&&doSomething(n);

一个主要例外是关键字:如果HAXE跑入returnbreakcontinue 任何地方,它会立即运行和退出是工作在任何表情。这意味着除了:

if(n>5)return n;

您可以这样做以节省2个字节:

n>5&&return n;

1

在表达式中使用关键字

Haxe的另一个不寻常的特征是,一切都是一种表达。例如,此代码完全有效:

function(n){while(n>0)n%4==1?return 6:n--;return 3;}

好的,这是一个毫无用处的示例,但希望您能理解我的意思。这适用于大多数关键字:

function(n){while(n>0)n%4==1?break:n--;return n;}

这允许您使用if/ else内联,例如p=if(n>1)7else 4;,尽管当然p=n>1?7:4;要短一些。

您不能内联使用的关键字

  • var -编译器会抱怨尝试使用Void作为值。
  • for/ while-与上述相同,尽管您可以在数组推导中使用它们。

1

省略功能支架

与大多数语言不同,Haxe中的所有内容都是一个表达式,包括{blocks}。因此,大括号随时随地在HAXE计划(除外switch表达式)可以留下,如果他们只包含一个声明。所以代替这个:

function f(n){return Math.pow(3,n);}

你可以这样做:

function f(n)return Math.pow(3,n);

一个简单的两个字节保存在许多函数上。

即使一个函数必须包含多个语句,也可以通过将代码移到外部来节省一个字节return

function f(a){var b=a*a;return a<0?-b:b;}
function f(a)return{var b=a*a;a<0?-b:b;}

之所以有效,是因为一个块求值到该块内的最后一个表达式。


编辑:如果需要数字的多维数据集,则最好使用n*n*n,或者等效地使用n*n*n*n数字的tesseract,等等。但是,Math.pow这里是一个很好的例子。
Yytsi

@TuukkaX嘿,谢谢。我将Math.pow(3,n)改用;-)
ETHproductions'Jan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.