Lời khuyên cho việc chơi golf ở Haxe


12

Bạn có lời khuyên chung nào cho việc chơi golf ở Haxe ? Tôi đang tìm kiếm những ý tưởng có thể được áp dụng cho các vấn đề về golf-code và ít nhất cũng hơi cụ thể đối với Haxe (ví dụ: "xóa bình luận" không phải là một câu trả lời).

Xin vui lòng gửi một lời khuyên cho mỗi câu trả lời.

Haxe có thể được chạy trực tuyến tại đây !


Tôi đã sử dụng Haxe khá nhiều trong quá khứ, nhưng kể từ khi tôi bắt đầu chơi golf, tôi đã không sử dụng nó nhiều. Tôi sẽ phải thử sử dụng nó để chơi gôn ...
Sản phẩm ETH

@ETHproductions Tương tự ở đây. Hôm nay, tôi đã chơi golf hai lần với nó, và nó rất vui. Nó có một số khả năng chơi golf tốt với (ví dụ) khả năng hiểu và lặp lại danh sách của nó, vì vậy tôi quyết định mở câu hỏi để xem có ai có mẹo để chia sẻ không.
Yytsi

Câu trả lời:


8

Nội suy chuỗi

Haxe hỗ trợ nội suy chuỗi trên chuỗi trích dẫn đơn. Giống như các chuỗi mẫu trong JavaScript ES6, bạn có thể bao gồm một biểu thức trong một chuỗi với ${...}:

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

Tuy nhiên, không giống như ES6, bạn có thể bỏ qua dấu ngoặc nhọn khi biểu thức là một biến duy nhất:

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

Cả hai ví dụ này đều được in 2 + 2 = 4.


7

Hiểu mảng

Haxe hỗ trợ hiểu mảng:

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

Không giống như nhiều ngôn ngữ khác, bạn cũng có thể sử dụng whileđể hiểu:

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

Điều này có thể rất hữu ích khi bạn không biết bạn cần bao lâu một mảng.

Bạn cũng có thể chuỗi for, whileiftuyên bố:

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

Ồ Tôi sẽ xóa câu trả lời của tôi. Tôi thực sự xây dựng cùng một câu trả lời, chỉ trễ một phút. Ngoài ra, bạn có thể muốn lưu ý rằng nó thực sự in dấu ngoặc vuông quanh danh sách, vì vậy người đọc sẽ không bị nhầm lẫn, vì một số thách thức đòi hỏi các định dạng đầu ra nghiêm ngặt.
Yytsi

@TuukkaX Haha, điều đó đôi khi xảy ra :) Tôi sẽ bao gồm một trong những ví dụ của bạn ở đây, nếu bạn không phiền. Ngoài ra, try.haxe.org dường như không in dấu ngoặc vuông ...
Sản phẩm ETH

Một trong những tính toán các sản phẩm cartesian là gọn gàng. Tôi nghĩ rằng đó sẽ là một bổ sung tốt cho bài viết của bạn :)
Yytsi

6

Toán tử phạm vi

Haxe có một toán tử phạm vi ...có thể được sử dụng để tạo phạm vi số nguyên. Ví dụ, thay vì điều này:

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

Bạn có thể làm được việc này:

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

Cụ thể cho x...y:

  • xycả hai phải là Ints.
  • xkhông thể lớn hơn y.
  • Điều này trả về một đối tượng IntIterator , có thể được sử dụng ở cùng một nơi với bất kỳ Iterable nào.

1

Chạy một tuyên bố có điều kiện

Rõ ràng bạn có thể chạy bất cứ điều gì có điều kiện với if:

if(n>5)doSomething(n);

Tuy nhiên, nếu bạn chỉ có một câu lệnh như trên, bạn có thể sử dụng toán tử điều kiện ternary để lưu một byte:

n>5?doSomething(n):0;

Đôi khi bạn có thể lưu một byte khác bằng cách sử dụng &&, mặc dù điều này rất hiếm vì &&chỉ hoạt động nếu cả hai biểu thức trả về booleans:

n>5&&doSomething(n);

Một ngoại lệ chính cho điều này là từ khóa : nếu haXe chạy vào một return, breakhoặc continue bất cứ nơi nào , nó sẽ ngay lập tức chạy nó và bỏ bất cứ điều gì biểu hiện nó đã làm việc trên. Điều này có nghĩa là thay vì điều này:

if(n>5)return n;

Bạn có thể làm điều này để tiết kiệm 2 byte:

n>5&&return n;

1

Sử dụng từ khóa trong biểu thức

Một đặc điểm khác thường của Haxe là mọi thứ đều là biểu hiện . Ví dụ: mã này hoàn toàn hợp lệ:

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

Được rồi, đó là một ví dụ khá vô dụng, nhưng hy vọng bạn hiểu ý tôi. Điều này hoạt động với hầu hết các từ khóa:

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

Điều này cho phép bạn sử dụng if/ elsenội tuyến, như p=if(n>1)7else 4;, tất nhiênp=n>1?7:4; là ngắn hơn.

Từ khóa bạn không thể sử dụng nội tuyến

  • var - Trình biên dịch sẽ phàn nàn về việc cố gắng sử dụng Void làm giá trị.
  • for/ while- Tương tự như trên, mặc dù bạn có thể sử dụng chúng trong việc hiểu mảng .

1

Bỏ qua dấu ngoặc hàm

Không giống như hầu hết các ngôn ngữ, mọi thứ trong Haxe là một biểu thức , bao gồm {blocks}. Do đó, dấu ngoặc nhọn ở bất cứ đâu trong chương trình Haxe (ngoại trừ các switchbiểu thức) có thể bị bỏ đi nếu chúng chỉ chứa một câu lệnh. Vì vậy, thay vì điều này:

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

Bạn có thể làm được việc này:

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

Một byte dễ dàng được lưu trên nhiều chức năng.

Ngay cả khi một hàm phải chứa nhiều câu lệnh, bạn thường có thể lưu một byte bằng cách di chuyển return bên ngoài khối:

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

Điều này hoạt động vì một khối đánh giá biểu thức cuối cùng bên trong khối.


Chỉnh sửa: nếu bạn cần khối lập phương của một số, tốt hơn là sử dụng n*n*nhoặc tương đương n*n*n*ncho phần tesseract của một số, v.v ... Tuy nhiên, Math.powphục vụ như một ví dụ tốt ở đây.
Yytsi

@TuukkaX Heh, cảm ơn. Tôi sẽ sử dụng Math.pow(3,n)thay thế ;-)
Sản phẩm ETH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.